public-appservice 0.2.0

An appservice to make Matrix spaces publicly accessible.
Documentation
use regex::Regex;
use once_cell::sync::Lazy;

use ruma::{
    RoomId, 
    OwnedRoomId
};

pub fn room_id_valid(room_id: &str, server_name: &str) -> Result<OwnedRoomId, anyhow::Error> {

    let parsed_id = RoomId::parse(room_id)?;

    if let Some(domain) = parsed_id.server_name() {
        if domain != server_name {
            return Err(anyhow::anyhow!("Room ID does not match server name"));
        }
    }

    Ok(parsed_id)

}

static SLUG_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(r"[^a-zA-Z0-9]+").unwrap());


pub fn slugify(s: &str) -> String {
    SLUG_REGEX.replace_all(s, "-").to_string().to_lowercase()
}

pub fn room_alias_like(alias: &str) -> bool {
    let parts: Vec<&str> = alias.split(':').collect();
    parts.len() == 2 && !parts[0].is_empty() && !parts[1].is_empty()
}