Path: blob/master/src/packages/next/pages/api/v2/projects/set-admin-quotas.ts
1698 views
/*1API endpoint to set project quotas as admin.23This requires the user to be an admin.4*/56import userIsInGroup from "@cocalc/server/accounts/is-in-group";7import { setQuotas } from "@cocalc/server/conat/api/projects";8import getAccountId from "lib/account/get-account";9import { apiRoute, apiRouteOperation } from "lib/api";10import getParams from "lib/api/get-params";11import {12SetAdminQuotasInputSchema,13SetAdminQuotasOutputSchema,14} from "lib/api/schema/projects/set-admin-quotas";15import { SuccessStatus } from "lib/api/status";1617async function handle(req, res) {18try {19res.json(await get(req));20} catch (err) {21res.json({ error: `${err.message}` });22return;23}24}2526async function get(req) {27const account_id = await getAccountId(req);28if (account_id == null) {29throw Error("must be signed in");30}31// This user MUST be an admin:32if (!(await userIsInGroup(account_id, "admin"))) {33throw Error("only admins can set project quotas");34}3536const {37project_id,38memory_limit,39memory_request,40cpu_request,41cpu_limit,42disk_quota,43idle_timeout,44internet,45member_host,46always_running,47} = getParams(req);4849await setQuotas({50account_id,51project_id,52memory: memory_limit,53memory_request,54cpu_shares:55cpu_request != null ? Math.round(cpu_request * 1024) : undefined,56cores: cpu_limit,57disk_quota,58mintime: idle_timeout,59network: internet != null ? (internet ? 1 : 0) : undefined,60member_host: member_host != null ? (member_host ? 1 : 0) : undefined,61always_running:62always_running != null ? (always_running ? 1 : 0) : undefined,63});6465return SuccessStatus;66}6768export default apiRoute({69setAdminQuotas: apiRouteOperation({70method: "POST",71openApiOperation: {72tags: ["Projects", "Admin"],73},74})75.input({76contentType: "application/json",77body: SetAdminQuotasInputSchema,78})79.outputs([80{81status: 200,82contentType: "application/json",83body: SetAdminQuotasOutputSchema,84},85])86.handler(handle),87});888990