You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.2 KiB
34 lines
1.2 KiB
import {isOAuth2RedemptionCode, OAuth2Client, OAuth2RedemptionCode, RedemptionCodeRepository} from '../types'
|
|
import {Inject, Injectable} from '../../../di'
|
|
import {Cache, Maybe, uuid4} from '../../../util'
|
|
import {Authenticatable} from '../../types'
|
|
|
|
@Injectable()
|
|
export class CacheRedemptionCodeRepository extends RedemptionCodeRepository {
|
|
@Inject()
|
|
protected readonly cache!: Cache
|
|
|
|
async find(codeString: string): Promise<Maybe<OAuth2RedemptionCode>> {
|
|
const cacheKey = `@extollo:oauth2:redemption:${codeString}`
|
|
if ( await this.cache.has(cacheKey) ) {
|
|
const code = await this.cache.safe(cacheKey).then(x => x.json())
|
|
if ( isOAuth2RedemptionCode(code) ) {
|
|
return code
|
|
}
|
|
}
|
|
}
|
|
|
|
async issue(user: Authenticatable, client: OAuth2Client, scope?: string): Promise<OAuth2RedemptionCode> {
|
|
const code = {
|
|
scope,
|
|
clientId: client.id,
|
|
userId: user.getUniqueIdentifier(),
|
|
code: uuid4(),
|
|
}
|
|
|
|
const cacheKey = `@extollo:oauth2:redemption:${code.code}`
|
|
await this.cache.put(cacheKey, JSON.stringify(code))
|
|
return code
|
|
}
|
|
}
|