blob: 118c5698949e3d04d3c979f6e50b8e045afd341c [file]
// Copyright 2022 The casbin Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
use crate::model::user::LoginInfo;
use chrono::Utc;
use jsonwebtoken::{EncodingKey, Header};
use serde::{Deserialize, Serialize};
static THREE_HOUR: i64 = 60 * 60 * 3;
pub static KEY: [u8; 16] = *include_bytes!("../secret.key");
#[derive(Serialize, Deserialize)]
pub struct UserToken {
// issued at
pub iat: i64,
// expiration
pub exp: i64,
// userID
pub user_name: String,
pub role: String,
pub login_session: String,
}
impl UserToken {
pub fn generate_token(login: LoginInfo) -> String {
let now = Utc::now().timestamp_nanos() / 1_000_000_000;
let payload = UserToken {
iat: now,
exp: now + THREE_HOUR,
user_name: login.username,
role: login.role,
login_session: login.login_session,
};
jsonwebtoken::encode(
&Header::default(),
&payload,
&EncodingKey::from_secret(&KEY),
)
.unwrap()
}
}