feat: close registration with ROCKET_REGISTRATION_DISABLED=true
parent
c85d363d71
commit
0067f49d52
|
@ -117,6 +117,14 @@ pub fn register_route(
|
||||||
db: State<'_, Database>,
|
db: State<'_, Database>,
|
||||||
body: Ruma<register::Request>,
|
body: Ruma<register::Request>,
|
||||||
) -> MatrixResult<register::Response, UiaaResponse> {
|
) -> MatrixResult<register::Response, UiaaResponse> {
|
||||||
|
if db.globals.registration_disabled() {
|
||||||
|
return MatrixResult(Err(UiaaResponse::MatrixError(Error {
|
||||||
|
kind: ErrorKind::Unknown,
|
||||||
|
message: "Registration has been disabled.".to_owned(),
|
||||||
|
status_code: http::StatusCode::FORBIDDEN,
|
||||||
|
})));
|
||||||
|
}
|
||||||
|
|
||||||
// Validate user id
|
// Validate user id
|
||||||
let user_id = match UserId::parse_with_server_name(
|
let user_id = match UserId::parse_with_server_name(
|
||||||
body.username
|
body.username
|
||||||
|
|
|
@ -7,6 +7,7 @@ pub(self) mod uiaa;
|
||||||
pub(self) mod users;
|
pub(self) mod users;
|
||||||
|
|
||||||
use directories::ProjectDirs;
|
use directories::ProjectDirs;
|
||||||
|
use log::info;
|
||||||
use std::fs::remove_dir_all;
|
use std::fs::remove_dir_all;
|
||||||
|
|
||||||
use rocket::Config;
|
use rocket::Config;
|
||||||
|
@ -49,13 +50,10 @@ impl Database {
|
||||||
});
|
});
|
||||||
|
|
||||||
let db = sled::open(&path).unwrap();
|
let db = sled::open(&path).unwrap();
|
||||||
log::info!("Opened sled database at {}", path);
|
info!("Opened sled database at {}", path);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
globals: globals::Globals::load(
|
globals: globals::Globals::load(db.open_tree("global").unwrap(), config),
|
||||||
db.open_tree("global").unwrap(),
|
|
||||||
server_name.to_owned(),
|
|
||||||
),
|
|
||||||
users: users::Users {
|
users: users::Users {
|
||||||
userid_password: db.open_tree("userid_password").unwrap(),
|
userid_password: db.open_tree("userid_password").unwrap(),
|
||||||
userid_displayname: db.open_tree("userid_displayname").unwrap(),
|
userid_displayname: db.open_tree("userid_displayname").unwrap(),
|
||||||
|
|
|
@ -4,13 +4,14 @@ pub const COUNTER: &str = "c";
|
||||||
|
|
||||||
pub struct Globals {
|
pub struct Globals {
|
||||||
pub(super) globals: sled::Tree,
|
pub(super) globals: sled::Tree,
|
||||||
server_name: String,
|
|
||||||
keypair: ruma::signatures::Ed25519KeyPair,
|
keypair: ruma::signatures::Ed25519KeyPair,
|
||||||
reqwest_client: reqwest::Client,
|
reqwest_client: reqwest::Client,
|
||||||
|
server_name: String,
|
||||||
|
registration_disabled: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Globals {
|
impl Globals {
|
||||||
pub fn load(globals: sled::Tree, server_name: String) -> Self {
|
pub fn load(globals: sled::Tree, config: &rocket::Config) -> Self {
|
||||||
let keypair = ruma::signatures::Ed25519KeyPair::new(
|
let keypair = ruma::signatures::Ed25519KeyPair::new(
|
||||||
&*globals
|
&*globals
|
||||||
.update_and_fetch("keypair", utils::generate_keypair)
|
.update_and_fetch("keypair", utils::generate_keypair)
|
||||||
|
@ -22,17 +23,16 @@ impl Globals {
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
globals,
|
globals,
|
||||||
server_name,
|
|
||||||
keypair,
|
keypair,
|
||||||
reqwest_client: reqwest::Client::new(),
|
reqwest_client: reqwest::Client::new(),
|
||||||
|
server_name: config
|
||||||
|
.get_str("server_name")
|
||||||
|
.unwrap_or("localhost")
|
||||||
|
.to_owned(),
|
||||||
|
registration_disabled: config.get_bool("registration_disabled").unwrap_or(false),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the server_name of the server.
|
|
||||||
pub fn server_name(&self) -> &str {
|
|
||||||
&self.server_name
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns this server's keypair.
|
/// Returns this server's keypair.
|
||||||
pub fn keypair(&self) -> &ruma::signatures::Ed25519KeyPair {
|
pub fn keypair(&self) -> &ruma::signatures::Ed25519KeyPair {
|
||||||
&self.keypair
|
&self.keypair
|
||||||
|
@ -58,4 +58,12 @@ impl Globals {
|
||||||
.get(COUNTER)?
|
.get(COUNTER)?
|
||||||
.map_or(0_u64, |bytes| utils::u64_from_bytes(&bytes)))
|
.map_or(0_u64, |bytes| utils::u64_from_bytes(&bytes)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn server_name(&self) -> &str {
|
||||||
|
&self.server_name
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn registration_disabled(&self) -> bool {
|
||||||
|
self.registration_disabled
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue