Geoffrey-rs/geoffrey_models/src/models/token.rs

85 lines
1.8 KiB
Rust

use serde::{Deserialize, Serialize};
use chrono::{DateTime, Utc};
use crate::GeoffreyDatabaseModel;
pub enum Permissions {
ModelGet = 0,
ModelPost,
Command,
ModCommand,
Admin,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
struct Token {
pub id: Option<u64>,
permission: u64,
pub created: DateTime<Utc>,
pub modified: DateTime<Utc>
}
impl Token {
pub fn new() -> Self {
Self {
id: None,
permission: 0,
created: Utc::now(),
modified: Utc::now()
}
}
pub fn set_permission(&mut self, permission: Permissions) {
self.permission = self.permission | (1u64 << permission as u32);
}
pub fn clear_permission(&mut self, permission: Permissions) {
self.permission = self.permission & !(1u64 << permission as u32);
}
pub fn check_permission(&self, permission: Permissions) -> bool {
(self.permission >> permission as u32) & 0x1u64 == 0x1u64
}
pub fn clear_all_permission(&mut self) {
self.permission = 0x0u64;
}
}
impl GeoffreyDatabaseModel for Token {
fn id(&self) -> Option<u64> {
self.id
}
fn set_id(&mut self, id: u64) {
self.id = Some(id);
}
fn tree() -> String {
"token".to_string()
}
}
impl PartialEq for Token {
fn eq(&self, other: &Self) -> bool {
self.permission == other.permission
}
}
#[cfg(test)]
mod tests {
use crate::models::token::{Token, Permissions};
#[test]
fn test_token() {
let mut token = Token::new(0);
token.set_permission(Permissions::ModelGet);
assert_eq!(token.permission, 0x1u64);
token.set_permission(Permissions::ModelPost);
assert_eq!(token.permission, 0x3u64);
}
}