]> Untitled Git - lemmy.git/blob - server/src/api/claims.rs
f475f1dfe763d4a8d8aa4bf5cdbeae78308c7118
[lemmy.git] / server / src / api / claims.rs
1 use jsonwebtoken::{decode, encode, DecodingKey, EncodingKey, Header, TokenData, Validation};
2 use lemmy_db::user::User_;
3 use lemmy_utils::settings::Settings;
4 use serde::{Deserialize, Serialize};
5
6 type Jwt = String;
7
8 #[derive(Debug, Serialize, Deserialize)]
9 pub struct Claims {
10   pub id: i32,
11   pub iss: String,
12 }
13
14 impl Claims {
15   pub fn decode(jwt: &str) -> Result<TokenData<Claims>, jsonwebtoken::errors::Error> {
16     let v = Validation {
17       validate_exp: false,
18       ..Validation::default()
19     };
20     decode::<Claims>(
21       &jwt,
22       &DecodingKey::from_secret(Settings::get().jwt_secret.as_ref()),
23       &v,
24     )
25   }
26
27   pub fn jwt(user: User_, hostname: String) -> Result<Jwt, jsonwebtoken::errors::Error> {
28     let my_claims = Claims {
29       id: user.id,
30       iss: hostname,
31     };
32     encode(
33       &Header::default(),
34       &my_claims,
35       &EncodingKey::from_secret(Settings::get().jwt_secret.as_ref()),
36     )
37   }
38 }