Geoffrey-rs/geoffrey_api/src/commands/add_token.rs

55 lines
1.3 KiB
Rust

use std::sync::Arc;
use rand::distributions::Alphanumeric;
use rand::Rng;
use geoffrey_models::models::parameters::add_token_params::AddTokenParams;
use geoffrey_models::models::player::Player;
use geoffrey_models::models::response::api_error::GeoffreyAPIError;
use geoffrey_models::models::token::Token;
use geoffrey_models::models::CommandLevel;
use crate::api_endpoint::{ApiEndpoint, RequestType};
use crate::commands::Command;
use crate::context::Context;
use crate::Result;
pub struct AddToken {}
impl ApiEndpoint for AddToken {
fn endpoint_name() -> String {
"add_token".to_string()
}
fn request_type() -> RequestType {
RequestType::POST
}
}
impl Command for AddToken {
type Req = AddTokenParams;
type Resp = Token;
fn command_level() -> CommandLevel {
CommandLevel::ADMIN
}
fn run_command(ctx: Arc<Context>, req: &Self::Req, _: Option<Player>) -> Result<Self::Resp> {
let mut token = Token::default();
let secret: String = rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(64)
.map(char::from)
.collect();
token.secret = secret;
for permission in &req.permissions {
token.set_permission(*permission);
}
ctx.db.insert(token).map_err(GeoffreyAPIError::from)
}
}