UNPKG

@expressive-analytics/deep-thought-service

Version:

Typescript conversion of Deep Thought Services (formerly providers)

65 lines (56 loc) 1.79 kB
import {DT,DTModel} from '@expressive-analytics/deep-thought-js' import {DTSession} from './DTSession' const md5 = require("blueimp-md5") export interface DTRequestorI extends DT { name:string url:string status:number consumer_key:string } export class DTRequestor extends DTModel{ protected static $T = "consumer"; declare $public:DTRequestorI protected secret; protected settings:Record<string,any> consumer_key:string static create(params){ let us = super.create(params) as DTRequestor us.settings = params return us } /** ensures that consumer requests come from a known session @return returns a token to be included in requests to consumers */ /*static consumerTokenForAPI(api_name){ const api = this.fromAPI(api_name); return api.consumerToken(); }*/ /** generate a valid consumer token @param consumer_key - should come from api config @param consumer_secret - should come from api config @param permutation - varies the token, default varies by session id. Use this to generate state-free tokens */ consumerToken(){ const session = DTSession.shared(); //ensure the session is started let sec = this.$get<string>('secret') let key = this.$get<string>('consumer_key') let str = sec+key+Math.random() return md5(str).substring(0,10)+key; } verifyConsumerToken(consumer_token){ return this.consumerToken() == consumer_token; } /** ensures that provider requests come from a known source (this token should never be public!) @return returns a token to be included in reqests to providers */ providerToken(){ let sec = this.$get<string>('secret') let key = this.$get<string>('consumer_key') return md5(sec+key).substring(0,10)+key; } verifyProviderToken(token){ return this.providerToken()==token; } }