properly set user guilds/permissions with first time setup
parent
66ea9ac2fa
commit
c07ac7ceac
|
@ -54,6 +54,7 @@ impl Database {
|
||||||
|
|
||||||
// NOTE(pcleavelin): for some reason this needs to be a let-binding or else
|
// NOTE(pcleavelin): for some reason this needs to be a let-binding or else
|
||||||
// the compiler complains about it being dropped too early (maybe I should update the compiler version)
|
// the compiler complains about it being dropped too early (maybe I should update the compiler version)
|
||||||
|
#[allow(clippy::useless_conversion)]
|
||||||
let guilds = query
|
let guilds = query
|
||||||
.query_map([], |row| {
|
.query_map([], |row| {
|
||||||
Ok(Guild {
|
Ok(Guild {
|
||||||
|
@ -68,6 +69,18 @@ impl Database {
|
||||||
guilds
|
guilds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn get_user_count(&self) -> Result<i64> {
|
||||||
|
self.conn.query_row(
|
||||||
|
"
|
||||||
|
SELECT
|
||||||
|
COUNT(username)
|
||||||
|
FROM User
|
||||||
|
",
|
||||||
|
[],
|
||||||
|
|row| row.get(0),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn get_user_from_api_key(&self, api_key: &str) -> Result<User> {
|
pub(crate) fn get_user_from_api_key(&self, api_key: &str) -> Result<User> {
|
||||||
self.conn.query_row(
|
self.conn.query_row(
|
||||||
"
|
"
|
||||||
|
|
|
@ -46,12 +46,7 @@ pub(crate) async fn home(
|
||||||
Redirect::to(&format!("{}/login", state.origin))
|
Redirect::to(&format!("{}/login", state.origin))
|
||||||
})?;
|
})?;
|
||||||
tracing::info!("user name: {}", user.name);
|
tracing::info!("user name: {}", user.name);
|
||||||
let user_app_permissions = db.get_user_app_permissions(&user.name).map_err(|err| {
|
let user_app_permissions = db.get_user_app_permissions(&user.name).unwrap_or_default();
|
||||||
error!(?err, "failed to get user app permissions");
|
|
||||||
// TODO: change this to returning a error to the client
|
|
||||||
Redirect::to(&format!("{}/error", state.origin))
|
|
||||||
})?;
|
|
||||||
|
|
||||||
let can_add_guild = user_app_permissions.can(auth::AppPermission::AddGuild);
|
let can_add_guild = user_app_permissions.can(auth::AppPermission::AddGuild);
|
||||||
|
|
||||||
let client = reqwest::Client::new();
|
let client = reqwest::Client::new();
|
||||||
|
|
|
@ -174,7 +174,7 @@ pub(crate) async fn v2_auth(
|
||||||
.map_err(|err| Error::Auth(err.to_string()))?;
|
.map_err(|err| Error::Auth(err.to_string()))?;
|
||||||
|
|
||||||
let db = state.db.lock().await;
|
let db = state.db.lock().await;
|
||||||
let needs_setup = db.get_guilds().map_err(Error::Database)?.is_empty();
|
let needs_setup = db.get_user_count().map_err(Error::Database)? == 0;
|
||||||
let token = if let Some(user) = db
|
let token = if let Some(user) = db
|
||||||
.get_user(&user.username)
|
.get_user(&user.username)
|
||||||
.map_err(Error::Database)?
|
.map_err(Error::Database)?
|
||||||
|
@ -201,19 +201,21 @@ pub(crate) async fn v2_auth(
|
||||||
auth::AppPermissions(auth::AppPermission::all()),
|
auth::AppPermissions(auth::AppPermission::all()),
|
||||||
)
|
)
|
||||||
.map_err(Error::Database)?;
|
.map_err(Error::Database)?;
|
||||||
} else {
|
}
|
||||||
let guilds = db.get_guilds().map_err(Error::Database)?;
|
|
||||||
let mut in_a_guild = false;
|
|
||||||
for guild in guilds {
|
|
||||||
let Some(discord_guild) = discord_guilds
|
|
||||||
.iter()
|
|
||||||
.find(|discord_guild| discord_guild.id == guild.id)
|
|
||||||
else {
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
|
|
||||||
in_a_guild = true;
|
let guilds = db.get_guilds().map_err(Error::Database)?;
|
||||||
|
let mut in_a_guild = false;
|
||||||
|
for guild in guilds {
|
||||||
|
let Some(discord_guild) = discord_guilds
|
||||||
|
.iter()
|
||||||
|
.find(|discord_guild| discord_guild.id == guild.id)
|
||||||
|
else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
|
in_a_guild = true;
|
||||||
|
|
||||||
|
if !needs_setup {
|
||||||
let now = Utc::now().naive_utc();
|
let now = Utc::now().naive_utc();
|
||||||
db.insert_user(
|
db.insert_user(
|
||||||
&user.username,
|
&user.username,
|
||||||
|
@ -223,27 +225,27 @@ pub(crate) async fn v2_auth(
|
||||||
now + Duration::seconds(auth.expires_in as i64),
|
now + Duration::seconds(auth.expires_in as i64),
|
||||||
)
|
)
|
||||||
.map_err(Error::Database)?;
|
.map_err(Error::Database)?;
|
||||||
|
|
||||||
db.insert_user_guild(&user.username, guild.id)
|
|
||||||
.map_err(Error::Database)?;
|
|
||||||
|
|
||||||
if db.get_user_permissions(&user.username, guild.id).is_err() {
|
|
||||||
db.insert_user_permission(
|
|
||||||
&user.username,
|
|
||||||
guild.id,
|
|
||||||
if discord_guild.owner {
|
|
||||||
auth::Permissions(auth::Permission::all())
|
|
||||||
} else {
|
|
||||||
Default::default()
|
|
||||||
},
|
|
||||||
)
|
|
||||||
.map_err(Error::Database)?;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if !in_a_guild {
|
|
||||||
return Err(Error::NoGuildFound);
|
db.insert_user_guild(&user.username, guild.id)
|
||||||
|
.map_err(Error::Database)?;
|
||||||
|
|
||||||
|
if db.get_user_permissions(&user.username, guild.id).is_err() {
|
||||||
|
db.insert_user_permission(
|
||||||
|
&user.username,
|
||||||
|
guild.id,
|
||||||
|
if discord_guild.owner {
|
||||||
|
auth::Permissions(auth::Permission::all())
|
||||||
|
} else {
|
||||||
|
Default::default()
|
||||||
|
},
|
||||||
|
)
|
||||||
|
.map_err(Error::Database)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !in_a_guild {
|
||||||
|
return Err(Error::NoGuildFound);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: add permissions based on roles
|
// TODO: add permissions based on roles
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue