@expressive-analytics/deep-thought-service
Version:
Typescript conversion of Deep Thought Services (formerly providers)
65 lines (56 loc) • 1.79 kB
text/typescript
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;
}
}