49 lines
1.2 KiB
Rust
49 lines
1.2 KiB
Rust
use crate::commands::{Command, RequestType};
|
|
use crate::context::Context;
|
|
use crate::Result;
|
|
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 rand::distributions::Alphanumeric;
|
|
use rand::Rng;
|
|
use std::sync::Arc;
|
|
|
|
pub struct AddToken {}
|
|
|
|
impl Command for AddToken {
|
|
type Req = AddTokenParams;
|
|
type Resp = Token;
|
|
|
|
fn command_name() -> String {
|
|
"add_token".to_string()
|
|
}
|
|
|
|
fn request_type() -> RequestType {
|
|
RequestType::POST
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|