initial updates to api v2.0.0:
- switch access backend to access-manager-api - change resource quota to pool based - simplify backend system - various cleanup
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
import axios from "axios";
|
||||
import { ACCESS_BACKEND } from "./backends.js";
|
||||
import * as setCookie from "set-cookie-parser";
|
||||
|
||||
export default class ACCESS_MANAGER_API extends ACCESS_BACKEND {
|
||||
#apiURL = null;
|
||||
|
||||
constructor (config) {
|
||||
super();
|
||||
this.#apiURL = config.url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Send HTTP request to paas-LDAP API.
|
||||
* @param {*} path HTTP path, prepended with the paas-LDAP API base url
|
||||
* @param {*} method HTTP method
|
||||
* @param {*} auth HTTP auth cookies
|
||||
* @param {*} body body parameters and data to be sent. Optional.
|
||||
* @returns {Object} HTTP response object
|
||||
*/
|
||||
async #requestAPI (path, method, auth = null, body = null) {
|
||||
const url = `${this.#apiURL}${path}`;
|
||||
const content = {
|
||||
method,
|
||||
mode: "cors",
|
||||
credentials: "include",
|
||||
headers: {
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
},
|
||||
data: body
|
||||
};
|
||||
|
||||
if (auth) {
|
||||
content.headers.Cookie = `PAASAccessManagerTicket=${auth.PAASAccessManagerTicket};`;
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await axios.request(url, content);
|
||||
return {
|
||||
ok: result.status === 200,
|
||||
status: result.status,
|
||||
data: result.data,
|
||||
headers: result.headers
|
||||
};
|
||||
}
|
||||
catch (error) {
|
||||
console.log(`access: error ocuured in access.requestAPI: ${error}`);
|
||||
const result = error.response;
|
||||
result.ok = result.status === 200;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
async openSession (user, password) {
|
||||
const credentials = { username: `${user.id}@${user.realm}`, password };
|
||||
const response = await this.#requestAPI("/ticket", "POST", null, credentials);
|
||||
if (response.ok) {
|
||||
const cookies = setCookie.parse(response.headers["set-cookie"]);
|
||||
cookies.forEach((e) => {
|
||||
e.expiresMSFromNow = e.expires - Date.now();
|
||||
});
|
||||
return {
|
||||
ok: true,
|
||||
status: response.status,
|
||||
message: "",
|
||||
cookies
|
||||
};
|
||||
}
|
||||
else {
|
||||
return {
|
||||
ok: false,
|
||||
status: response.status,
|
||||
message: response.data.error,
|
||||
cookies: []
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
async closeSession(tokens) {
|
||||
const response = await this.#requestAPI("/ticket", "DELETE", tokens);
|
||||
return response;
|
||||
}
|
||||
|
||||
async addUser (user, attributes, params) {}
|
||||
|
||||
async getUser (user, params) {
|
||||
const response = await this.#requestAPI(`/users/${user.id}@${user.realm}`, "GET", params);
|
||||
if (response.ok) { // if ok, return user data
|
||||
return {
|
||||
ok: true,
|
||||
status: response.status,
|
||||
user: response.data.user
|
||||
};
|
||||
}
|
||||
else { // else return null
|
||||
return {
|
||||
ok: false,
|
||||
status: response.status,
|
||||
message: response.data.error
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
async setUser (user, attributes, params) {}
|
||||
|
||||
async delUser (user, params) {}
|
||||
|
||||
async addGroup (group, attributes, params) {}
|
||||
|
||||
async getGroup (group, params) {
|
||||
const response = await this.#requestAPI(`/groups/${group.id}-${group.realm}`, "GET", params);
|
||||
if (response.ok) { // if ok, return user data
|
||||
return {
|
||||
ok: true,
|
||||
status: response.status,
|
||||
group: response.data.group
|
||||
};
|
||||
}
|
||||
else { // else return null
|
||||
return {
|
||||
ok: false,
|
||||
status: response.status,
|
||||
message: response.data.error
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
async setGroup (group, attributes, params) {}
|
||||
|
||||
async delGroup (group, attributes, params) {}
|
||||
|
||||
async addUserToGroup (user, group, params) {}
|
||||
|
||||
async delUserFromGroup (user, group, params) {}
|
||||
|
||||
async addPool (pool, attributes, params) {}
|
||||
|
||||
async getPool (pool, params) {
|
||||
const response = await this.#requestAPI(`/pools/${pool}`, "GET", params);
|
||||
if (response.ok) { // if ok, return user data
|
||||
return {
|
||||
ok: true,
|
||||
status: response.status,
|
||||
pool: response.data.pool
|
||||
};
|
||||
}
|
||||
else { // else return null
|
||||
return {
|
||||
ok: false,
|
||||
status: response.status,
|
||||
message: response.data.error
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
async setPool (pool, attributes, params) {}
|
||||
|
||||
async delPool (pool, params) {}
|
||||
|
||||
async addGroupToPool (group, pool, params) {}
|
||||
|
||||
async delGroupFromPool (group, pool, params) {}
|
||||
}
|
||||
Reference in New Issue
Block a user