diff --git a/src/authentication/UnsecureConstantCredentialsExtractor.ts b/src/authentication/UnsecureConstantCredentialsExtractor.ts new file mode 100644 index 000000000..0911a7386 --- /dev/null +++ b/src/authentication/UnsecureConstantCredentialsExtractor.ts @@ -0,0 +1,22 @@ +import { getLoggerFor } from '../logging/LogUtil'; +import type { Credentials } from './Credentials'; +import { CredentialsExtractor } from './CredentialsExtractor'; + +/** + * Credentials extractor that authenticates a constant agent + * (useful for development or debugging purposes). + */ +export class UnsecureConstantCredentialsExtractor extends CredentialsExtractor { + private readonly agent: Credentials; + private readonly logger = getLoggerFor(this); + + public constructor(agent: string | Credentials) { + super(); + this.agent = typeof agent === 'string' ? { webId: agent } : agent; + } + + public async handle(): Promise { + this.logger.info(`Agent unsecurely claims to be ${this.agent.webId}`); + return this.agent; + } +} diff --git a/test/unit/authentication/UnsecureConstantCredentialsExtractor.test.ts b/test/unit/authentication/UnsecureConstantCredentialsExtractor.test.ts new file mode 100644 index 000000000..67e20e08a --- /dev/null +++ b/test/unit/authentication/UnsecureConstantCredentialsExtractor.test.ts @@ -0,0 +1,15 @@ +import { UnsecureConstantCredentialsExtractor } from '../../../src/authentication/UnsecureConstantCredentialsExtractor'; + +describe('An UnsecureConstantCredentialsExtractor', (): void => { + it('extracts a constant WebID.', async(): Promise => { + const agent = 'http://alice.example/card#me'; + const extractor = new UnsecureConstantCredentialsExtractor(agent); + await expect(extractor.handle()).resolves.toEqual({ webId: agent }); + }); + + it('extracts constant credentials.', async(): Promise => { + const agent = {}; + const extractor = new UnsecureConstantCredentialsExtractor(agent); + await expect(extractor.handle()).resolves.toBe(agent); + }); +});