author Jang Ryeol, ryeolj5911 gmail require ( 'module-alias/register' ) ; import jwt = require ( 'jsonwebtoken' ) ; import property = require ( '@app/core/config/property' ) ; let secretKey = property . get ( 'core.secretKey' ) ; /**
 * api key를 발급할 때 암호화에 사용되는 json입니다.
 * jwt에 고유한 config.secretKey를 사용하여 암호화하기 때문에
 * key_version을 바꾸면 새로운 키를 발급할 수 있습니다.
 * 혹은 임의의 필드를 삽입하여 salt로 사용할 수 있습니다.
 */ var api_list = { ios : { string : "ios" , key_version : "0" } , web : { string : "web" , key_version : "0" } , android : { string : "android" , key_version : "0" } , test : { string : "test" , key_version : "0" } } ; /**
 * Deprecated
 */ var app_version = { ios : "1.0.0" , web : "1.0.0" , android : "1.0.0" } ; param string export function getAppVersion ( string ) { return app_version [ string ] ; } ; param api_obj function issueKey ( api_obj ) { return jwt . sign ( api_obj , secretKey ) ; } ; param api_key returns { Promise } export function validateKey ( api_key ) { if ( process . env . NODE_ENV == 'mocha' ) { return new Promise ( function ( resolve , reject ) { resolve ( 'mocha' ) ; } ) ; } return new Promise ( function ( resolve , reject ) { jwt . verify ( api_key , secretKey , function ( err , decoded ) { if ( err ) return reject ( "invalid api key" ) ; if ( ! decoded . string || ! decoded . key_version ) return reject ( "invalid api key" ) ; if ( api_list [ decoded . string ] && api_list [ decoded . string ] . key_version == decoded . key_version ) return resolve ( decoded . string ) ; } ) ; } ) ; } ; if ( ! module . parent ) { if ( process . argv . length != 3 || process . argv [ 2 ] != "list" ) { console . log ( "Invalid arguments" ) ; console . log ( "usage: $ node apiKey.js list" ) ; process . exit ( 1 ) ; } for ( var api in api_list ) { if ( api_list . hasOwnProperty ( api ) ) { console . log ( api_list [ api ] . string ) ; console . log ( "\n" + issueKey ( api_list [ api ] ) + "\n" ) ; } } }