feathers-ucan 0.1.21 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/env/version.d.ts +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.cjs.map +1 -1
- package/lib/index.modern.js +1 -1
- package/lib/index.modern.js.map +1 -1
- package/lib/index.umd.js +1 -1
- package/lib/index.umd.js.map +1 -1
- package/package.json +1 -1
package/lib/env/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.22";
|
package/lib/index.cjs
CHANGED
|
@@ -885,7 +885,7 @@ const ucanAuth = (requiredCapabilities, options) => {
|
|
|
885
885
|
const core_path = configuration.core_path || 'core';
|
|
886
886
|
const entity = configuration.entity || 'login';
|
|
887
887
|
const existingLogin = symbolUcan._get(context.params, [core_path, entity]) || symbolUcan._get(context.params, 'login') || symbolUcan._get(context.params.connection, entity);
|
|
888
|
-
if (existingLogin) context.params[entity] = existingLogin;
|
|
888
|
+
if (existingLogin != null && existingLogin._id) context.params[entity] = existingLogin;
|
|
889
889
|
const loginId = typeof existingLogin === 'string' ? existingLogin : existingLogin == null ? void 0 : existingLogin._id;
|
|
890
890
|
const hasLogin = !!(existingLogin && (typeof existingLogin === 'string' || !!loginId));
|
|
891
891
|
const existingUcan = symbolUcan._get(context.params, configuration.client_ucan || 'client_ucan');
|
package/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/auth-service/ucan-strategy.ts","../src/auth-service/index.ts","../src/core/methods.ts","../src/utils/check-exists.ts","../src/hooks/ucan-auth.ts","../src/hooks/update-ucan.ts"],"sourcesContent":["import {IncomingMessage} from 'http';\nimport {\n AuthenticationBase,\n AuthenticationBaseStrategy,\n AuthenticationRequest,\n AuthenticationResult,\n ConnectionEvent\n} from '@feathersjs/authentication';\n// @ts-ignore\nimport lt from 'long-timeout';\nimport {_get, _unset, ucanToken, validateUcan} from 'symbol-ucan';\n\nexport class NotAuthError extends Error {\n constructor(message?: string) {\n super(message)\n }\n}\nconst SPLIT_HEADER = /(\\S+)\\s+(\\S+)/;\n\ntype AnyObj = { [key: string]: any };\n\nexport class UcanStrategy extends AuthenticationBaseStrategy {\n expirationTimers = new WeakMap();\n\n setAuthentication(auth: AuthenticationBase) {\n // console.log('set authentication', auth);\n auth.verifyAccessToken = (accessToken: string) => {\n return {} as any;\n };\n super.setAuthentication(auth);\n }\n\n get configuration() {\n const authConfig = this.authentication?.configuration || {\n service: undefined,\n entity: undefined,\n entityId: undefined\n };\n const config = super.configuration;\n\n return {\n service: authConfig.service,\n entity: authConfig.entity,\n entityId: authConfig.entityId,\n header: 'Authorization',\n schemes: ['Bearer', 'JWT'],\n ...config\n };\n }\n\n async handleConnection(event: ConnectionEvent, connection: any, authResult?: AuthenticationResult) {\n const isValidLogout = event === 'logout' && connection.authentication && authResult &&\n connection.authentication.accessToken === authResult.accessToken;\n\n const {accessToken, entity} = authResult || {};\n\n if (accessToken && event === 'login') {\n const validUcan = await validateUcan(accessToken)\n .catch(err => {\n console.log('Could not validate ucan in connection: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n throw new Error(errObj.message);\n });\n const {payload: {exp}} = validUcan || {payload: {exp: 0}}\n // The time (in ms) until the token expires\n const duration = (exp * 1000) - Date.now();\n // This may have to be a `logout` event but right now we don't want\n // the whole context object lingering around until the timer is gone\n const timer = lt.setTimeout(() => (this.app as any).emit('disconnect', connection), duration);\n\n lt.clearTimeout(this.expirationTimers.get(connection));\n this.expirationTimers.set(connection, timer);\n\n connection.authentication = {\n strategy: this.name,\n accessToken\n };\n } else if (event === 'disconnect' || isValidLogout) {\n const {entity} = this.configuration;\n\n delete connection[entity];\n delete connection.authentication;\n\n lt.clearTimeout(this.expirationTimers.get(connection));\n this.expirationTimers.delete(connection);\n }\n }\n\n verifyConfiguration() {\n const allowedKeys = ['entity', 'entityId', 'service', 'header', 'schemes', 'audience'];\n\n for (const key of Object.keys(this.configuration)) {\n if (!allowedKeys.includes(key)) {\n throw new Error(`Invalid ucanStrategy option 'authentication.${this.name}.${key}'. Did you mean to set it in 'authentication.jwtOptions'?`);\n }\n }\n\n if (typeof this.configuration.header !== 'string') {\n throw new Error(`The 'header' option for the ${this.name} strategy must be a string`);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n async getEntityQuery(_params: any) {\n return {};\n }\n\n /**\n * Return the entity for a given id\n * @param id The id to use\n * @param params Service call parameters\n */\n async getEntity(id: string, params: any) {\n const entityService = this.entityService;\n const {entity} = this.configuration;\n\n if (entityService === null) {\n throw new NotAuthError('Could not find entity service');\n }\n\n const query = await this.getEntityQuery(params);\n const getParams = Object.assign({}, _unset(params, 'provider'), {query});\n const result = await entityService.get(id, getParams);\n\n if (!params.provider) {\n return result;\n }\n\n return entityService.get(id, {...params, [entity]: result});\n }\n\n async getEntityId(authResult: AuthenticationResult, _params: AnyObj) {\n let {query, loginId} = _params;\n if (loginId) return loginId;\n else {\n const {service, core_path = 'core'} = this.configuration;\n const pms = {\n query: {...query, $limit: 1},\n [core_path]: {skipJoins: true, ..._params[core_path]}\n }\n const entities = await this.app?.service(service).find({...pms, skipJoins: true, skip_hooks: true, admin_pass: true} as any);\n if (entities.total) return entities.data[0]._id;\n else throw new NotAuthError('Could not find login associated with this ucan');\n }\n }\n\n async authenticate(authentication: AuthenticationRequest, params: AnyObj) {\n let {accessToken, loginId, ucan} = authentication;\n const {entity, core_path} = this.configuration;\n if (!accessToken) {\n\n if (ucan) accessToken = ucanToken(ucan);\n else throw new NotAuthError('Error generating ucan');\n // } else throw new NotAuthenticated('No access token');\n }\n //\n // await verifyUcan(accessToken, {audience: ucan_audience || params.ucan_aud, requiredCapabilities})\n // .catch(err => {\n // console.error('error verifying ucan', err);\n // throw new NotAuthenticated('Could not verify ucan: ' + err.message);\n // });\n\n const decodedUcan = await validateUcan(accessToken)\n .catch(err => {\n console.log('Could not validate ucan during authentication: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n throw new Error(errObj.message);\n });\n\n const result = {\n accessToken,\n authentication: {\n strategy: 'jwt',\n accessToken\n }\n };\n\n if (entity === null) {\n return result;\n }\n\n let value;\n const coreEntity = _get(params, [core_path, entity]);\n if (!coreEntity) {\n const entityId = await this.getEntityId(result, {\n ...params,\n loginId,\n query: {did: decodedUcan?.payload.aud}\n });\n value = await this.getEntity(entityId, params);\n } else value = coreEntity;\n return {\n ...result,\n [entity]: value\n };\n\n }\n\n async parse(req: IncomingMessage) {\n const {header, schemes} = this.configuration;\n const headerValue = req.headers && req.headers[header.toLowerCase()];\n\n if (!headerValue || typeof headerValue !== 'string') {\n return null;\n }\n\n const [, scheme, schemeValue] = headerValue.match(SPLIT_HEADER) || [];\n const hasScheme = scheme && schemes.some(\n (current: any) => new RegExp(current, 'i').test(scheme)\n );\n\n if (scheme && !hasScheme) {\n return null;\n }\n\n return {\n strategy: this.name,\n accessToken: hasScheme ? schemeValue : headerValue\n };\n }\n}\n\n\n","import {_get, buildUcan, encodeKeyPair, parseUcan, ucanToken, validateUcan} from 'symbol-ucan';\nimport {AuthenticationParams, AuthenticationRequest, AuthenticationService} from '@feathersjs/authentication';\nimport {NullableId} from '../core';\n\ntype AnyObj = any\n\nexport class NotAuthError extends Error {\n constructor(message?: string) {\n super(message)\n }\n}\nexport type AuthServiceOptions = {\n NotAuthenticated?: any\n}\nexport * from './ucan-strategy';\n\nexport class AuthService extends AuthenticationService {\n options: AuthServiceOptions\n constructor(app: any, configKey = 'authentication', opts:AnyObj&AuthServiceOptions = {}) {\n const { NotAuthenticated, ...rest } = opts\n super(app, configKey, rest)\n this.app = app;\n this.options = { NotAuthenticated }\n };\n\n async create(data: AuthenticationRequest, params?: AuthenticationParams) {\n const NotAuth = this.options?.NotAuthenticated || NotAuthError;\n\n const {entity, service, ucan_path = 'ucan'} = this.app.get('authentication');\n\n const authStrategies = params?.authStrategies || this.configuration.authStrategies\n\n if (!params) params = {}\n\n if (!authStrategies.length) {\n throw new NotAuth('No authentication strategies allowed for creating a JWT (`authStrategies`)')\n }\n\n const authResult = await this.authenticate(data, params, ...authStrategies)\n .catch((err: any) => {\n throw new Error(err.message)\n })\n\n if (authResult.accessToken) {\n return authResult\n }\n const did = data.did || _get(authResult, [entity, 'did']);\n let ucan = data.ucan || _get(authResult, [entity, 'ucan']);\n\n if (!did) throw new Error('No did audience provided');\n if (!ucan) throw new Error('No ucan provided to authentication call');\n // const {secret} = this.configuration;\n\n const validatedUcan = await validateUcan(ucan)\n .catch(err => {\n console.log('Could not validate ucan creating authentication: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n console.warn('Could not validate ucan creating authentication', ucan, errObj.message);\n return null;\n });\n if (!validatedUcan) {\n const parsed = parseUcan(ucan);\n let {secret} = this.app.get('authentication');\n\n const issuer = encodeKeyPair({secretKey: secret});\n ucan = await buildUcan({\n audience: parsed.payload.aud,\n issuer,\n lifetimeInSeconds: 60 * 60 * 24 * 60,\n capabilities: parsed.payload.att\n })\n params.admin_pass = true;\n await this.app.service(service).patch(_get(authResult, [entity, '_id']) as NullableId, {[ucan_path]: ucanToken(ucan)}, {...params})\n }\n\n\n const accessToken = ucanToken(ucan);\n\n return {\n accessToken,\n ...authResult,\n authentication: {\n ...authResult.authentication,\n payload: accessToken\n }\n }\n }\n}\n\n","type AnyObj = any\n\nexport type Id = number | string\nexport type NullableId = Id | null\n\nexport type CallFindResult<T = AnyObj> = {\n total:number,\n limit: number,\n skip:number,\n data: Array<T>\n}\nexport type AnyParams = Iterable<AnyObj>\n\ndeclare type CoreOpts = {\n skipJoins?: boolean,\n admin_pass?: boolean\n}\nexport class CoreCall {\n context:any;\n service:string;\n core:AnyObj;\n entity:string;\n constructor(service:string, context:any, coreOptions?:CoreOpts){\n this.service = service\n this.context = context\n const entity = (context.app.get('authentication') || { entity: 'login' }).entity || 'login';\n this.entity = entity;\n const core = context.params?.core || {};\n if(!core[entity]) core[entity] = context.params[entity];\n this.core = { ...core, ...coreOptions }\n }\n\n async get(id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).get(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async find (params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).find({...params as AnyParams, [this.entity]: params[this.entity], skip_hooks:true, admin_pass:true, ...{ [core_path]: this.core }})\n }\n async create (data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).create(data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async patch (id:NullableId, data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).patch(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async update (id:NullableId, data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).update(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async remove (id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).remove(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n\n async _get(id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._get(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _find (params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._find({...params as AnyParams, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _create (data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._create(data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _patch (id:NullableId, data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._patch(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _update (id:NullableId, data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._update(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _remove (id:NullableId, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._remove(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n\n}\n\n","import {_get, _set} from 'symbol-ucan';\nimport {HookContext} from '../types';\nimport {CoreCall} from '../core';\n\ntype AnyObj = any\n\nexport const existsPath = '_exists';\n\nexport const getExists = (context:Partial<HookContext>):any => {\n const path = context.app.get('existsPath') || existsPath;\n return _get(context.params, `core.${path}.${context.path}.${context.id}`) || undefined;\n}\n\nexport const loadExists = async (context:HookContext, options?:{ skipJoins?: boolean, params?: AnyObj }):Promise<any> => {\n let ex = getExists(context);\n if(!ex && context.id) {\n ex = await new CoreCall(context.path, context, { skipJoins: options?.skipJoins !== false }).get(context.id, { exists_check: true, admin_pass: true, skip_hooks: true, ...options?.params || {} })\n }\n return ex;\n}\n\nexport const setExists = (context:HookContext, val:any):HookContext => {\n const path = context.app.get('existsPath') || existsPath;\n context.params = _set(context.params, `core.${path}.${context.path}.${val?._id || context.id}`, val)\n return context;\n};\n","import {HookContext} from '../types';\nimport {authenticate} from '@feathersjs/authentication';\nimport {\n _get,\n _set,\n Capability,\n encodeKeyPair,\n genCapability,\n parseUcan,\n ucanToken,\n VerifyOptions,\n verifyUcan\n} from 'symbol-ucan';\nimport {loadExists, setExists} from '../utils';\nimport {CoreCall} from '../core';\n\ntype AnyObj = any\n\nconst SUPERUSER = '*'\n\nexport type UcanAuthConfig = {\n entity: string,\n service: string,\n client_ucan: string,\n ucan_aud: string,\n ucan_path: string,\n core_path: string,\n defaultHierPart: string,\n defaultScheme: string\n}\n\ntype AuthConfig = {\n [key: string]: string\n}\n\ntype AnyAuth = '*'\nexport const anyAuth: AnyAuth = '*' as AnyAuth;\ntype NoThrow = '$'\nexport const noThrow: NoThrow = '$' as NoThrow;\n\n\nexport type CapabilityParts = Partial<Capability> | [string, Array<string> | string];\n\nexport declare type LoginPassOption = [Array<string>, Array<string> | '*']\nexport declare type UcanAuthOptions = {\n creatorPass?: '*' | Array<string>,\n loginPass?: Array<LoginPassOption>,\n or?: '*' | Array<string>\n adminPass?: Array<string>,\n noThrow?: boolean,\n log?: boolean,\n existingParams?: AnyObj,\n specialChange?: Array<string> | AnyAuth,\n cap_subjects?: Array<string>,\n audience?: string\n}\ntype RequiredCapability = { capability: Capability, rootIssuer: string }\nexport type UcanCap = Array<CapabilityParts> | AnyAuth | NoThrow;\nexport type UcanAllArgs = {\n all?: UcanCap,\n get?: UcanCap,\n find?: UcanCap,\n create?: UcanCap,\n patch?: UcanCap,\n update?: UcanCap,\n remove?: UcanCap\n};\n\ntype VerifyOne = { ucan: string } & VerifyOptions;\n\ntype Auth = <S>(method: string) => (context: HookContext<S>) => Promise<HookContext<S>>\ntype Config = { entity: string, service: string, defaultScheme: string, defaultHierPart: string };\ntype VerifyRes = { ok: boolean, value?: Array<any>, err?: Array<any> };\n\nexport const noThrowAuth = async <S>(context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n const entity = _get(context, ['auth', config.entity]);\n if (entity) {\n context = _set(context, [config.core_path, config.entity], entity)\n }\n try {\n context = await authenticate('jwt')(context as any)\n .catch(() => {\n return context;\n })\n } catch (e) {\n return context;\n }\n return context;\n}\n\nexport const bareAuth = async <S>(context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n const entity = _get(context, ['auth', config.entity]);\n if (entity) context = _set(context, [config.core_path, config.entity], entity)\n return authenticate('jwt')(context as any);\n}\n\nconst verifyOne = async (ucan: string, options: VerifyOptions, log?: boolean) => {\n try {\n let v = await verifyUcan(ucan, options);\n if (!v?.ok && options.requiredCapabilities) {\n const newCapabilities = options.requiredCapabilities.map(a => {\n if (a.capability.can !== SUPERUSER) a.capability.can.segments = ['*']\n return a\n })\n if (log) console.log('set new req capabilities', newCapabilities, parseUcan(ucan))\n v = await verifyUcan(ucan, {\n ...options, requiredCapabilities: newCapabilities\n })\n if (log) console.log('Second verification result:', v);\n }\n return v;\n } catch (e: any) {\n return {ok: false, err: [e.message]}\n }\n};\nexport const orVerifyLoop = async (arr: Array<VerifyOne>, log?: boolean): Promise<VerifyRes> => {\n let v: any = {ok: false, value: []};\n\n try {\n for (const i in arr) {\n if (log) console.log('or verify loop', arr[i], parseUcan(arr[i].ucan));\n if (!v?.ok) {\n const {ucan, ...options} = arr[i];\n v = await verifyOne(ucan, options, log)\n if (log) console.log('got in verify loop', v);\n } else break;\n }\n return v;\n } catch (e: any) {\n return {ok: false, err: [e.message]}\n }\n}\n\nexport type VerifyConfig = {\n client_ucan: string,\n ucan_aud: string,\n [key: string]: any\n};\n\ntype MethodOpts = { aud?: string }\nexport const verifyAgainstReqs = <S>(reqs: Array<RequiredCapability>, config: VerifyConfig, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<VerifyRes> => {\n const log = options?.log\n const ucan = _get(context.params, config.client_ucan) as string;\n const audience = options?.audience || _get(context.params, config.ucan_aud) as string;\n if (log) console.log('verify against reqs', reqs)\n let vMethod: (uc?: string, methodOpts?: MethodOpts) => Promise<VerifyRes>\n const or = options?.or || []\n if (ucan && (or === '*' || or.includes(context.method))) vMethod = (uc?: string, methodOpts?: MethodOpts) => orVerifyLoop((reqs || []).map(a => {\n return {\n ucan: uc || ucan,\n audience: methodOpts?.aud || audience,\n requiredCapabilities: [a]\n }\n }), log)\n else vMethod = (uc?: string, methodOpts?: MethodOpts) => verifyOne(uc || ucan, {\n audience: methodOpts?.aud || audience,\n requiredCapabilities: reqs\n }, log) as Promise<VerifyRes>\n let v = await vMethod()\n if (log) console.log('first verify try', v);\n if (v?.ok) return v;\n const cs = (options?.cap_subjects || []).filter(a => !!a)\n if (log) console.log('check cap_subjects', cs);\n if (cs) {\n const configuration = config?.loginConfig || context.app.get('authentication') as AnyObj;\n const loginCheckId = String(_get(context.params, `${configuration.entity}._id` || '')) as any;\n const caps = await new CoreCall(configuration.capability_service || 'caps', context).find({\n query: {\n $limit: cs.length,\n subject: {$in: cs}\n },\n skip_hooks: true,\n admin_pass: true\n })\n .catch(err => console.log(`Error finding caps in ucan auth: ${err.message}`))\n if (log) console.log('caps', caps);\n if (caps?.data) {\n for (const cap of caps.data) {\n for (const k in cap.caps || {}) {\n if (log) console.log('check cap', k, cap.caps[k].logins, loginCheckId);\n if ((cap.caps[k].logins || []).map((a: any) => String(a)).includes(loginCheckId)) {\n try {\n const ucanString = ucanToken(cap.caps[k].ucan)\n if (log) console.log('got ucan string', ucanString);\n if (ucanString) {\n v = await vMethod(ucanString, {aud: cap.did})\n if (log) console.log('tried v on cap', v);\n }\n } catch (e: any) {\n console.log(`Error verifying ucan from cap: ${cap._id}. Err:${e.message}`)\n }\n if (options?.log) console.log('tried v on cap', v);\n if (v?.ok) return v;\n }\n }\n }\n }\n }\n return v;\n }\n}\n\nexport type CapabilityModelConfig = {\n defaultScheme: string,\n defaultHierPart: string,\n secret: string,\n [key: string]: any\n};\n\nexport const modelCapabilities = (reqs: Array<CapabilityParts>, config: CapabilityModelConfig): Array<RequiredCapability> => {\n\n const rootIssuer = encodeKeyPair({secretKey: config.secret}).did();\n if (!Array.isArray(reqs)) return []\n return reqs.map(a => {\n return {\n capability: Array.isArray(a) ? genCapability({\n with: {scheme: config.defaultScheme, hierPart: config.defaultHierPart},\n can: {namespace: a[0], segments: typeof a[1] === 'string' ? [a[1]] : a[1]}\n }, config) : genCapability(a, config),\n rootIssuer\n };\n }) as Array<RequiredCapability>\n};\n\nexport declare type PassConfig = {\n loginConfig?: VerifyConfig\n}\nexport const checkUcan = (requiredCapabilities: UcanCap, options?: UcanAuthOptions & PassConfig) => {\n return async (context: HookContext): Promise<HookContext> => {\n const configuration = options?.loginConfig || context.app.get('authentication') as AnyObj;\n\n let v: any = {ok: false, value: []};\n\n const reqs: Array<RequiredCapability> = modelCapabilities(requiredCapabilities as Array<CapabilityParts>, configuration as CapabilityModelConfig);\n\n if (reqs.length) {\n v = await verifyAgainstReqs(reqs, configuration as VerifyConfig, options)(context)\n\n /** if the anyAuth setting is used along with specialChange, a user could get through to this point despite not being authenticated, so this step does not allow a pass for anyAuth setting even though no requiredCapabilities are present - because it was intended to throw if not authenticated unless special change conditions are met */\n } else if (requiredCapabilities !== '*') v.ok = true;\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context\n } else {\n\n // if (!v?.ok) {\n // let hasSplitNamespace = false;\n // const reducedReqs: Array<RequiredCapability> = [];\n // reqs.forEach((req, i) => {\n // const splt = (_get<RequiredCapability, string>(req, 'capability.can.namespace') || '').split(':')\n // if (splt[1]) {\n // req = _set(req, 'capability.can.namespace', splt[0]);\n // hasSplitNamespace = true;\n // }\n // reducedReqs.push(req)\n // })\n // if (hasSplitNamespace) v = await verifyAgainstReqs(reqs, configuration as VerifyConfig, options)(context);\n // }\n\n\n if (options?.log) console.log('checking special change', options?.specialChange);\n if (options?.specialChange) {\n if (options.specialChange === anyAuth) {\n context.params.canU = true;\n return context;\n } else if (Array.isArray(options.specialChange)) {\n if (['create', 'patch', 'update'].includes(context.method)) {\n if (Array.isArray(context.data)) throw new Error('No multi data allowed with special change')\n for (const k in context.data || {}) {\n if (['$set', '$unset', '$addToSet', '$pull', '$push'].includes(k)) {\n for (const sk in context.data[k] || {}) {\n if (!options.specialChange.includes(sk)) {\n const spl = sk.split('.');\n if (spl.length === 1) delete context.data[k][sk];\n else if (!options.specialChange.includes(spl[0])) delete context.data[k][sk]\n }\n }\n } else if (!options.specialChange.includes(k)) delete context.data[k];\n }\n context.params.canU = true;\n return context;\n }\n }\n }\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context;\n } else {\n\n //If creator pass enabled, check to see if the auth login is the creator of the record\n const {loginPass} = options || {loginPass: [[['*'], ['nonExistentMethod']]]}\n if (loginPass?.length) {\n //object of scrubbed data object for pass that includes only limited access or full context.data object if no limits were present\n let scrubbedData: AnyObj = {};\n //scruData defaults to true - is only set to false\n let scrubData = true;\n const checkLoginPass = async (lpass: LoginPassOption) => {\n let methodsOnly = [];\n const allMethods = lpass[1] === '*';\n let methodIdx = -1;\n if (allMethods) methodIdx = 0;\n else {\n //separate out any field specific methods e.g. patch/name,avatar\n methodsOnly = (lpass[1] as string[]).map(a => a.split('/')[0]);\n methodIdx = methodsOnly.indexOf(context.method);\n }\n /**ensure loginPass is allowed for this method*/\n if (methodIdx > -1) {\n /**retrieve existing record to check ids for login id*/\n const existing = await loadExists(context, {params: options?.existingParams});\n let loginOk = false;\n\n /** function for comparing record login id with context login*/\n const checkLogin = (recordLoginPassId: string, loginIdPath: string = '_id') => {\n const loginCheckId = _get(context.params, `${configuration.entity}.${loginIdPath}`) as any;\n /**Make sure both are present to avoid pass on undefined*/\n if (loginCheckId && recordLoginPassId) {\n /** change login path result to array no matter what */\n const checkArr = Array.isArray(loginCheckId) ? loginCheckId.map(a => String(a)) : [String(loginCheckId)];\n if (Array.isArray(recordLoginPassId)) {\n /**loop through to see if there is a match present use for loops for performance instead of some*/\n for (let i = 0; i < checkArr.length; i++) {\n const checkId = String(checkArr[i])\n for (let rl = 0; rl < recordLoginPassId.length;) {\n const rlId = String(recordLoginPassId[rl]);\n if (rlId === checkId) loginOk = true;\n else rl++;\n }\n if (loginOk) return;\n }\n } else if (checkArr.includes(String(recordLoginPassId))) {\n return loginOk = true;\n }\n } else return\n }\n\n if (existing) {\n context = setExists(context, existing);\n /**perform the check*/\n let recordLoginPassId;\n for (const passPath of lpass[0] || []) {\n const spl = String(passPath).split('/');\n if (spl[0].includes('*')) {\n const spl2 = spl[0].split('*');\n const obj = _get(existing, spl2[0]);\n if (obj && typeof obj === 'object') {\n if (Array.isArray(obj)) {\n /** IF array, iterate through array and check the sub-path */\n for (const o of obj) {\n checkLogin(_get(o, spl2[1]) as string, spl[1] || '_id');\n if (loginOk) break;\n }\n } else {\n /** IF object, iterate through object and check the sub-path */\n for (const k in obj) {\n checkLogin(_get(obj, `${k}.${spl2[1]}`) as string, spl[1] || '_id')\n if (loginOk) break;\n }\n }\n }\n\n } else checkLogin(_get(existing, spl[0]) as string, spl[1] || '_id');\n\n }\n }\n\n if (loginOk) {\n v.ok = true\n /**loginPass is true - but check for granular field permissions such as patch/owner,color,status that imply limited permission*/\n //TODO: possibly a throw option here. If loginPass is ok, it will go forward, but could send an empty or modified patch object\n if (lpass[1] !== '*' && !['find', 'get', 'remove'].some(a => lpass[1].includes(a))) {\n const currentMethod = allMethods ? '*' : lpass[1][methodIdx];\n const splitMethod = currentMethod.split('/')[0];\n //check if current method contains a split '/' signaling limited permission check\n if (splitMethod !== currentMethod) {\n //get an array of the allowed fields\n const fields = currentMethod.split('/').slice(1).join('').split(',') || [];\n\n for (const field of fields) {\n const topLevel = _get(context.data, field);\n if (topLevel) scrubbedData = _set(scrubbedData, field, topLevel);\n else {\n for (const operator of ['$addToSet', '$pull']) {\n const operatorLevel = _get(context.data, `${operator}.${field}`);\n if (operatorLevel) scrubbedData = _set(scrubbedData, `${operator}.${field}`, operatorLevel);\n }\n }\n }\n } else scrubData = false;\n } else scrubData = false;\n }\n }\n }\n\n for await (const lpass of loginPass) {\n if (scrubData) await checkLoginPass(lpass);\n else break;\n }\n if (scrubData) context = _set(context, 'data', scrubbedData);\n }\n\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context;\n } else {\n\n if (options?.log) console.error('Ucan capabilities requirements not met: ', v, context.type, context.path);\n if (!options?.noThrow) throw new Error('Missing proper capabilities for this action: ' + context.type + ': ' + context.path + ' - ' + context.method);\n else {\n context.params._no_throw_error = {\n type: context.type,\n method: context.method,\n path: context.path\n }\n return context;\n }\n }\n }\n }\n }\n}\n\nexport const ucanAuth = <S>(requiredCapabilities?: UcanCap, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<HookContext<S>> => {\n const configuration = context.app.get('authentication') as AnyObj;\n const core_path = configuration.core_path || 'core';\n const entity = configuration.entity || 'login';\n\n const existingLogin:any = _get(context.params, [core_path, entity]) || _get(context.params, 'login') || _get(context.params.connection, entity);\n if(existingLogin) context.params[entity] = existingLogin;\n const loginId = typeof existingLogin === 'string' ? existingLogin : existingLogin?._id;\n const hasLogin = !!(existingLogin && (typeof existingLogin === 'string' || !!loginId));\n const existingUcan = _get(context.params, configuration.client_ucan || 'client_ucan');\n if (options?.log) console.log('ucan auth', 'hasLogin', hasLogin, 'loginId', loginId, 'existingUcan', !!existingUcan, 'core_path', core_path, 'entity', entity, 'core', context.params[core_path], 'params login', context.params.login, 'required capabilities', requiredCapabilities);\n //Below for passing through auth with no required capabilities\n if (requiredCapabilities === noThrow || (requiredCapabilities && requiredCapabilities[context.method] === noThrow)) return hasLogin ? context : await noThrowAuth(context);\n const adminPass = (options?.adminPass || []).includes(context.method) && (_get(context.params, 'admin_pass') || _get(context.params, [configuration.core_path, 'admin_pass'])) as any\n // If no login is present and no client UCAN is provided, perform authentication. Otherwise, reuse existing state/ucan.\n if (!hasLogin && !existingUcan) context = (adminPass || options?.specialChange) ? await noThrowAuth(context) : await bareAuth(context);\n if (requiredCapabilities === anyAuth && !options?.specialChange) {\n context.params.authenticated = !!context.params[entity];\n return context;\n }\n if (adminPass) return context;\n if (!requiredCapabilities) return context;\n return await checkUcan(requiredCapabilities, options)(context)\n }\n}\n\nexport const allUcanAuth = <S>(methods: UcanAllArgs, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n // if a login is already present in params[core_path][entity], don't overwrite it\n const corePath = (config as any).core_path || 'core';\n const entityKey = (config as any).entity || 'login';\n const existingLogin = _get(context.params, [corePath, entityKey]);\n if (!existingLogin) {\n const entity = _get(context, ['auth', entityKey]);\n if (entity) context = _set(context, [corePath, entityKey], entity)\n }\n if (context.type === 'before') {\n const {method} = context as { method: keyof UcanAllArgs } & HookContext<S>;\n if (methods[method as keyof UcanAllArgs] || methods['all']) {\n return await ucanAuth(methods[method] || methods['all'], options)(context) as any;\n } else return context;\n } else return context;\n }\n}\n","import {\n buildUcan,\n encodeKeyPair,\n parseUcan,\n ucanToken,\n validateUcan,\n stackAbilities,\n verifyUcan,\n reduceAbilities,\n _get\n} from 'symbol-ucan';\nimport { CoreCall } from '../core'\n\n\nexport const updateUcan = () => {\n return async (context:any) => {\n\n const { add = [], remove = [] } = context.data;\n //ensure capabilities were passed\n if(!add?.length && !remove?.length) throw new Error('No new capabilities passed');\n\n //check ability to edit the affected capabilities\n const {secret, ucan_aud, entity, ucan} = context.app.get('authentication');\n const rootIssuer = encodeKeyPair({secretKey: secret}).did();\n\n const checkAbilities = stackAbilities([...add, ...remove]);\n\n const canEdit = await verifyUcan(_get(context.params, [entity, ucan]) as string, {\n audience: _get(context.params, ucan_aud) as string,\n requiredCapabilities: checkAbilities.map(a => {\n return {\n //TODO: possibly READ shouldn't have the ability to allow others to READ\n capability: a,\n rootIssuer\n }\n })\n })\n\n if(!canEdit?.ok) throw new Error('You don\\'t have sufficient capabilities to grant those capabilities')\n\n //prep edited ucan\n const subjectId = context.id;\n const service = context.data.service || 'logins';\n const path = context.data.path || 'ucan';\n const subject = await new CoreCall(service, context, { skipJoins: true }).get(subjectId);\n\n const decoded = parseUcan(_get(subject, path) as string);\n const {aud, att, fct, nbf, prf} = decoded.payload;\n\n let capabilities = [...att];\n if(remove?.length) capabilities = reduceAbilities(remove, att);\n if(add?.length) capabilities = stackAbilities([...att, ...add]);\n\n\n const raw = await buildUcan({\n issuer: encodeKeyPair({secretKey: secret}),\n audience: aud,\n lifetimeInSeconds: 60 * 60 * 24 * 60,\n proofs: prf,\n ...context.data,\n capabilities\n });\n\n const encoded = ucanToken(raw);\n const isValid = await validateUcan(encoded);\n if (!isValid) throw new Error('Invalid ucan generated when updating');\n const patched = await new CoreCall(service, context).patch(subjectId, { [path]: encoded });\n context.result = {raw: context.data, encoded, subject: patched};\n return context;\n }\n};\n"],"names":["NotAuthError","Error","constructor","message","SPLIT_HEADER","UcanStrategy","AuthenticationBaseStrategy","args","expirationTimers","WeakMap","setAuthentication","auth","verifyAccessToken","accessToken","configuration","_this$authentication","authConfig","authentication","service","undefined","entity","entityId","config","header","schemes","handleConnection","event","connection","authResult","isValidLogout","validUcan","validateUcan","catch","err","console","log","errObj","code","indexOf","payload","exp","duration","Date","now","timer","lt","setTimeout","app","emit","clearTimeout","get","set","strategy","name","delete","verifyConfiguration","allowedKeys","key","Object","keys","includes","getEntityQuery","_params","getEntity","id","params","entityService","query","getParams","assign","_unset","result","provider","getEntityId","loginId","_this$app","core_path","pms","$limit","skipJoins","entities","find","skip_hooks","admin_pass","total","data","_id","authenticate","ucan","ucanToken","decodedUcan","value","coreEntity","_get","did","aud","parse","req","headerValue","headers","toLowerCase","scheme","schemeValue","match","hasScheme","some","current","RegExp","test","AuthService","AuthenticationService","configKey","opts","NotAuthenticated","rest","options","create","_this$options","NotAuth","ucan_path","authStrategies","length","validatedUcan","warn","parsed","parseUcan","secret","issuer","encodeKeyPair","secretKey","buildUcan","audience","lifetimeInSeconds","capabilities","att","patch","CoreCall","context","coreOptions","_context$params","core","_this$context$app","_this$context$app2","_this$context$app3","_this$context$app4","update","_this$context$app5","remove","_this$context$app6","_this$context$app7","_find","_this$context$app8","_create","_this$context$app9","_patch","_this$context$app10","_update","_this$context$app11","_remove","_this$context$app12","existsPath","getExists","path","loadExists","ex","exists_check","setExists","val","_set","SUPERUSER","anyAuth","noThrow","noThrowAuth","e","bareAuth","verifyOne","_v","v","verifyUcan","ok","requiredCapabilities","newCapabilities","map","a","capability","can","segments","orVerifyLoop","arr","i","_v2","verifyAgainstReqs","reqs","_v3","client_ucan","ucan_aud","vMethod","or","method","uc","methodOpts","cs","cap_subjects","filter","loginConfig","loginCheckId","String","caps","capability_service","subject","$in","cap","k","logins","_v4","ucanString","modelCapabilities","rootIssuer","Array","isArray","genCapability","with","defaultScheme","hierPart","defaultHierPart","namespace","checkUcan","_v5","authenticated","canU","_v6","specialChange","sk","spl","split","_v7","loginPass","scrubbedData","scrubData","checkLoginPass","lpass","methodsOnly","allMethods","methodIdx","existing","existingParams","loginOk","checkLogin","recordLoginPassId","loginIdPath","checkArr","checkId","rl","rlId","passPath","spl2","obj","o","currentMethod","splitMethod","fields","slice","join","field","topLevel","operator","operatorLevel","error","type","_no_throw_error","ucanAuth","existingLogin","hasLogin","existingUcan","login","adminPass","allUcanAuth","methods","corePath","entityKey","updateUcan","add","checkAbilities","stackAbilities","canEdit","subjectId","decoded","fct","nbf","prf","reduceAbilities","raw","proofs","encoded","isValid","patched"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/auth-service/ucan-strategy.ts","../src/auth-service/index.ts","../src/core/methods.ts","../src/utils/check-exists.ts","../src/hooks/ucan-auth.ts","../src/hooks/update-ucan.ts"],"sourcesContent":["import {IncomingMessage} from 'http';\nimport {\n AuthenticationBase,\n AuthenticationBaseStrategy,\n AuthenticationRequest,\n AuthenticationResult,\n ConnectionEvent\n} from '@feathersjs/authentication';\n// @ts-ignore\nimport lt from 'long-timeout';\nimport {_get, _unset, ucanToken, validateUcan} from 'symbol-ucan';\n\nexport class NotAuthError extends Error {\n constructor(message?: string) {\n super(message)\n }\n}\nconst SPLIT_HEADER = /(\\S+)\\s+(\\S+)/;\n\ntype AnyObj = { [key: string]: any };\n\nexport class UcanStrategy extends AuthenticationBaseStrategy {\n expirationTimers = new WeakMap();\n\n setAuthentication(auth: AuthenticationBase) {\n // console.log('set authentication', auth);\n auth.verifyAccessToken = (accessToken: string) => {\n return {} as any;\n };\n super.setAuthentication(auth);\n }\n\n get configuration() {\n const authConfig = this.authentication?.configuration || {\n service: undefined,\n entity: undefined,\n entityId: undefined\n };\n const config = super.configuration;\n\n return {\n service: authConfig.service,\n entity: authConfig.entity,\n entityId: authConfig.entityId,\n header: 'Authorization',\n schemes: ['Bearer', 'JWT'],\n ...config\n };\n }\n\n async handleConnection(event: ConnectionEvent, connection: any, authResult?: AuthenticationResult) {\n const isValidLogout = event === 'logout' && connection.authentication && authResult &&\n connection.authentication.accessToken === authResult.accessToken;\n\n const {accessToken, entity} = authResult || {};\n\n if (accessToken && event === 'login') {\n const validUcan = await validateUcan(accessToken)\n .catch(err => {\n console.log('Could not validate ucan in connection: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n throw new Error(errObj.message);\n });\n const {payload: {exp}} = validUcan || {payload: {exp: 0}}\n // The time (in ms) until the token expires\n const duration = (exp * 1000) - Date.now();\n // This may have to be a `logout` event but right now we don't want\n // the whole context object lingering around until the timer is gone\n const timer = lt.setTimeout(() => (this.app as any).emit('disconnect', connection), duration);\n\n lt.clearTimeout(this.expirationTimers.get(connection));\n this.expirationTimers.set(connection, timer);\n\n connection.authentication = {\n strategy: this.name,\n accessToken\n };\n } else if (event === 'disconnect' || isValidLogout) {\n const {entity} = this.configuration;\n\n delete connection[entity];\n delete connection.authentication;\n\n lt.clearTimeout(this.expirationTimers.get(connection));\n this.expirationTimers.delete(connection);\n }\n }\n\n verifyConfiguration() {\n const allowedKeys = ['entity', 'entityId', 'service', 'header', 'schemes', 'audience'];\n\n for (const key of Object.keys(this.configuration)) {\n if (!allowedKeys.includes(key)) {\n throw new Error(`Invalid ucanStrategy option 'authentication.${this.name}.${key}'. Did you mean to set it in 'authentication.jwtOptions'?`);\n }\n }\n\n if (typeof this.configuration.header !== 'string') {\n throw new Error(`The 'header' option for the ${this.name} strategy must be a string`);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n async getEntityQuery(_params: any) {\n return {};\n }\n\n /**\n * Return the entity for a given id\n * @param id The id to use\n * @param params Service call parameters\n */\n async getEntity(id: string, params: any) {\n const entityService = this.entityService;\n const {entity} = this.configuration;\n\n if (entityService === null) {\n throw new NotAuthError('Could not find entity service');\n }\n\n const query = await this.getEntityQuery(params);\n const getParams = Object.assign({}, _unset(params, 'provider'), {query});\n const result = await entityService.get(id, getParams);\n\n if (!params.provider) {\n return result;\n }\n\n return entityService.get(id, {...params, [entity]: result});\n }\n\n async getEntityId(authResult: AuthenticationResult, _params: AnyObj) {\n let {query, loginId} = _params;\n if (loginId) return loginId;\n else {\n const {service, core_path = 'core'} = this.configuration;\n const pms = {\n query: {...query, $limit: 1},\n [core_path]: {skipJoins: true, ..._params[core_path]}\n }\n const entities = await this.app?.service(service).find({...pms, skipJoins: true, skip_hooks: true, admin_pass: true} as any);\n if (entities.total) return entities.data[0]._id;\n else throw new NotAuthError('Could not find login associated with this ucan');\n }\n }\n\n async authenticate(authentication: AuthenticationRequest, params: AnyObj) {\n let {accessToken, loginId, ucan} = authentication;\n const {entity, core_path} = this.configuration;\n if (!accessToken) {\n\n if (ucan) accessToken = ucanToken(ucan);\n else throw new NotAuthError('Error generating ucan');\n // } else throw new NotAuthenticated('No access token');\n }\n //\n // await verifyUcan(accessToken, {audience: ucan_audience || params.ucan_aud, requiredCapabilities})\n // .catch(err => {\n // console.error('error verifying ucan', err);\n // throw new NotAuthenticated('Could not verify ucan: ' + err.message);\n // });\n\n const decodedUcan = await validateUcan(accessToken)\n .catch(err => {\n console.log('Could not validate ucan during authentication: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n throw new Error(errObj.message);\n });\n\n const result = {\n accessToken,\n authentication: {\n strategy: 'jwt',\n accessToken\n }\n };\n\n if (entity === null) {\n return result;\n }\n\n let value;\n const coreEntity = _get(params, [core_path, entity]);\n if (!coreEntity) {\n const entityId = await this.getEntityId(result, {\n ...params,\n loginId,\n query: {did: decodedUcan?.payload.aud}\n });\n value = await this.getEntity(entityId, params);\n } else value = coreEntity;\n return {\n ...result,\n [entity]: value\n };\n\n }\n\n async parse(req: IncomingMessage) {\n const {header, schemes} = this.configuration;\n const headerValue = req.headers && req.headers[header.toLowerCase()];\n\n if (!headerValue || typeof headerValue !== 'string') {\n return null;\n }\n\n const [, scheme, schemeValue] = headerValue.match(SPLIT_HEADER) || [];\n const hasScheme = scheme && schemes.some(\n (current: any) => new RegExp(current, 'i').test(scheme)\n );\n\n if (scheme && !hasScheme) {\n return null;\n }\n\n return {\n strategy: this.name,\n accessToken: hasScheme ? schemeValue : headerValue\n };\n }\n}\n\n\n","import {_get, buildUcan, encodeKeyPair, parseUcan, ucanToken, validateUcan} from 'symbol-ucan';\nimport {AuthenticationParams, AuthenticationRequest, AuthenticationService} from '@feathersjs/authentication';\nimport {NullableId} from '../core';\n\ntype AnyObj = any\n\nexport class NotAuthError extends Error {\n constructor(message?: string) {\n super(message)\n }\n}\nexport type AuthServiceOptions = {\n NotAuthenticated?: any\n}\nexport * from './ucan-strategy';\n\nexport class AuthService extends AuthenticationService {\n options: AuthServiceOptions\n constructor(app: any, configKey = 'authentication', opts:AnyObj&AuthServiceOptions = {}) {\n const { NotAuthenticated, ...rest } = opts\n super(app, configKey, rest)\n this.app = app;\n this.options = { NotAuthenticated }\n };\n\n async create(data: AuthenticationRequest, params?: AuthenticationParams) {\n const NotAuth = this.options?.NotAuthenticated || NotAuthError;\n\n const {entity, service, ucan_path = 'ucan'} = this.app.get('authentication');\n\n const authStrategies = params?.authStrategies || this.configuration.authStrategies\n\n if (!params) params = {}\n\n if (!authStrategies.length) {\n throw new NotAuth('No authentication strategies allowed for creating a JWT (`authStrategies`)')\n }\n\n const authResult = await this.authenticate(data, params, ...authStrategies)\n .catch((err: any) => {\n throw new Error(err.message)\n })\n\n if (authResult.accessToken) {\n return authResult\n }\n const did = data.did || _get(authResult, [entity, 'did']);\n let ucan = data.ucan || _get(authResult, [entity, 'ucan']);\n\n if (!did) throw new Error('No did audience provided');\n if (!ucan) throw new Error('No ucan provided to authentication call');\n // const {secret} = this.configuration;\n\n const validatedUcan = await validateUcan(ucan)\n .catch(err => {\n console.log('Could not validate ucan creating authentication: ', err.message);\n const errObj = {\n code: 0,\n message: 'Unknown Issue Validating Ucan'\n };\n if (err.message.indexOf('Expired.') > -1) {\n errObj.code = 1;\n errObj.message = 'Expired Ucan'\n }\n console.warn('Could not validate ucan creating authentication', ucan, errObj.message);\n return null;\n });\n if (!validatedUcan) {\n const parsed = parseUcan(ucan);\n let {secret} = this.app.get('authentication');\n\n const issuer = encodeKeyPair({secretKey: secret});\n ucan = await buildUcan({\n audience: parsed.payload.aud,\n issuer,\n lifetimeInSeconds: 60 * 60 * 24 * 60,\n capabilities: parsed.payload.att\n })\n params.admin_pass = true;\n await this.app.service(service).patch(_get(authResult, [entity, '_id']) as NullableId, {[ucan_path]: ucanToken(ucan)}, {...params})\n }\n\n\n const accessToken = ucanToken(ucan);\n\n return {\n accessToken,\n ...authResult,\n authentication: {\n ...authResult.authentication,\n payload: accessToken\n }\n }\n }\n}\n\n","type AnyObj = any\n\nexport type Id = number | string\nexport type NullableId = Id | null\n\nexport type CallFindResult<T = AnyObj> = {\n total:number,\n limit: number,\n skip:number,\n data: Array<T>\n}\nexport type AnyParams = Iterable<AnyObj>\n\ndeclare type CoreOpts = {\n skipJoins?: boolean,\n admin_pass?: boolean\n}\nexport class CoreCall {\n context:any;\n service:string;\n core:AnyObj;\n entity:string;\n constructor(service:string, context:any, coreOptions?:CoreOpts){\n this.service = service\n this.context = context\n const entity = (context.app.get('authentication') || { entity: 'login' }).entity || 'login';\n this.entity = entity;\n const core = context.params?.core || {};\n if(!core[entity]) core[entity] = context.params[entity];\n this.core = { ...core, ...coreOptions }\n }\n\n async get(id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).get(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async find (params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).find({...params as AnyParams, [this.entity]: params[this.entity], skip_hooks:true, admin_pass:true, ...{ [core_path]: this.core }})\n }\n async create (data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).create(data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async patch (id:NullableId, data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).patch(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async update (id:NullableId, data:AnyObj, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).update(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async remove (id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service).remove(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n\n async _get(id:NullableId, params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._get(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _find (params:AnyObj = {}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._find({...params as AnyParams, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _create (data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._create(data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _patch (id:NullableId, data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._patch(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _update (id:NullableId, data:AnyObj, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._update(id, data, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n async _remove (id:NullableId, params:AnyObj ={}){\n const {core_path} = this.context.app.get('authentication');\n return this.context.app?.service(this.service)._remove(id, {...params, [this.entity]: params[this.entity], ...{ [core_path]: this.core }})\n }\n\n}\n\n","import {_get, _set} from 'symbol-ucan';\nimport {HookContext} from '../types';\nimport {CoreCall} from '../core';\n\ntype AnyObj = any\n\nexport const existsPath = '_exists';\n\nexport const getExists = (context:Partial<HookContext>):any => {\n const path = context.app.get('existsPath') || existsPath;\n return _get(context.params, `core.${path}.${context.path}.${context.id}`) || undefined;\n}\n\nexport const loadExists = async (context:HookContext, options?:{ skipJoins?: boolean, params?: AnyObj }):Promise<any> => {\n let ex = getExists(context);\n if(!ex && context.id) {\n ex = await new CoreCall(context.path, context, { skipJoins: options?.skipJoins !== false }).get(context.id, { exists_check: true, admin_pass: true, skip_hooks: true, ...options?.params || {} })\n }\n return ex;\n}\n\nexport const setExists = (context:HookContext, val:any):HookContext => {\n const path = context.app.get('existsPath') || existsPath;\n context.params = _set(context.params, `core.${path}.${context.path}.${val?._id || context.id}`, val)\n return context;\n};\n","import {HookContext} from '../types';\nimport {authenticate} from '@feathersjs/authentication';\nimport {\n _get,\n _set,\n Capability,\n encodeKeyPair,\n genCapability,\n parseUcan,\n ucanToken,\n VerifyOptions,\n verifyUcan\n} from 'symbol-ucan';\nimport {loadExists, setExists} from '../utils';\nimport {CoreCall} from '../core';\n\ntype AnyObj = any\n\nconst SUPERUSER = '*'\n\nexport type UcanAuthConfig = {\n entity: string,\n service: string,\n client_ucan: string,\n ucan_aud: string,\n ucan_path: string,\n core_path: string,\n defaultHierPart: string,\n defaultScheme: string\n}\n\ntype AuthConfig = {\n [key: string]: string\n}\n\ntype AnyAuth = '*'\nexport const anyAuth: AnyAuth = '*' as AnyAuth;\ntype NoThrow = '$'\nexport const noThrow: NoThrow = '$' as NoThrow;\n\n\nexport type CapabilityParts = Partial<Capability> | [string, Array<string> | string];\n\nexport declare type LoginPassOption = [Array<string>, Array<string> | '*']\nexport declare type UcanAuthOptions = {\n creatorPass?: '*' | Array<string>,\n loginPass?: Array<LoginPassOption>,\n or?: '*' | Array<string>\n adminPass?: Array<string>,\n noThrow?: boolean,\n log?: boolean,\n existingParams?: AnyObj,\n specialChange?: Array<string> | AnyAuth,\n cap_subjects?: Array<string>,\n audience?: string\n}\ntype RequiredCapability = { capability: Capability, rootIssuer: string }\nexport type UcanCap = Array<CapabilityParts> | AnyAuth | NoThrow;\nexport type UcanAllArgs = {\n all?: UcanCap,\n get?: UcanCap,\n find?: UcanCap,\n create?: UcanCap,\n patch?: UcanCap,\n update?: UcanCap,\n remove?: UcanCap\n};\n\ntype VerifyOne = { ucan: string } & VerifyOptions;\n\ntype Auth = <S>(method: string) => (context: HookContext<S>) => Promise<HookContext<S>>\ntype Config = { entity: string, service: string, defaultScheme: string, defaultHierPart: string };\ntype VerifyRes = { ok: boolean, value?: Array<any>, err?: Array<any> };\n\nexport const noThrowAuth = async <S>(context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n const entity = _get(context, ['auth', config.entity]);\n if (entity) {\n context = _set(context, [config.core_path, config.entity], entity)\n }\n try {\n context = await authenticate('jwt')(context as any)\n .catch(() => {\n return context;\n })\n } catch (e) {\n return context;\n }\n return context;\n}\n\nexport const bareAuth = async <S>(context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n const entity = _get(context, ['auth', config.entity]);\n if (entity) context = _set(context, [config.core_path, config.entity], entity)\n return authenticate('jwt')(context as any);\n}\n\nconst verifyOne = async (ucan: string, options: VerifyOptions, log?: boolean) => {\n try {\n let v = await verifyUcan(ucan, options);\n if (!v?.ok && options.requiredCapabilities) {\n const newCapabilities = options.requiredCapabilities.map(a => {\n if (a.capability.can !== SUPERUSER) a.capability.can.segments = ['*']\n return a\n })\n if (log) console.log('set new req capabilities', newCapabilities, parseUcan(ucan))\n v = await verifyUcan(ucan, {\n ...options, requiredCapabilities: newCapabilities\n })\n if (log) console.log('Second verification result:', v);\n }\n return v;\n } catch (e: any) {\n return {ok: false, err: [e.message]}\n }\n};\nexport const orVerifyLoop = async (arr: Array<VerifyOne>, log?: boolean): Promise<VerifyRes> => {\n let v: any = {ok: false, value: []};\n\n try {\n for (const i in arr) {\n if (log) console.log('or verify loop', arr[i], parseUcan(arr[i].ucan));\n if (!v?.ok) {\n const {ucan, ...options} = arr[i];\n v = await verifyOne(ucan, options, log)\n if (log) console.log('got in verify loop', v);\n } else break;\n }\n return v;\n } catch (e: any) {\n return {ok: false, err: [e.message]}\n }\n}\n\nexport type VerifyConfig = {\n client_ucan: string,\n ucan_aud: string,\n [key: string]: any\n};\n\ntype MethodOpts = { aud?: string }\nexport const verifyAgainstReqs = <S>(reqs: Array<RequiredCapability>, config: VerifyConfig, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<VerifyRes> => {\n const log = options?.log\n const ucan = _get(context.params, config.client_ucan) as string;\n const audience = options?.audience || _get(context.params, config.ucan_aud) as string;\n if (log) console.log('verify against reqs', reqs)\n let vMethod: (uc?: string, methodOpts?: MethodOpts) => Promise<VerifyRes>\n const or = options?.or || []\n if (ucan && (or === '*' || or.includes(context.method))) vMethod = (uc?: string, methodOpts?: MethodOpts) => orVerifyLoop((reqs || []).map(a => {\n return {\n ucan: uc || ucan,\n audience: methodOpts?.aud || audience,\n requiredCapabilities: [a]\n }\n }), log)\n else vMethod = (uc?: string, methodOpts?: MethodOpts) => verifyOne(uc || ucan, {\n audience: methodOpts?.aud || audience,\n requiredCapabilities: reqs\n }, log) as Promise<VerifyRes>\n let v = await vMethod()\n if (log) console.log('first verify try', v);\n if (v?.ok) return v;\n const cs = (options?.cap_subjects || []).filter(a => !!a)\n if (log) console.log('check cap_subjects', cs);\n if (cs) {\n const configuration = config?.loginConfig || context.app.get('authentication') as AnyObj;\n const loginCheckId = String(_get(context.params, `${configuration.entity}._id` || '')) as any;\n const caps = await new CoreCall(configuration.capability_service || 'caps', context).find({\n query: {\n $limit: cs.length,\n subject: {$in: cs}\n },\n skip_hooks: true,\n admin_pass: true\n })\n .catch(err => console.log(`Error finding caps in ucan auth: ${err.message}`))\n if (log) console.log('caps', caps);\n if (caps?.data) {\n for (const cap of caps.data) {\n for (const k in cap.caps || {}) {\n if (log) console.log('check cap', k, cap.caps[k].logins, loginCheckId);\n if ((cap.caps[k].logins || []).map((a: any) => String(a)).includes(loginCheckId)) {\n try {\n const ucanString = ucanToken(cap.caps[k].ucan)\n if (log) console.log('got ucan string', ucanString);\n if (ucanString) {\n v = await vMethod(ucanString, {aud: cap.did})\n if (log) console.log('tried v on cap', v);\n }\n } catch (e: any) {\n console.log(`Error verifying ucan from cap: ${cap._id}. Err:${e.message}`)\n }\n if (options?.log) console.log('tried v on cap', v);\n if (v?.ok) return v;\n }\n }\n }\n }\n }\n return v;\n }\n}\n\nexport type CapabilityModelConfig = {\n defaultScheme: string,\n defaultHierPart: string,\n secret: string,\n [key: string]: any\n};\n\nexport const modelCapabilities = (reqs: Array<CapabilityParts>, config: CapabilityModelConfig): Array<RequiredCapability> => {\n\n const rootIssuer = encodeKeyPair({secretKey: config.secret}).did();\n if (!Array.isArray(reqs)) return []\n return reqs.map(a => {\n return {\n capability: Array.isArray(a) ? genCapability({\n with: {scheme: config.defaultScheme, hierPart: config.defaultHierPart},\n can: {namespace: a[0], segments: typeof a[1] === 'string' ? [a[1]] : a[1]}\n }, config) : genCapability(a, config),\n rootIssuer\n };\n }) as Array<RequiredCapability>\n};\n\nexport declare type PassConfig = {\n loginConfig?: VerifyConfig\n}\nexport const checkUcan = (requiredCapabilities: UcanCap, options?: UcanAuthOptions & PassConfig) => {\n return async (context: HookContext): Promise<HookContext> => {\n const configuration = options?.loginConfig || context.app.get('authentication') as AnyObj;\n\n let v: any = {ok: false, value: []};\n\n const reqs: Array<RequiredCapability> = modelCapabilities(requiredCapabilities as Array<CapabilityParts>, configuration as CapabilityModelConfig);\n\n if (reqs.length) {\n v = await verifyAgainstReqs(reqs, configuration as VerifyConfig, options)(context)\n\n /** if the anyAuth setting is used along with specialChange, a user could get through to this point despite not being authenticated, so this step does not allow a pass for anyAuth setting even though no requiredCapabilities are present - because it was intended to throw if not authenticated unless special change conditions are met */\n } else if (requiredCapabilities !== '*') v.ok = true;\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context\n } else {\n\n // if (!v?.ok) {\n // let hasSplitNamespace = false;\n // const reducedReqs: Array<RequiredCapability> = [];\n // reqs.forEach((req, i) => {\n // const splt = (_get<RequiredCapability, string>(req, 'capability.can.namespace') || '').split(':')\n // if (splt[1]) {\n // req = _set(req, 'capability.can.namespace', splt[0]);\n // hasSplitNamespace = true;\n // }\n // reducedReqs.push(req)\n // })\n // if (hasSplitNamespace) v = await verifyAgainstReqs(reqs, configuration as VerifyConfig, options)(context);\n // }\n\n\n if (options?.log) console.log('checking special change', options?.specialChange);\n if (options?.specialChange) {\n if (options.specialChange === anyAuth) {\n context.params.canU = true;\n return context;\n } else if (Array.isArray(options.specialChange)) {\n if (['create', 'patch', 'update'].includes(context.method)) {\n if (Array.isArray(context.data)) throw new Error('No multi data allowed with special change')\n for (const k in context.data || {}) {\n if (['$set', '$unset', '$addToSet', '$pull', '$push'].includes(k)) {\n for (const sk in context.data[k] || {}) {\n if (!options.specialChange.includes(sk)) {\n const spl = sk.split('.');\n if (spl.length === 1) delete context.data[k][sk];\n else if (!options.specialChange.includes(spl[0])) delete context.data[k][sk]\n }\n }\n } else if (!options.specialChange.includes(k)) delete context.data[k];\n }\n context.params.canU = true;\n return context;\n }\n }\n }\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context;\n } else {\n\n //If creator pass enabled, check to see if the auth login is the creator of the record\n const {loginPass} = options || {loginPass: [[['*'], ['nonExistentMethod']]]}\n if (loginPass?.length) {\n //object of scrubbed data object for pass that includes only limited access or full context.data object if no limits were present\n let scrubbedData: AnyObj = {};\n //scruData defaults to true - is only set to false\n let scrubData = true;\n const checkLoginPass = async (lpass: LoginPassOption) => {\n let methodsOnly = [];\n const allMethods = lpass[1] === '*';\n let methodIdx = -1;\n if (allMethods) methodIdx = 0;\n else {\n //separate out any field specific methods e.g. patch/name,avatar\n methodsOnly = (lpass[1] as string[]).map(a => a.split('/')[0]);\n methodIdx = methodsOnly.indexOf(context.method);\n }\n /**ensure loginPass is allowed for this method*/\n if (methodIdx > -1) {\n /**retrieve existing record to check ids for login id*/\n const existing = await loadExists(context, {params: options?.existingParams});\n let loginOk = false;\n\n /** function for comparing record login id with context login*/\n const checkLogin = (recordLoginPassId: string, loginIdPath: string = '_id') => {\n const loginCheckId = _get(context.params, `${configuration.entity}.${loginIdPath}`) as any;\n /**Make sure both are present to avoid pass on undefined*/\n if (loginCheckId && recordLoginPassId) {\n /** change login path result to array no matter what */\n const checkArr = Array.isArray(loginCheckId) ? loginCheckId.map(a => String(a)) : [String(loginCheckId)];\n if (Array.isArray(recordLoginPassId)) {\n /**loop through to see if there is a match present use for loops for performance instead of some*/\n for (let i = 0; i < checkArr.length; i++) {\n const checkId = String(checkArr[i])\n for (let rl = 0; rl < recordLoginPassId.length;) {\n const rlId = String(recordLoginPassId[rl]);\n if (rlId === checkId) loginOk = true;\n else rl++;\n }\n if (loginOk) return;\n }\n } else if (checkArr.includes(String(recordLoginPassId))) {\n return loginOk = true;\n }\n } else return\n }\n\n if (existing) {\n context = setExists(context, existing);\n /**perform the check*/\n let recordLoginPassId;\n for (const passPath of lpass[0] || []) {\n const spl = String(passPath).split('/');\n if (spl[0].includes('*')) {\n const spl2 = spl[0].split('*');\n const obj = _get(existing, spl2[0]);\n if (obj && typeof obj === 'object') {\n if (Array.isArray(obj)) {\n /** IF array, iterate through array and check the sub-path */\n for (const o of obj) {\n checkLogin(_get(o, spl2[1]) as string, spl[1] || '_id');\n if (loginOk) break;\n }\n } else {\n /** IF object, iterate through object and check the sub-path */\n for (const k in obj) {\n checkLogin(_get(obj, `${k}.${spl2[1]}`) as string, spl[1] || '_id')\n if (loginOk) break;\n }\n }\n }\n\n } else checkLogin(_get(existing, spl[0]) as string, spl[1] || '_id');\n\n }\n }\n\n if (loginOk) {\n v.ok = true\n /**loginPass is true - but check for granular field permissions such as patch/owner,color,status that imply limited permission*/\n //TODO: possibly a throw option here. If loginPass is ok, it will go forward, but could send an empty or modified patch object\n if (lpass[1] !== '*' && !['find', 'get', 'remove'].some(a => lpass[1].includes(a))) {\n const currentMethod = allMethods ? '*' : lpass[1][methodIdx];\n const splitMethod = currentMethod.split('/')[0];\n //check if current method contains a split '/' signaling limited permission check\n if (splitMethod !== currentMethod) {\n //get an array of the allowed fields\n const fields = currentMethod.split('/').slice(1).join('').split(',') || [];\n\n for (const field of fields) {\n const topLevel = _get(context.data, field);\n if (topLevel) scrubbedData = _set(scrubbedData, field, topLevel);\n else {\n for (const operator of ['$addToSet', '$pull']) {\n const operatorLevel = _get(context.data, `${operator}.${field}`);\n if (operatorLevel) scrubbedData = _set(scrubbedData, `${operator}.${field}`, operatorLevel);\n }\n }\n }\n } else scrubData = false;\n } else scrubData = false;\n }\n }\n }\n\n for await (const lpass of loginPass) {\n if (scrubData) await checkLoginPass(lpass);\n else break;\n }\n if (scrubData) context = _set(context, 'data', scrubbedData);\n }\n\n if (v?.ok) {\n context.params.authenticated = true;\n context.params.canU = true;\n return context;\n } else {\n\n if (options?.log) console.error('Ucan capabilities requirements not met: ', v, context.type, context.path);\n if (!options?.noThrow) throw new Error('Missing proper capabilities for this action: ' + context.type + ': ' + context.path + ' - ' + context.method);\n else {\n context.params._no_throw_error = {\n type: context.type,\n method: context.method,\n path: context.path\n }\n return context;\n }\n }\n }\n }\n }\n}\n\nexport const ucanAuth = <S>(requiredCapabilities?: UcanCap, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<HookContext<S>> => {\n const configuration = context.app.get('authentication') as AnyObj;\n const core_path = configuration.core_path || 'core';\n const entity = configuration.entity || 'login';\n\n const existingLogin:any = _get(context.params, [core_path, entity]) || _get(context.params, 'login') || _get(context.params.connection, entity);\n if(existingLogin?._id) context.params[entity] = existingLogin;\n const loginId = typeof existingLogin === 'string' ? existingLogin : existingLogin?._id;\n const hasLogin = !!(existingLogin && (typeof existingLogin === 'string' || !!loginId));\n const existingUcan = _get(context.params, configuration.client_ucan || 'client_ucan');\n if (options?.log) console.log('ucan auth', 'hasLogin', hasLogin, 'loginId', loginId, 'existingUcan', !!existingUcan, 'core_path', core_path, 'entity', entity, 'core', context.params[core_path], 'params login', context.params.login, 'required capabilities', requiredCapabilities);\n //Below for passing through auth with no required capabilities\n if (requiredCapabilities === noThrow || (requiredCapabilities && requiredCapabilities[context.method] === noThrow)) return hasLogin ? context : await noThrowAuth(context);\n const adminPass = (options?.adminPass || []).includes(context.method) && (_get(context.params, 'admin_pass') || _get(context.params, [configuration.core_path, 'admin_pass'])) as any\n // If no login is present and no client UCAN is provided, perform authentication. Otherwise, reuse existing state/ucan.\n if (!hasLogin && !existingUcan) context = (adminPass || options?.specialChange) ? await noThrowAuth(context) : await bareAuth(context);\n if (requiredCapabilities === anyAuth && !options?.specialChange) {\n context.params.authenticated = !!context.params[entity];\n return context;\n }\n if (adminPass) return context;\n if (!requiredCapabilities) return context;\n return await checkUcan(requiredCapabilities, options)(context)\n }\n}\n\nexport const allUcanAuth = <S>(methods: UcanAllArgs, options?: UcanAuthOptions) => {\n return async (context: HookContext<S>): Promise<HookContext<S>> => {\n const config = context.app.get('authentication') as AuthConfig;\n // if a login is already present in params[core_path][entity], don't overwrite it\n const corePath = (config as any).core_path || 'core';\n const entityKey = (config as any).entity || 'login';\n const existingLogin = _get(context.params, [corePath, entityKey]);\n if (!existingLogin) {\n const entity = _get(context, ['auth', entityKey]);\n if (entity) context = _set(context, [corePath, entityKey], entity)\n }\n if (context.type === 'before') {\n const {method} = context as { method: keyof UcanAllArgs } & HookContext<S>;\n if (methods[method as keyof UcanAllArgs] || methods['all']) {\n return await ucanAuth(methods[method] || methods['all'], options)(context) as any;\n } else return context;\n } else return context;\n }\n}\n","import {\n buildUcan,\n encodeKeyPair,\n parseUcan,\n ucanToken,\n validateUcan,\n stackAbilities,\n verifyUcan,\n reduceAbilities,\n _get\n} from 'symbol-ucan';\nimport { CoreCall } from '../core'\n\n\nexport const updateUcan = () => {\n return async (context:any) => {\n\n const { add = [], remove = [] } = context.data;\n //ensure capabilities were passed\n if(!add?.length && !remove?.length) throw new Error('No new capabilities passed');\n\n //check ability to edit the affected capabilities\n const {secret, ucan_aud, entity, ucan} = context.app.get('authentication');\n const rootIssuer = encodeKeyPair({secretKey: secret}).did();\n\n const checkAbilities = stackAbilities([...add, ...remove]);\n\n const canEdit = await verifyUcan(_get(context.params, [entity, ucan]) as string, {\n audience: _get(context.params, ucan_aud) as string,\n requiredCapabilities: checkAbilities.map(a => {\n return {\n //TODO: possibly READ shouldn't have the ability to allow others to READ\n capability: a,\n rootIssuer\n }\n })\n })\n\n if(!canEdit?.ok) throw new Error('You don\\'t have sufficient capabilities to grant those capabilities')\n\n //prep edited ucan\n const subjectId = context.id;\n const service = context.data.service || 'logins';\n const path = context.data.path || 'ucan';\n const subject = await new CoreCall(service, context, { skipJoins: true }).get(subjectId);\n\n const decoded = parseUcan(_get(subject, path) as string);\n const {aud, att, fct, nbf, prf} = decoded.payload;\n\n let capabilities = [...att];\n if(remove?.length) capabilities = reduceAbilities(remove, att);\n if(add?.length) capabilities = stackAbilities([...att, ...add]);\n\n\n const raw = await buildUcan({\n issuer: encodeKeyPair({secretKey: secret}),\n audience: aud,\n lifetimeInSeconds: 60 * 60 * 24 * 60,\n proofs: prf,\n ...context.data,\n capabilities\n });\n\n const encoded = ucanToken(raw);\n const isValid = await validateUcan(encoded);\n if (!isValid) throw new Error('Invalid ucan generated when updating');\n const patched = await new CoreCall(service, context).patch(subjectId, { [path]: encoded });\n context.result = {raw: context.data, encoded, subject: patched};\n return context;\n }\n};\n"],"names":["NotAuthError","Error","constructor","message","SPLIT_HEADER","UcanStrategy","AuthenticationBaseStrategy","args","expirationTimers","WeakMap","setAuthentication","auth","verifyAccessToken","accessToken","configuration","_this$authentication","authConfig","authentication","service","undefined","entity","entityId","config","header","schemes","handleConnection","event","connection","authResult","isValidLogout","validUcan","validateUcan","catch","err","console","log","errObj","code","indexOf","payload","exp","duration","Date","now","timer","lt","setTimeout","app","emit","clearTimeout","get","set","strategy","name","delete","verifyConfiguration","allowedKeys","key","Object","keys","includes","getEntityQuery","_params","getEntity","id","params","entityService","query","getParams","assign","_unset","result","provider","getEntityId","loginId","_this$app","core_path","pms","$limit","skipJoins","entities","find","skip_hooks","admin_pass","total","data","_id","authenticate","ucan","ucanToken","decodedUcan","value","coreEntity","_get","did","aud","parse","req","headerValue","headers","toLowerCase","scheme","schemeValue","match","hasScheme","some","current","RegExp","test","AuthService","AuthenticationService","configKey","opts","NotAuthenticated","rest","options","create","_this$options","NotAuth","ucan_path","authStrategies","length","validatedUcan","warn","parsed","parseUcan","secret","issuer","encodeKeyPair","secretKey","buildUcan","audience","lifetimeInSeconds","capabilities","att","patch","CoreCall","context","coreOptions","_context$params","core","_this$context$app","_this$context$app2","_this$context$app3","_this$context$app4","update","_this$context$app5","remove","_this$context$app6","_this$context$app7","_find","_this$context$app8","_create","_this$context$app9","_patch","_this$context$app10","_update","_this$context$app11","_remove","_this$context$app12","existsPath","getExists","path","loadExists","ex","exists_check","setExists","val","_set","SUPERUSER","anyAuth","noThrow","noThrowAuth","e","bareAuth","verifyOne","_v","v","verifyUcan","ok","requiredCapabilities","newCapabilities","map","a","capability","can","segments","orVerifyLoop","arr","i","_v2","verifyAgainstReqs","reqs","_v3","client_ucan","ucan_aud","vMethod","or","method","uc","methodOpts","cs","cap_subjects","filter","loginConfig","loginCheckId","String","caps","capability_service","subject","$in","cap","k","logins","_v4","ucanString","modelCapabilities","rootIssuer","Array","isArray","genCapability","with","defaultScheme","hierPart","defaultHierPart","namespace","checkUcan","_v5","authenticated","canU","_v6","specialChange","sk","spl","split","_v7","loginPass","scrubbedData","scrubData","checkLoginPass","lpass","methodsOnly","allMethods","methodIdx","existing","existingParams","loginOk","checkLogin","recordLoginPassId","loginIdPath","checkArr","checkId","rl","rlId","passPath","spl2","obj","o","currentMethod","splitMethod","fields","slice","join","field","topLevel","operator","operatorLevel","error","type","_no_throw_error","ucanAuth","existingLogin","hasLogin","existingUcan","login","adminPass","allUcanAuth","methods","corePath","entityKey","updateUcan","add","checkAbilities","stackAbilities","canEdit","subjectId","decoded","fct","nbf","prf","reduceAbilities","raw","proofs","encoded","isValid","patched"],"mappings":"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"}
|
package/lib/index.modern.js
CHANGED
|
@@ -881,7 +881,7 @@ const ucanAuth = (requiredCapabilities, options) => {
|
|
|
881
881
|
const core_path = configuration.core_path || 'core';
|
|
882
882
|
const entity = configuration.entity || 'login';
|
|
883
883
|
const existingLogin = _get(context.params, [core_path, entity]) || _get(context.params, 'login') || _get(context.params.connection, entity);
|
|
884
|
-
if (existingLogin) context.params[entity] = existingLogin;
|
|
884
|
+
if (existingLogin != null && existingLogin._id) context.params[entity] = existingLogin;
|
|
885
885
|
const loginId = typeof existingLogin === 'string' ? existingLogin : existingLogin == null ? void 0 : existingLogin._id;
|
|
886
886
|
const hasLogin = !!(existingLogin && (typeof existingLogin === 'string' || !!loginId));
|
|
887
887
|
const existingUcan = _get(context.params, configuration.client_ucan || 'client_ucan');
|