first commit

This commit is contained in:
Sergo
2023-07-29 21:10:00 +03:00
commit 27efd26d6c
49 changed files with 5490 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
import type { Params, ServiceInterface } from '@feathersjs/feathers'
import type { Application } from '../../../declarations'
import { Issuer } from 'openid-client'
import config from 'config'
type AuthOidcCallback = string
type AuthOidcCallbackData = any
type AuthOidcCallbackPatch = any
type AuthOidcCallbackQuery = any
export type { AuthOidcCallback, AuthOidcCallbackData, AuthOidcCallbackPatch, AuthOidcCallbackQuery }
export interface AuthOidcCallbackServiceOptions {
app: Application
}
export interface AuthOidcCallbackParams extends Params<AuthOidcCallbackQuery> {
session?: any
query: {
iss: string,
code: string,
}
}
export class AuthOidcCallbackService<ServiceParams extends AuthOidcCallbackParams = AuthOidcCallbackParams>
implements ServiceInterface<AuthOidcCallback, AuthOidcCallbackData, ServiceParams, AuthOidcCallbackPatch>
{
constructor(public options: AuthOidcCallbackServiceOptions) { }
async find(params: ServiceParams): Promise<AuthOidcCallback> {
const issuer = await Issuer.discover(config.get('oidc.gatewayUri'));
const client = new issuer.Client({
client_id: config.get('oidc.clientId'),
client_secret: config.get('oidc.clientSecret'),
redirect_uris: [config.get('oidc.redirectUris')],
response_types: ['code'],
})
const codeVerifier = params.session.codeVerifier;
const tokenSet = await client.callback(config.get('clientUrl') + '/auth-oidc/callback', { code: params.query.code, iss: params.query.iss }, { code_verifier: codeVerifier });
const userinfo = await client.userinfo(tokenSet.access_token as string);
params.session.user = userinfo;
return '/'
}
}
export const getOptions = (app: Application) => {
return { app }
}

View File

@@ -0,0 +1,42 @@
import { http } from '@feathersjs/transport-commons'
import type { Application } from '../../../declarations'
import { AuthOidcCallbackService, getOptions } from './auth-oidc-callback.class'
export const authOidcCallbackPath = 'auth-oidc/callback'
export const authOidcCallbackMethods = ['find'] as const
export * from './auth-oidc-callback.class'
export const authOidcCallback = (app: Application) => {
// TODO: fix this to use the correct type
// @ts-ignore
app.use(authOidcCallbackPath, new AuthOidcCallbackService(getOptions(app)), {
methods: authOidcCallbackMethods,
events: []
}, (req: any, res: any) => {
return res.redirect(res.data);
})
app.service(authOidcCallbackPath).hooks({
around: {
all: []
},
before: {
all: [],
find: [],
},
after: {
all: []
},
error: {
all: []
}
})
}
declare module '../../../declarations' {
interface ServiceTypes {
[authOidcCallbackPath]: AuthOidcCallbackService
}
}