38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { defineHook } from '@directus/extensions-sdk';
|
|
import { getAccountabilityForToken } from './external-jwt/get-accountability-for-token';
|
|
import type { Request } from 'express';
|
|
import jwt from 'jsonwebtoken';
|
|
import { HookConfig } from '@directus/types';
|
|
|
|
|
|
|
|
export default defineHook<HookConfig>(({ filter }) => {
|
|
|
|
// get all configuration
|
|
|
|
filter('authenticate', (defaultAccountability, event, context) => {
|
|
const req = <Request>event['req'];
|
|
if(!req.token) return defaultAccountability;
|
|
|
|
if(!context.database) {
|
|
return defaultAccountability
|
|
}
|
|
|
|
const decodedToken = jwt.decode(req.token);
|
|
if(typeof decodedToken === 'string') return defaultAccountability; // if token is not a jwt, let directus handle it
|
|
if(decodedToken?.iss == 'directus') return defaultAccountability; // if token issued by directus, let directus handle it
|
|
|
|
|
|
|
|
|
|
return getAccountabilityForToken(req.token, decodedToken?.iss, context.accountability, context.database)
|
|
});
|
|
|
|
/*filter('auth.jwt', (status, user, provider) => {
|
|
|
|
})*/
|
|
|
|
});
|
|
|
|
|