restrict nb of workspaces to 3 + number of oauth users to 50

This commit is contained in:
Ruben Fiszel
2023-09-14 08:48:17 +02:00
parent 3b0c55ca9f
commit c3fe8e93c8
5 changed files with 41 additions and 20 deletions
@@ -1,20 +0,0 @@
{
"db_name": "PostgreSQL",
"query": "SELECT COUNT(*) FROM group_ WHERE name != 'all' AND name != 'error_handler' AND name != 'slack'",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "count",
"type_info": "Int8"
}
],
"parameters": {
"Left": []
},
"nullable": [
null
]
},
"hash": "cec906e3bcfe5b477f23e8bb44500b97166c789ab1cf6487679d092eebf3a48b"
}
+2
View File
@@ -200,6 +200,7 @@ pub async fn require_is_owner(
}
}
#[cfg(not(feature = "enterprise"))]
async fn _check_nb_of_groups(db: &DB) -> Result<()> {
let nb_groups = sqlx::query_scalar!("SELECT COUNT(*) FROM group_ WHERE name != 'all' AND name != 'error_handler' AND name != 'slack'",)
.fetch_one(db)
@@ -212,6 +213,7 @@ async fn _check_nb_of_groups(db: &DB) -> Result<()> {
}
return Ok(());
}
async fn create_group(
authed: ApiAuthed,
Extension(_db): Extension<DB>,
+1
View File
@@ -341,6 +341,7 @@ struct CreateAccount {
refresh_token: Option<String>,
expires_in: i64,
}
async fn create_account(
authed: ApiAuthed,
Extension(user_db): Extension<UserDB>,
+19
View File
@@ -2240,6 +2240,21 @@ pub struct LoginUserInfo {
pub displayName: Option<String>,
}
#[cfg(not(feature = "enterprise"))]
async fn _check_nb_of_user(db: &DB) -> Result<()> {
let nb_groups =
sqlx::query_scalar!("SELECT COUNT(*) FROM password WHERE login_type != 'password'",)
.fetch_one(db)
.await?;
if nb_groups.unwrap_or(0) >= 50 {
return Err(Error::BadRequest(
"You have reached the maximum number of oauth users accounts (50) without an enterprise license"
.to_string(),
));
}
return Ok(());
}
pub async fn login_externally(
db: DB,
email: &String,
@@ -2292,6 +2307,10 @@ pub async fn login_externally(
if (name.is_none() || name == Some(String::new())) && user.is_some() {
name = user.clone().unwrap().displayName;
}
#[cfg(not(feature = "enterprise"))]
_check_nb_of_user(&db).await?;
sqlx::query(&format!(
"INSERT INTO password (email, name, company, login_type, verified) VALUES ($1, \
$2, $3, '{}', true)",
+19
View File
@@ -849,6 +849,21 @@ lazy_static::lazy_static! {
}
#[cfg(not(feature = "enterprise"))]
async fn _check_nb_of_workspaces(db: &DB) -> Result<()> {
let nb_workspaces = sqlx::query_scalar!("SELECT COUNT(*) FROM workspace WHERE id != 'admins' AND deleted = false",)
.fetch_one(db)
.await?;
if nb_workspaces.unwrap_or(0) >= 3 {
return Err(Error::BadRequest(
"You have reached the maximum number of workspaces (3 outside of default group 'admins') without an enterprise license. Archive/delete another workspace to create a new one"
.to_string(),
));
}
return Ok(());
}
async fn create_workspace(
authed: ApiAuthed,
Extension(db): Extension<DB>,
@@ -858,6 +873,10 @@ async fn create_workspace(
if *CREATE_WORKSPACE_REQUIRE_SUPERADMIN {
require_super_admin(&db, &authed.email).await?;
}
#[cfg(not(feature = "enterprise"))]
_check_nb_of_workspace(&db).await?;
let mut tx: Transaction<'_, Postgres> = db.begin().await?;
check_name_conflict(&mut tx, &nw.id).await?;