70 lines
1.6 KiB
TypeScript
70 lines
1.6 KiB
TypeScript
import { context, HTTPError, utils } from "@budibase/backend-core"
|
|
import {
|
|
Database,
|
|
DocumentType,
|
|
OAuth2Config,
|
|
OAuth2Configs,
|
|
SEPARATOR,
|
|
VirtualDocumentType,
|
|
} from "@budibase/types"
|
|
|
|
async function getDocument(db: Database = context.getAppDB()) {
|
|
const result = await db.tryGet<OAuth2Configs>(DocumentType.OAUTH2_CONFIG)
|
|
return result
|
|
}
|
|
|
|
export async function fetch(): Promise<OAuth2Config[]> {
|
|
const result = await getDocument()
|
|
if (!result) {
|
|
return []
|
|
}
|
|
return Object.values(result.configs)
|
|
}
|
|
|
|
export async function create(
|
|
config: Omit<OAuth2Config, "id">
|
|
): Promise<OAuth2Config> {
|
|
const db = context.getAppDB()
|
|
const doc: OAuth2Configs = (await getDocument(db)) ?? {
|
|
_id: DocumentType.OAUTH2_CONFIG,
|
|
configs: {},
|
|
}
|
|
|
|
if (Object.values(doc.configs).find(c => c.name === config.name)) {
|
|
throw new HTTPError("Name already used", 400)
|
|
}
|
|
|
|
const id = `${VirtualDocumentType.OAUTH2_CONFIG}${SEPARATOR}${utils.newid()}`
|
|
doc.configs[id] = {
|
|
id,
|
|
...config,
|
|
}
|
|
|
|
await db.put(doc)
|
|
return doc.configs[id]
|
|
}
|
|
|
|
export async function get(id: string): Promise<OAuth2Config | undefined> {
|
|
const doc = await getDocument()
|
|
return doc?.configs?.[id]
|
|
}
|
|
|
|
export async function update(config: OAuth2Config): Promise<OAuth2Config> {
|
|
const db = context.getAppDB()
|
|
const doc: OAuth2Configs = (await getDocument(db)) ?? {
|
|
_id: DocumentType.OAUTH2_CONFIG,
|
|
configs: {},
|
|
}
|
|
|
|
if (!doc.configs[config.id]) {
|
|
throw new HTTPError(`OAuth2 config with id '${config.id}' not found`, 400)
|
|
}
|
|
|
|
doc.configs[config.id] = {
|
|
...config,
|
|
}
|
|
|
|
await db.put(doc)
|
|
return doc.configs[config.id]
|
|
}
|