diff --git a/web/src/lib.rs b/web/src/lib.rs index a0b5cf6..54631cd 100644 --- a/web/src/lib.rs +++ b/web/src/lib.rs @@ -72,10 +72,14 @@ pub async fn initialize( db_pool: Pool, ) -> Result<(), Box> { info!("Checking environment variables..."); - env::var("OAUTH2_CLIENT_ID").expect("`OAUTH2_CLIENT_ID' not supplied"); - env::var("OAUTH2_CLIENT_SECRET").expect("`OAUTH2_CLIENT_SECRET' not supplied"); - env::var("OAUTH2_DISCORD_CALLBACK").expect("`OAUTH2_DISCORD_CALLBACK' not supplied"); - env::var("PATREON_GUILD_ID").expect("`PATREON_GUILD_ID' not supplied"); + + if env::var("OFFLINE").map_or(true, |v| v != "1") { + env::var("OAUTH2_CLIENT_ID").expect("`OAUTH2_CLIENT_ID' not supplied"); + env::var("OAUTH2_CLIENT_SECRET").expect("`OAUTH2_CLIENT_SECRET' not supplied"); + env::var("OAUTH2_DISCORD_CALLBACK").expect("`OAUTH2_DISCORD_CALLBACK' not supplied"); + env::var("PATREON_GUILD_ID").expect("`PATREON_GUILD_ID' not supplied"); + } + info!("Done!"); let oauth2_client = BasicClient::new( @@ -185,6 +189,8 @@ pub async fn initialize( } pub async fn check_subscription(cache_http: impl CacheHttp, user_id: impl Into) -> bool { + offline!(true); + if let Some(subscription_guild) = *CNC_GUILD { let guild_member = GuildId(subscription_guild).member(cache_http, user_id).await; @@ -206,6 +212,8 @@ pub async fn check_guild_subscription( cache_http: impl CacheHttp, guild_id: impl Into, ) -> bool { + offline!(true); + if let Some(guild) = cache_http.cache().unwrap().guild(guild_id) { let owner = guild.owner_id; diff --git a/web/src/macros.rs b/web/src/macros.rs index b16cc4f..aed2dcf 100644 --- a/web/src/macros.rs +++ b/web/src/macros.rs @@ -1,3 +1,11 @@ +macro_rules! offline { + ($field:expr) => { + if std::env::var("OFFLINE").map_or(false, |v| v == "1") { + return $field; + } + }; +} + macro_rules! check_length { ($max:ident, $field:expr) => { if $field.len() > $max { @@ -52,43 +60,45 @@ macro_rules! check_authorization { let user_id = $cookies.get_private("userid").map(|c| c.value().parse::().ok()).flatten(); - match user_id { - Some(user_id) => { - match GuildId($guild).to_guild_cached($ctx) { - Some(guild) => { - let member_res = guild.member($ctx, UserId(user_id)).await; + if std::env::var("OFFLINE").map_or(true, |v| v != "1") { + match user_id { + Some(user_id) => { + match GuildId($guild).to_guild_cached($ctx) { + Some(guild) => { + let member_res = guild.member($ctx, UserId(user_id)).await; - match member_res { - Err(_) => { - return Err(json!({"error": "User not in guild"})); - } + match member_res { + Err(_) => { + return Err(json!({"error": "User not in guild"})); + } - Ok(member) => { - let permissions_res = member.permissions($ctx); + Ok(member) => { + let permissions_res = member.permissions($ctx); - match permissions_res { - Err(_) => { - return Err(json!({"error": "Couldn't fetch permissions"})); - } + match permissions_res { + Err(_) => { + return Err(json!({"error": "Couldn't fetch permissions"})); + } - Ok(permissions) => { - if !(permissions.manage_messages() || permissions.manage_guild() || permissions.administrator()) { - return Err(json!({"error": "Incorrect permissions"})); + Ok(permissions) => { + if !(permissions.manage_messages() || permissions.manage_guild() || permissions.administrator()) { + return Err(json!({"error": "Incorrect permissions"})); + } } } } } } - } - None => { - return Err(json!({"error": "Bot not in guild"})); + None => { + return Err(json!({"error": "Bot not in guild"})); + } } } - } - None => { - return Err(json!({"error": "User not authorized"})); + None => { + return Err(json!({"error": "User not authorized"})); + } } } } diff --git a/web/src/routes/dashboard/guild.rs b/web/src/routes/dashboard/guild.rs index 817cee7..1f89aca 100644 --- a/web/src/routes/dashboard/guild.rs +++ b/web/src/routes/dashboard/guild.rs @@ -46,6 +46,7 @@ pub async fn get_guild_patreon( cookies: &CookieJar<'_>, ctx: &State, ) -> JsonResult { + offline!(Ok(json!({ "patreon": true }))); check_authorization!(cookies, ctx.inner(), id); match GuildId(id).to_guild_cached(ctx.inner()) { @@ -73,6 +74,12 @@ pub async fn get_guild_channels( cookies: &CookieJar<'_>, ctx: &State, ) -> JsonResult { + offline!(Ok(json!(vec![ChannelInfo { + name: "general".to_string(), + id: "1".to_string(), + webhook_avatar: None, + webhook_name: None, + }]))); check_authorization!(cookies, ctx.inner(), id); match GuildId(id).to_guild_cached(ctx.inner()) { @@ -111,6 +118,7 @@ struct RoleInfo { #[get("/api/guild//roles")] pub async fn get_guild_roles(id: u64, cookies: &CookieJar<'_>, ctx: &State) -> JsonResult { + offline!(Ok(json!(vec![RoleInfo { name: "@everyone".to_string(), id: "1".to_string() }]))); check_authorization!(cookies, ctx.inner(), id); let roles_res = ctx.cache.guild_roles(id); diff --git a/web/src/routes/dashboard/user.rs b/web/src/routes/dashboard/user.rs index 6cd7013..454756a 100644 --- a/web/src/routes/dashboard/user.rs +++ b/web/src/routes/dashboard/user.rs @@ -54,6 +54,8 @@ pub async fn get_user_info( ctx: &State, pool: &State>, ) -> JsonValue { + offline!(json!(UserInfo { name: "Discord".to_string(), patreon: true, timezone: None })); + if let Some(user_id) = cookies.get_private("userid").map(|u| u.value().parse::().ok()).flatten() { @@ -116,6 +118,8 @@ pub async fn update_user_info( #[get("/api/user/guilds")] pub async fn get_user_guilds(cookies: &CookieJar<'_>, reqwest_client: &State) -> JsonValue { + offline!(json!(vec![GuildInfo { id: "1".to_string(), name: "Guild".to_string() }])); + if let Some(access_token) = cookies.get_private("access_token") { let request_res = reqwest_client .get(format!("{}/users/@me/guilds", DISCORD_API)) diff --git a/web/static/css/style.css b/web/static/css/style.css index 038c5a7..b736def 100644 --- a/web/static/css/style.css +++ b/web/static/css/style.css @@ -249,7 +249,7 @@ div#pageNavbar a { .navbar-item.pageTitle { flex-shrink: 1; - text-wrap: nowrap; + white-space: nowrap; overflow: hidden; } @@ -644,9 +644,11 @@ li.highlight { } p.title.pageTitle { - visibility: hidden; - text-wrap: nowrap; - overflow: hidden; + display: none; + } + + .dashboard-frame { + margin-top: 4rem !important; } } @@ -665,6 +667,7 @@ li.highlight { /* loader */ #loader { position: fixed; + top: 0; background-color: rgba(255, 255, 255, 0.8); width: 100vw; z-index: 999; @@ -762,5 +765,5 @@ a.switch-pane { } .figure-num { - font-size: 2em; + font-size: 2rem; }