393 lines
10 KiB
JavaScript
393 lines
10 KiB
JavaScript
import router from "@/router";
|
|
import { apiurl, fetch as authfetch, loginapi, registerapi } from "@/util/auth";
|
|
|
|
export async function fetch(url, init, signal) {
|
|
try {
|
|
let res = await authfetch(url, init, signal);
|
|
if (!res.ok) {
|
|
if (res.status === 401) {
|
|
router.push({
|
|
name: "login",
|
|
query: { redirect: router.currentRoute.fullPath }
|
|
});
|
|
// if we return a response containing an error what happens is
|
|
// that router.push mounts the login view before the calling
|
|
// component processed the response and the calling component
|
|
// may set the "unauthorized" error as a global error hiding the
|
|
// login view.
|
|
// So return an empty response so the caller won't set a global
|
|
// error (but in the console will appear other errors since also
|
|
// data is null)
|
|
|
|
// TODO(sgotti) find a way to make this cleaner. The solution
|
|
// could be to find a way to firstly let the component handle
|
|
// the error and the do the router push...
|
|
return;
|
|
}
|
|
let data = await res.json();
|
|
return { data: null, error: data.message };
|
|
} else {
|
|
if (res.status == 204) {
|
|
return { data: null, error: null };
|
|
}
|
|
return { data: await res.json(), error: null };
|
|
}
|
|
} catch (e) {
|
|
if (e.name == "AbortError") {
|
|
return { data: null, error: null, aborted: true };
|
|
}
|
|
return { data: null, error: "api call failed: " + e.message };
|
|
}
|
|
}
|
|
|
|
export async function login(username, password, remotesourcename) {
|
|
let init = {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
remote_source_name: remotesourcename,
|
|
login_name: username,
|
|
password: password
|
|
})
|
|
};
|
|
|
|
try {
|
|
let res = await loginapi(init);
|
|
if (!res.ok) {
|
|
let data = await res.json();
|
|
return { data: null, error: data.message };
|
|
} else {
|
|
return { data: await res.json(), error: null };
|
|
}
|
|
} catch (e) {
|
|
return { data: null, error: "api call failed: " + e.message };
|
|
}
|
|
}
|
|
|
|
export async function register(
|
|
username,
|
|
remotesourcename,
|
|
remoteloginname,
|
|
remotepassword
|
|
) {
|
|
let init = {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
username: username,
|
|
remote_source_name: remotesourcename,
|
|
remote_source_login_name: remoteloginname,
|
|
remote_source_login_password: remotepassword
|
|
})
|
|
};
|
|
|
|
try {
|
|
let res = await registerapi(init);
|
|
if (!res.ok) {
|
|
let data = await res.json();
|
|
return { data: null, error: data.message };
|
|
} else {
|
|
return { data: await res.json(), error: null };
|
|
}
|
|
} catch (e) {
|
|
return { data: null, error: "api call failed: " + e.message };
|
|
}
|
|
}
|
|
|
|
export async function fetchCurrentUser(signal) {
|
|
let path = "/user";
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function fetchOrgMembers(orgref, signal) {
|
|
let path = "/orgs/" + orgref + "/members";
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function fetchRuns(group, startRunID, lastrun, signal) {
|
|
let u = apiurl("/runs");
|
|
if (group) {
|
|
u.searchParams.append("group", group);
|
|
}
|
|
if (lastrun) {
|
|
u.searchParams.append("lastrun", true);
|
|
}
|
|
if (startRunID) {
|
|
u.searchParams.append("start", startRunID);
|
|
}
|
|
|
|
return await fetch(u, null, signal);
|
|
}
|
|
|
|
export async function fetchRun(runid, signal) {
|
|
return await fetch(apiurl("/runs/" + runid), null, signal);
|
|
}
|
|
|
|
export async function fetchTask(runid, taskid, signal) {
|
|
return await fetch(apiurl("/runs/" + runid + "/tasks/" + taskid), signal);
|
|
}
|
|
|
|
export async function fetchUser(username, signal) {
|
|
let path = "/users/" + username;
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function fetchProjectGroup(projectgroupref, signal) {
|
|
let path = "/projectgroups/" + encodeURIComponent(projectgroupref);
|
|
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function fetchProjectGroupSubgroups(projectgroupref, signal) {
|
|
let path = "/projectgroups/" + encodeURIComponent(projectgroupref);
|
|
path += "/subgroups";
|
|
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function fetchProjectGroupProjects(projectgroupref, signal) {
|
|
let path = "/projectgroups/" + encodeURIComponent(projectgroupref);
|
|
path += "/projects";
|
|
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function fetchProject(ref, signal) {
|
|
let path = "/projects/" + encodeURIComponent(ref);
|
|
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function fetchSecrets(ownertype, ref, all, signal) {
|
|
let path;
|
|
if (ownertype == "project") {
|
|
path = "/projects/";
|
|
} else if (ownertype == "projectgroup") {
|
|
path = "/projectgroups/";
|
|
}
|
|
path += encodeURIComponent(ref);
|
|
path += "/secrets";
|
|
if (all) {
|
|
path += "?tree&removeoverridden";
|
|
}
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function fetchVariables(ownertype, ref, all, signal) {
|
|
let path;
|
|
if (ownertype == "project") {
|
|
path = "/projects/";
|
|
} else if (ownertype == "projectgroup") {
|
|
path = "/projectgroups/";
|
|
}
|
|
path += encodeURIComponent(ref);
|
|
path += "/variables";
|
|
if (all) {
|
|
path += "?tree&removeoverridden";
|
|
}
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function createOrganization(orgname, visibility, signal) {
|
|
let path = "/orgs";
|
|
let init = {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
name: orgname,
|
|
visibility: visibility
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function createUserToken(username, tokenname, signal) {
|
|
let path = "/users/" + username + "/tokens";
|
|
let init = {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
token_name: tokenname
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function deleteUserToken(username, tokenname, signal) {
|
|
let path = "/users/" + username + "/tokens/" + tokenname;
|
|
let init = {
|
|
method: "DELETE"
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function createUserLinkedAccount(
|
|
username,
|
|
remotesourcename,
|
|
loginname,
|
|
password,
|
|
signal
|
|
) {
|
|
let path = "/users/" + username + "/linkedaccounts";
|
|
let init = {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
remote_source_name: remotesourcename,
|
|
remote_source_login_name: loginname,
|
|
remote_source_login_password: password
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function deleteLinkedAccount(username, laid, signal) {
|
|
let path = "/users/" + username + "/linkedaccounts/" + laid;
|
|
let init = {
|
|
method: "DELETE"
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function restartRun(runid, fromStart, signal) {
|
|
let path = "/runs/" + runid + "/actions";
|
|
let init = {
|
|
method: "PUT",
|
|
body: JSON.stringify({
|
|
action_type: "restart",
|
|
from_start: fromStart
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function cancelRun(runid, signal) {
|
|
let path = "/runs/" + runid + "/actions";
|
|
let init = {
|
|
method: "PUT",
|
|
body: JSON.stringify({
|
|
action_type: "cancel"
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function stopRun(runid, signal) {
|
|
let path = "/runs/" + runid + "/actions";
|
|
let init = {
|
|
method: "PUT",
|
|
body: JSON.stringify({
|
|
action_type: "stop"
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function approveTask(runid, taskid, signal) {
|
|
let path = "/runs/" + runid + "/tasks/" + taskid + "/actions";
|
|
let init = {
|
|
method: "PUT",
|
|
body: JSON.stringify({
|
|
action_type: "approve"
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function fetchRemoteSources(signal) {
|
|
let path = "/remotesources";
|
|
return await fetch(apiurl(path), null, signal);
|
|
}
|
|
|
|
export async function userRemoteRepos(remotesourceid, signal) {
|
|
let path = "/user/remoterepos/" + remotesourceid;
|
|
return await fetch(apiurl(path, null, signal));
|
|
}
|
|
|
|
export async function createProjectGroup(parentref, name, visibility, signal) {
|
|
let path = "/projectgroups";
|
|
let init = {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
name: name,
|
|
parent_ref: parentref,
|
|
visibility: visibility
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function updateProjectGroup(
|
|
projectgroupref,
|
|
name,
|
|
visibility,
|
|
signal
|
|
) {
|
|
let path = "/projectgroups/" + encodeURIComponent(projectgroupref);
|
|
let init = {
|
|
method: "PUT",
|
|
body: JSON.stringify({
|
|
name: name,
|
|
visibility: visibility
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function createProject(
|
|
parentref,
|
|
name,
|
|
visibility,
|
|
remotesourcename,
|
|
remoterepopath,
|
|
passvarstoforkedpr,
|
|
signal
|
|
) {
|
|
let path = "/projects";
|
|
let init = {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
name: name,
|
|
parent_ref: parentref,
|
|
visibility: visibility,
|
|
remote_source_name: remotesourcename,
|
|
repo_path: remoterepopath,
|
|
pass_vars_to_forked_pr: passvarstoforkedpr
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function updateProject(projectref, name, visibility, passvarstoforkedpr, signal) {
|
|
let path = "/projects/" + encodeURIComponent(projectref);
|
|
let init = {
|
|
method: "PUT",
|
|
body: JSON.stringify({
|
|
name: name,
|
|
visibility: visibility,
|
|
pass_vars_to_forked_pr: passvarstoforkedpr
|
|
})
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function deleteProject(projectref, signal) {
|
|
let path = "/projects/" + encodeURIComponent(projectref);
|
|
let init = {
|
|
method: "DELETE"
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function projectUpdateRepoLinkedAccount(projectref, signal) {
|
|
let path =
|
|
"/projects/" + encodeURIComponent(projectref) + "/updaterepolinkedaccount";
|
|
let init = {
|
|
method: "PUT"
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|
|
|
|
export async function deleteProjectGroup(projectgroupref, signal) {
|
|
let path = "/projectgroups/" + encodeURIComponent(projectgroupref);
|
|
let init = {
|
|
method: "DELETE"
|
|
};
|
|
return await fetch(apiurl(path), init, signal);
|
|
}
|