85 lines
1.8 KiB
Rust
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);
|
|
|
|
}
|
|
}
|
|
|