2018-08-26 23:16:13 +01:00
/**
* @author gchq77703 []
* @copyright Crown Copyright 2018
* @license Apache-2.0
*/
import Operation from "../Operation" ;
import jwt from "jsonwebtoken" ;
2018-08-31 13:58:06 +00:00
import OperationError from "../errors/OperationError" ;
2018-08-26 23:16:13 +01:00
/**
* JWT Sign operation
*/
class JWTSign extends Operation {
/**
* JWTSign constructor
*/
constructor () {
super ();
this . name = "JWT Sign" ;
this . module = "Crypto" ;
2018-08-31 13:58:06 +00:00
this . description = "Signs a JSON object as a JSON Web Token using a provided secret / private key.<br><br>The key should be either the secret for HMAC algorithms or the PEM-encoded private key for RSA and ECDSA." ;
this . infoURL = "https://wikipedia.org/wiki/JSON_Web_Token" ;
2018-08-26 23:16:13 +01:00
this . inputType = "JSON" ;
this . outputType = "string" ;
this . args = [
{
2018-08-31 13:58:06 +00:00
name : "Private/Secret Key" ,
2018-08-29 22:43:10 +01:00
type : "text" ,
2018-08-31 13:58:06 +00:00
value : "secret"
2018-08-26 23:16:13 +01:00
},
{
2018-08-31 13:58:06 +00:00
name : "Signing algorithm" ,
2018-08-29 22:43:10 +01:00
type : "option" ,
2018-08-26 23:16:13 +01:00
value : [
2018-08-29 22:43:10 +01:00
"HS256" ,
"HS384" ,
"HS512" ,
"RS256" ,
"RS384" ,
"RS512" ,
"ES256" ,
"ES384" ,
"ES512" ,
"None"
2018-08-26 23:16:13 +01:00
]
}
];
}
/**
* @param {JSON} input
* @param {Object[]} args
* @returns {string}
*/
run ( input , args ) {
const [ key , algorithm ] = args ;
2018-08-31 13:58:06 +00:00
try {
return jwt . sign ( input , key , {
algorithm : algorithm === "None" ? "none" : algorithm
});
} catch ( err ) {
throw new OperationError ( `Error: Have you entered the key correctly? The key should be either the secret for HMAC algorithms or the PEM-encoded private key for RSA and ECDSA.
${ err } ` );
}
2018-08-26 23:16:13 +01:00
}
}
export default JWTSign ;