Add some basic commands for sysadmins and permission system for them

This commit is contained in:
NG (Graham) committed 2025-10-31 21:02:10 -04:00
1 parent 77b6d8c11f
commit 3ef1aa20d0
13 files changed
+290 -29

No files matched your search

+4
View File
@@ -18,6 +18,10 @@ impl super::CommonUser for UserData {
self.perms.developer
}
fn is_royal(&self) -> bool {
self.perms.royalty
}
fn is_banned(&self) -> bool {
self.perms.banned
}
+20
View File
@@ -65,23 +65,38 @@ impl super::IntercomUser for super::account_json::UserData {
let data = IntercomWebServiceMessage {
public_ids: to,
data: IntercomWebServiceUserMessage::DevMessage(msg),
everyone: false,
};
if let Err(e) = self.post_to_intercom(&data, ".oj_services", "messages").await {
log::error!("Failed to send intercom dev message: {}", e);
}
}
async fn enter_maintenance(&self, msg: IntercomMaintenanceMessage, to: Vec<String>) {
let send_to_everyone = to.is_empty();
let data = IntercomWebServiceMessage {
public_ids: to,
data: IntercomWebServiceUserMessage::Maintenance(msg),
everyone: send_to_everyone,
};
if let Err(e) = self.post_to_intercom(&data, ".oj_services", "messages").await {
log::error!("Failed to send intercom maintenance mode message: {}", e);
}
}
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct IntercomWebServiceMessage {
pub public_ids: Vec<String>,
pub data: IntercomWebServiceUserMessage,
pub everyone: bool,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(tag = "type")]
pub enum IntercomWebServiceUserMessage {
DevMessage(IntercomDevMessage),
Maintenance(IntercomMaintenanceMessage),
}
#[derive(Serialize, Deserialize, Clone, Debug)]
@@ -90,6 +105,11 @@ pub struct IntercomDevMessage {
pub duration: u32,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct IntercomMaintenanceMessage {
pub message: String,
}
pub fn generate_token(salt: &[u8], key: &[u8]) -> String {
use sha2::{Digest, Sha512};
let mut hasher = Sha512::new();
+2
View File
@@ -338,6 +338,7 @@ pub trait IntercomUser {
async fn save_custom_avatar(&self, image: Vec<u8>) -> Result<(), polariton_server::operations::SimpleOpError>;
async fn webservice_listener(&self) -> Result<IntercomListener<super::intercom::IntercomWebServiceUserMessage>, polariton_server::operations::SimpleOpError>;
async fn show_dev_message(&self, msg: super::intercom::IntercomDevMessage, to: Vec<String>);
async fn enter_maintenance(&self, msg: super::intercom::IntercomMaintenanceMessage, to: Vec<String>);
}
pub struct IntercomListener<D: serde::de::DeserializeOwned> {
@@ -373,5 +374,6 @@ pub trait CommonUser: Send + Sync {
fn is_mod(&self) -> bool;
fn is_admin(&self) -> bool;
fn is_dev(&self) -> bool;
fn is_royal(&self) -> bool;
fn is_banned(&self) -> bool;
}