add command to set the allow registration status
Co-Authored-By: Matthias Ahouansou <matthias@ahouansou.cz>
This commit is contained in:
parent
817f382c5f
commit
6bcc2f80b8
3 changed files with 33 additions and 3 deletions
|
@ -75,7 +75,7 @@ pub async fn get_register_available_route(
|
||||||
/// - Creates a new account and populates it with default account data
|
/// - Creates a new account and populates it with default account data
|
||||||
/// - If `inhibit_login` is false: Creates a device and returns device id and access_token
|
/// - If `inhibit_login` is false: Creates a device and returns device id and access_token
|
||||||
pub async fn register_route(body: Ruma<register::v3::Request>) -> Result<register::v3::Response> {
|
pub async fn register_route(body: Ruma<register::v3::Request>) -> Result<register::v3::Response> {
|
||||||
if !services().globals.allow_registration() && body.appservice_info.is_none() {
|
if !services().globals.allow_registration().await && body.appservice_info.is_none() {
|
||||||
return Err(Error::BadRequest(
|
return Err(Error::BadRequest(
|
||||||
ErrorKind::Forbidden,
|
ErrorKind::Forbidden,
|
||||||
"Registration has been disabled.",
|
"Registration has been disabled.",
|
||||||
|
|
|
@ -160,6 +160,9 @@ enum AdminCommand {
|
||||||
password: Option<String>,
|
password: Option<String>,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// Temporarily toggle user registration by passing either true or false as an argument, does not persist between restarts
|
||||||
|
AllowRegistration { status: Option<bool> },
|
||||||
|
|
||||||
/// Disables incoming federation handling for a room.
|
/// Disables incoming federation handling for a room.
|
||||||
DisableRoom { room_id: Box<RoomId> },
|
DisableRoom { room_id: Box<RoomId> },
|
||||||
/// Enables incoming federation handling for a room again.
|
/// Enables incoming federation handling for a room again.
|
||||||
|
@ -656,6 +659,24 @@ impl Service {
|
||||||
"Created user with user_id: {user_id} and password: {password}"
|
"Created user with user_id: {user_id} and password: {password}"
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
AdminCommand::AllowRegistration { status } => {
|
||||||
|
if let Some(status) = status {
|
||||||
|
services().globals.set_registration(status).await;
|
||||||
|
RoomMessageEventContent::text_plain(if status {
|
||||||
|
"Registration is now enabled"
|
||||||
|
} else {
|
||||||
|
"Registration is now disabled"
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
RoomMessageEventContent::text_plain(
|
||||||
|
if services().globals.allow_registration().await {
|
||||||
|
"Registration is currently enabled"
|
||||||
|
} else {
|
||||||
|
"Registration is currently disabled"
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
AdminCommand::DisableRoom { room_id } => {
|
AdminCommand::DisableRoom { room_id } => {
|
||||||
services().rooms.metadata.disable_room(&room_id, true)?;
|
services().rooms.metadata.disable_room(&room_id, true)?;
|
||||||
RoomMessageEventContent::text_plain("Room disabled.")
|
RoomMessageEventContent::text_plain("Room disabled.")
|
||||||
|
|
|
@ -55,6 +55,7 @@ pub struct Service {
|
||||||
pub actual_destination_cache: Arc<RwLock<WellKnownMap>>, // actual_destination, host
|
pub actual_destination_cache: Arc<RwLock<WellKnownMap>>, // actual_destination, host
|
||||||
pub tls_name_override: Arc<StdRwLock<TlsNameMap>>,
|
pub tls_name_override: Arc<StdRwLock<TlsNameMap>>,
|
||||||
pub config: Config,
|
pub config: Config,
|
||||||
|
allow_registration: RwLock<bool>,
|
||||||
keypair: Arc<ruma::signatures::Ed25519KeyPair>,
|
keypair: Arc<ruma::signatures::Ed25519KeyPair>,
|
||||||
dns_resolver: TokioAsyncResolver,
|
dns_resolver: TokioAsyncResolver,
|
||||||
jwt_decoding_key: Option<jsonwebtoken::DecodingKey>,
|
jwt_decoding_key: Option<jsonwebtoken::DecodingKey>,
|
||||||
|
@ -184,6 +185,7 @@ impl Service {
|
||||||
let unstable_room_versions = vec![RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5];
|
let unstable_room_versions = vec![RoomVersionId::V3, RoomVersionId::V4, RoomVersionId::V5];
|
||||||
|
|
||||||
let mut s = Self {
|
let mut s = Self {
|
||||||
|
allow_registration: RwLock::new(config.allow_registration),
|
||||||
db,
|
db,
|
||||||
config,
|
config,
|
||||||
keypair: Arc::new(keypair),
|
keypair: Arc::new(keypair),
|
||||||
|
@ -285,8 +287,15 @@ impl Service {
|
||||||
self.config.max_fetch_prev_events
|
self.config.max_fetch_prev_events
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn allow_registration(&self) -> bool {
|
/// Allows for the temporary (non-persistant) toggling of registration
|
||||||
self.config.allow_registration
|
pub async fn set_registration(&self, status: bool) {
|
||||||
|
let mut lock = self.allow_registration.write().await;
|
||||||
|
*lock = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Checks whether user registration is allowed
|
||||||
|
pub async fn allow_registration(&self) -> bool {
|
||||||
|
*self.allow_registration.read().await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn allow_encryption(&self) -> bool {
|
pub fn allow_encryption(&self) -> bool {
|
||||||
|
|
Loading…
Add table
Reference in a new issue