File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -57,9 +57,17 @@ struct Args {
5757 #[ clap(
5858 short,
5959 long,
60+ default_value = "false" ,
6061 help = "Generate JWT secret"
6162 ) ]
6263 generate_jwt_secret : bool ,
64+
65+ #[ clap(
66+ long,
67+ default_value = "" ,
68+ help = "Generate JWT token for email"
69+ ) ]
70+ generate_jwt_token : String ,
6371}
6472
6573struct ReceivedFile {
@@ -99,6 +107,19 @@ async fn initial_setup() -> Option<RustlsConfig> {
99107 std:: process:: exit ( 0 ) ;
100108 }
101109
110+ if args. generate_jwt_token != "" {
111+ let token_r = storjwt:: generate_jwt_token ( & args. generate_jwt_token ) ;
112+ let token = match token_r {
113+ Ok ( token) => token,
114+ Err ( e) => {
115+ eprintln ! ( "Error generating JWT token: {}" , e) ;
116+ std:: process:: exit ( 1 ) ;
117+ }
118+ } ;
119+ println ! ( "JWT token: {}" , token) ;
120+ std:: process:: exit ( 0 ) ;
121+ }
122+
102123 if let Err ( e) = std:: env:: set_current_dir ( & args. files_directory ) {
103124 eprintln ! ( "Error changing directory: {}" , e) ;
104125 std:: process:: exit ( 1 ) ;
Original file line number Diff line number Diff line change 11use crate :: Args ;
22use clap:: Parser ;
33use hmac:: { Hmac , Mac } ;
4- use jwt:: { Header , Token , VerifyWithKey } ;
4+ use jwt:: { Header , Token , VerifyWithKey , SignWithKey } ;
55use sha2:: Sha256 ;
66use std:: collections:: BTreeMap ;
77use toml:: value:: Table ;
8-
8+ use rand :: { distributions :: Alphanumeric , Rng } ;
99pub fn verify_jwt_token ( token_str : & str ) -> Result < BTreeMap < String , String > , jwt:: Error > {
1010 // config.toml, jwt_secret parameter
1111 let args = Args :: parse ( ) ;
@@ -48,3 +48,16 @@ pub fn generate_jwt_secret() {
4848 . collect ( ) ;
4949 println ! ( "jwt_secret=\" {}\" " , secret) ;
5050}
51+
52+ pub fn generate_jwt_token ( email : & str ) -> Result < String , jwt:: Error > {
53+ let args = Args :: parse ( ) ;
54+ let cfg_file = args. config_file ;
55+ let toml_cfg = std:: fs:: read_to_string ( & cfg_file) . unwrap ( ) ;
56+ let parsed_toml = toml_cfg. parse :: < Table > ( ) . unwrap ( ) ;
57+ let key_str = parsed_toml[ "jwt_secret" ] . as_str ( ) . unwrap ( ) ;
58+ let key: Hmac < Sha256 > = Hmac :: new_from_slice ( key_str. as_bytes ( ) ) ?;
59+ let mut claims = BTreeMap :: new ( ) ;
60+ claims. insert ( "email" . to_string ( ) , email. to_string ( ) ) ;
61+ let token_str = claims. sign_with_key ( & key) ?;
62+ Ok ( token_str)
63+ }
You can’t perform that action at this time.
0 commit comments