Update license endpoints to provide consistent pattern for offline license and license key (create, read, delete)
This commit is contained in:
parent
6aeb31c355
commit
0e80766125
|
@ -3,3 +3,4 @@ export * from "./auditLogs"
|
||||||
export * from "./events"
|
export * from "./events"
|
||||||
export * from "./configs"
|
export * from "./configs"
|
||||||
export * from "./scim"
|
export * from "./scim"
|
||||||
|
export * from "./license"
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
// LICENSE KEY
|
||||||
|
|
||||||
|
export interface ActivateLicenseKeyRequest {
|
||||||
|
licenseKey: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GetLicenseKeyResponse {
|
||||||
|
licenseKey: string,
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFLINE LICENSE
|
||||||
|
|
||||||
|
export interface ActivateOfflineLicenseRequest {
|
||||||
|
offlineLicense: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GetOfflineLicenseResponse {
|
||||||
|
offlineLicense: string
|
||||||
|
}
|
|
@ -1,33 +1,66 @@
|
||||||
import { licensing, quotas } from "@budibase/pro"
|
import { licensing, quotas } from "@budibase/pro"
|
||||||
|
import {
|
||||||
|
ActivateLicenseKeyRequest,
|
||||||
|
ActivateOfflineLicenseRequest,
|
||||||
|
GetLicenseKeyResponse,
|
||||||
|
GetOfflineLicenseResponse,
|
||||||
|
UserCtx,
|
||||||
|
} from "@budibase/types"
|
||||||
|
|
||||||
export const activate = async (ctx: any) => {
|
// LICENSE KEY
|
||||||
|
|
||||||
|
export async function activateLicenseKey(ctx: UserCtx<ActivateLicenseKeyRequest>) {
|
||||||
const { licenseKey } = ctx.request.body
|
const { licenseKey } = ctx.request.body
|
||||||
if (!licenseKey) {
|
|
||||||
ctx.throw(400, "licenseKey is required")
|
|
||||||
}
|
|
||||||
|
|
||||||
await licensing.activateLicenseKey(licenseKey)
|
await licensing.activateLicenseKey(licenseKey)
|
||||||
ctx.status = 200
|
ctx.status = 200
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getLicenseKey(ctx: UserCtx<void, GetLicenseKeyResponse>) {
|
||||||
|
const licenseKey = await licensing.getLicenseKey()
|
||||||
|
if (licenseKey) {
|
||||||
|
ctx.body = { licenseKey: "*" }
|
||||||
|
ctx.status = 200
|
||||||
|
} else {
|
||||||
|
ctx.status = 404
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function deleteLicenseKey(ctx: UserCtx<void, void>) {
|
||||||
|
await licensing.deleteLicenseKey()
|
||||||
|
ctx.status = 204
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFLINE LICENSE
|
||||||
|
|
||||||
|
export async function activateOfflineLicense(ctx: UserCtx<ActivateOfflineLicenseRequest>) {
|
||||||
|
const { offlineLicense } = ctx.request.body
|
||||||
|
await licensing.activateOfflineLicense(offlineLicense)
|
||||||
|
ctx.status = 200
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getOfflineLicense(ctx: UserCtx<void, GetOfflineLicenseResponse>) {
|
||||||
|
const offlineLicense = await licensing.getOfflineLicense()
|
||||||
|
if (offlineLicense) {
|
||||||
|
ctx.body = { offlineLicense: "*" }
|
||||||
|
ctx.status = 200
|
||||||
|
} else {
|
||||||
|
ctx.status = 404
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function deleteOfflineLicense(ctx: UserCtx<void, void>) {
|
||||||
|
await licensing.deleteOfflineLicense()
|
||||||
|
ctx.status = 204
|
||||||
|
}
|
||||||
|
|
||||||
|
// LICENSES
|
||||||
|
|
||||||
export const refresh = async (ctx: any) => {
|
export const refresh = async (ctx: any) => {
|
||||||
await licensing.cache.refresh()
|
await licensing.cache.refresh()
|
||||||
ctx.status = 200
|
ctx.status = 200
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getInfo = async (ctx: any) => {
|
// USAGE
|
||||||
const licenseInfo = await licensing.getLicenseInfo()
|
|
||||||
if (licenseInfo) {
|
|
||||||
licenseInfo.licenseKey = "*"
|
|
||||||
ctx.body = licenseInfo
|
|
||||||
}
|
|
||||||
ctx.status = 200
|
|
||||||
}
|
|
||||||
|
|
||||||
export const deleteInfo = async (ctx: any) => {
|
|
||||||
await licensing.deleteLicenseInfo()
|
|
||||||
ctx.status = 200
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getQuotaUsage = async (ctx: any) => {
|
export const getQuotaUsage = async (ctx: any) => {
|
||||||
ctx.body = await quotas.getQuotaUsage()
|
ctx.body = await quotas.getQuotaUsage()
|
||||||
|
|
|
@ -1,13 +1,28 @@
|
||||||
import Router from "@koa/router"
|
import Router from "@koa/router"
|
||||||
import * as controller from "../../controllers/global/license"
|
import * as controller from "../../controllers/global/license"
|
||||||
|
import { middleware } from "@budibase/backend-core"
|
||||||
|
import Joi from "joi"
|
||||||
|
|
||||||
|
const activateLicenseKeyValidator = middleware.joiValidator.body(Joi.object({
|
||||||
|
licenseKey: Joi.string().required(),
|
||||||
|
}).required())
|
||||||
|
|
||||||
|
const activateOfflineLicenseValidator = middleware.joiValidator.body(Joi.object({
|
||||||
|
offlineLicense: Joi.string().required(),
|
||||||
|
}).required())
|
||||||
|
|
||||||
const router: Router = new Router()
|
const router: Router = new Router()
|
||||||
|
|
||||||
router
|
router
|
||||||
.post("/api/global/license/activate", controller.activate)
|
|
||||||
.post("/api/global/license/refresh", controller.refresh)
|
.post("/api/global/license/refresh", controller.refresh)
|
||||||
.get("/api/global/license/info", controller.getInfo)
|
|
||||||
.delete("/api/global/license/info", controller.deleteInfo)
|
|
||||||
.get("/api/global/license/usage", controller.getQuotaUsage)
|
.get("/api/global/license/usage", controller.getQuotaUsage)
|
||||||
|
// LICENSE KEY
|
||||||
|
.post("/api/global/license/key", activateLicenseKeyValidator, controller.activateLicenseKey)
|
||||||
|
.get("/api/global/license/key", controller.getLicenseKey)
|
||||||
|
.delete("/api/global/license/key", controller.deleteLicenseKey)
|
||||||
|
// OFFLINE LICENSE
|
||||||
|
.post("/api/global/license/offline", activateOfflineLicenseValidator, controller.activateOfflineLicense)
|
||||||
|
.get("/api/global/license/offline", controller.getOfflineLicense)
|
||||||
|
.delete("/api/global/license/offline", controller.deleteOfflineLicense)
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
|
|
Loading…
Reference in New Issue