mirror of
https://github.com/standardnotes/server
synced 2026-01-16 20:04:32 -05:00
feat: home-server package initial setup with Api Gateway and Auth services (#605)
* fix(api-gateway): reduce exports * wip controllers * fix: imports of controllers * fix(api-gateway): rename http service interface to proxy interface * wip: self-registering services and controllers * wip: add registering controller method bindings and services in container * feat: merge two services together * wip: resolving endpoints to direct code calls * wip: bind controller container to a singleton * fix: controller binding to instantiate and self-register on controller container * fix: move signout endpoint to auth controller * wip: define inversify controllers in the controller container * fix(auth): bind inversify controllers to controller container * fix(auth): linter issues * fix(auth): specs * fix(auth): inversify controllers bindings * wip: endpoint resolving * wip: add endpoint for more auth controllers * wip: add sessions controller endpoint resolvings * wip: add subscription invites endpoint resolvings * wip: add subscription tokens endpoint resolvings * wip: add all binding for auth server controllers * wip: fix migrations path * fix: configure default env vars and ci setup
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import { EndpointResolverInterface } from './EndpointResolverInterface'
|
||||
|
||||
export class EndpointResolver implements EndpointResolverInterface {
|
||||
constructor(private isConfiguredForHomeServer: boolean) {}
|
||||
|
||||
private readonly endpointToIdentifierMap: Map<string, string> = new Map([
|
||||
// Actions Controller
|
||||
['[POST]:auth/sign_in', 'auth.signIn'],
|
||||
['[GET]:auth/params', 'auth.params'],
|
||||
['[POST]:auth/sign_out', 'auth.signOut'],
|
||||
['[POST]:auth/recovery/codes', 'auth.generateRecoveryCodes'],
|
||||
['[POST]:auth/recovery/login', 'auth.signInWithRecoveryCodes'],
|
||||
['[POST]:auth/recovery/params', 'auth.recoveryKeyParams'],
|
||||
// Authenticators Controller
|
||||
['[DELETE]:authenticators/:authenticatorId', 'auth.authenticators.delete'],
|
||||
['[GET]:authenticators/', 'auth.authenticators.list'],
|
||||
['[GET]:authenticators/generate-registration-options', 'auth.authenticators.generateRegistrationOptions'],
|
||||
['[POST]:authenticators/generate-authentication-options', 'auth.authenticators.generateAuthenticationOptions'],
|
||||
['[POST]:authenticators/verify-registration', 'auth.authenticators.verifyRegistrationResponse'],
|
||||
// Files Controller
|
||||
['[POST]:valet-tokens', 'auth.valet-tokens.create'],
|
||||
// Offline Controller
|
||||
['[GET]:offline/features', 'auth.offline.features'],
|
||||
['[POST]:offline/subscription-tokens', 'auth.offline.subscriptionTokens.create'],
|
||||
// Sessions Controller
|
||||
['[GET]:sessions', 'auth.sessions.list'],
|
||||
['[DELETE]:session', 'auth.sessions.delete'],
|
||||
['[DELETE]:session/all', 'auth.sessions.deleteAll'],
|
||||
['[POST]:session/refresh', 'auth.sessions.refresh'],
|
||||
// Subscription Invites Controller
|
||||
['[POST]:subscription-invites', 'auth.subscriptionInvites.create'],
|
||||
['[GET]:subscription-invites', 'auth.subscriptionInvites.list'],
|
||||
['[DELETE]:subscription-invites/:inviteUuid', 'auth.subscriptionInvites.delete'],
|
||||
['[POST]:subscription-invites/:inviteUuid/accept', 'auth.subscriptionInvites.accept'],
|
||||
// Tokens Controller
|
||||
['[POST]:subscription-tokens', 'auth.subscription-tokens.create'],
|
||||
// Users Controller
|
||||
['[PATCH]:users/:userId', 'auth.users.update'],
|
||||
['[PUT]:users/:userUuid/attributes/credentials', 'auth.users.updateCredentials'],
|
||||
['[PUT]:auth/params', 'auth.users.getKeyParams'],
|
||||
['[POST]:listed', 'auth.users.createListedAccount'],
|
||||
['[POST]:auth', 'auth.users.register'],
|
||||
['[GET]:users/:userUuid/settings', 'auth.users.getSettings'],
|
||||
['[PUT]:users/:userUuid/settings', 'auth.users.updateSetting'],
|
||||
['[GET]:users/:userUuid/settings/:settingName', 'auth.users.getSetting'],
|
||||
['[DELETE]:users/:userUuid/settings/:settingName', 'auth.users.deleteSetting'],
|
||||
['[GET]:users/:userUuid/subscription-settings/:subscriptionSettingName', 'auth.users.getSubscriptionSetting'],
|
||||
['[GET]:users/:userUuid/features', 'auth.users.getFeatures'],
|
||||
['[GET]:users/:userUuid/subscription', 'auth.users.getSubscription'],
|
||||
['[GET]:offline/users/subscription', 'auth.users.getOfflineSubscriptionByToken'],
|
||||
['[POST]:users/:userUuid/requests', 'auth.users.createRequest'],
|
||||
])
|
||||
|
||||
resolveEndpointOrMethodIdentifier(method: string, endpoint: string, ...params: string[]): string {
|
||||
if (!this.isConfiguredForHomeServer) {
|
||||
if (params.length > 0) {
|
||||
return params.reduce((acc, param) => acc.replace(/:[a-zA-Z0-9]+/, param), endpoint)
|
||||
}
|
||||
|
||||
return endpoint
|
||||
}
|
||||
const identifier = this.endpointToIdentifierMap.get(`[${method}]:${endpoint}`)
|
||||
|
||||
if (!identifier) {
|
||||
throw new Error(`Endpoint ${endpoint} not found`)
|
||||
}
|
||||
|
||||
return identifier
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user