diff --git a/public/assets/icons/gd/coin.png b/public/assets/icons/gd/coin.png new file mode 100644 index 0000000..c6ab23f Binary files /dev/null and b/public/assets/icons/gd/coin.png differ diff --git a/public/assets/icons/gd/demon.png b/public/assets/icons/gd/demon.png new file mode 100644 index 0000000..b6e46bc Binary files /dev/null and b/public/assets/icons/gd/demon.png differ diff --git a/public/assets/icons/gd/diamond.png b/public/assets/icons/gd/diamond.png new file mode 100644 index 0000000..10b8a59 Binary files /dev/null and b/public/assets/icons/gd/diamond.png differ diff --git a/public/assets/icons/gd/silvercoin.png b/public/assets/icons/gd/silvercoin.png new file mode 100644 index 0000000..8c905ce Binary files /dev/null and b/public/assets/icons/gd/silvercoin.png differ diff --git a/public/assets/icons/gd/star.png b/public/assets/icons/gd/star.png new file mode 100644 index 0000000..59bc2b1 Binary files /dev/null and b/public/assets/icons/gd/star.png differ diff --git a/public/favicon.png b/public/favicon.png index 9b562aa..ea828db 100644 Binary files a/public/favicon.png and b/public/favicon.png differ diff --git a/public/style.css b/public/style.css index bee5c97..2b07298 100644 --- a/public/style.css +++ b/public/style.css @@ -54,6 +54,10 @@ a { color: #a6e3a1; } +.dim { + color: #a6adc8; +} + .fancy-button { outline: 0; border: none; @@ -67,4 +71,106 @@ a { cursor: pointer; transition: 0.1s background-color; +} + +.fancy-button:hover { + background-color: #bad4fc; +} + +.inline-post { + display: inline; +} + +.inline-post-button { + display: inline; + background: none; + outline: none; + border: none; + color: inherit; + font-size: inherit; + font-weight: inherit; + text-decoration: underline; + cursor: pointer; + padding: 0; +} + +.greeting ::selection { + background-color: #11111b; + color: #cdd6f4; +} + +.greeting { + background-color: #89b4fa; + color: #11111b; + border-radius: 1.5em; + padding: 1em; + + display: flex; + flex-direction: row; + gap: 1rem; +} + +.greeting-l { + flex: 0 0 auto; + max-width: 100%; + width: auto; + height: 100%; + max-height: 3rem; + object-fit: contain; + display: block; +} + +.greeting-r { + flex: 1 1 0px; + min-width: 0; + + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.greeting-top { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; +} + +.greeting-top-left { + font-size: 1.4rem; +} + +.greeting-stats { + display: flex; + flex-direction: row; + align-items: stretch; + gap: 0.5ex; +} + +.greeting-stats img { + width: auto; + height: 1em; +} + +.greeting a { + color: #11111b; +} + + +.header { + height: 96px; + max-width: 600px; + display: flex; + flex-direction: row; + align-items: center; + width: 100%; +} + +.header>.greeting { + flex: 1 1 0px; +} + +.favicon { + margin: auto; + display: block; } \ No newline at end of file diff --git a/readme.md b/readme.md index 26357f7..5858791 100644 --- a/readme.md +++ b/readme.md @@ -39,4 +39,6 @@ i've run out of ideas. - better song support - authentication caching (ip? redis?) - use log instead of println -- make a proper rank system (reuploading, uploading music, rating, etc.) \ No newline at end of file +- make a proper rank system (reuploading, uploading music, rating, etc.) +- user icons in the account management + settings (gdicon.oat.zone? selfhost?) +- account settings page \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index a0455ca..dcf71dc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,7 +58,9 @@ fn rocket() -> _ { template_endpoints::login::post_login, template_endpoints::login::get_login, - template_endpoints::logout::logout, + template_endpoints::account_management::account_management, + + template_endpoints::logout::logout ]) // assets .mount("/", routes![ diff --git a/src/template_endpoints.rs b/src/template_endpoints.rs index 89eada7..9c42b0e 100644 --- a/src/template_endpoints.rs +++ b/src/template_endpoints.rs @@ -1,3 +1,4 @@ +pub mod account_management; pub mod index; pub mod login; pub mod logout; diff --git a/src/template_endpoints/account_management.rs b/src/template_endpoints/account_management.rs new file mode 100644 index 0000000..01d2fc4 --- /dev/null +++ b/src/template_endpoints/account_management.rs @@ -0,0 +1,37 @@ +use rocket::response::Redirect; + +use rocket_dyn_templates::{Template, context}; + +use rocket::http::CookieJar; + +use diesel::prelude::*; + +use crate::db; + +#[get("/accounts")] +pub fn account_management(cookies: &CookieJar<'_>) -> Result { + let connection = &mut db::establish_connection_pg(); + + let (logged_in, username_val, _account_id_val, user_id_val) = crate::helpers::templates::auth!(cookies); + + if logged_in { + use crate::schema::users::dsl::*; + use crate::models::User; + + let result = users + .filter(id.eq(user_id_val.expect("user_id not found"))) + .get_result::(connection) + .expect("couldnt find user with user id from account"); + + return Ok(Template::render("account_management", context! { + username: username_val.expect("username not found"), + stars: result.stars, + diamonds: result.diamonds, + coins: result.coins, + user_coins: result.user_coins, + demons: result.demons + })); + } else { + return Err(Redirect::to("/login")); + } +} \ No newline at end of file diff --git a/src/template_endpoints/index.rs b/src/template_endpoints/index.rs index 16fbe81..47006e4 100644 --- a/src/template_endpoints/index.rs +++ b/src/template_endpoints/index.rs @@ -7,7 +7,7 @@ pub fn index() -> Template { let silly_strings: Vec<&str> = vec![ "the trianges consume", "geomtry das", - "now with no RCE!", + "now with no ACE!", "the best gdps", "better than topala", "better than robtop", @@ -17,7 +17,21 @@ pub fn index() -> Template { "kagepro", "wowaka is peak music", "you have been warned: dyno jun", - "listen to jin" + "listen to jin", + "GIVEUP!GIVEUP!GIVEUP!GIVEUP!GIVEUP!GIVEUP!LOVE!LOVE!GIVEUP!GIVEUP!GIVEUP!GIVEUP!GIVEUP!GIVEUP!", + "cross site scripting is a myth", + "VITAL STATE: Deceased - abducted by Pikmin", + "geometry dash for the 3ds", + "trans rights", + "how many maggots eat burger?", + "who would win: the rust borrow checker or rotting flesh", + "your system has run out of application memory", + "unsafe { std::ptr::null_mut::().write(42) }", + "-1", + "[REDACTED]", + "chrome jop jop?", + "pikmin 4", + "italian apk downloader" ]; let mut rng = rand::thread_rng(); diff --git a/src/template_endpoints/login.rs b/src/template_endpoints/login.rs index 96855e8..8163bc1 100644 --- a/src/template_endpoints/login.rs +++ b/src/template_endpoints/login.rs @@ -20,7 +20,7 @@ pub struct FormLogin { } #[post("/login", data = "")] -pub fn post_login(jar: &CookieJar<'_>, input: Form) -> Template { +pub fn post_login(cookies: &CookieJar<'_>, input: Form) -> Template { let connection = &mut db::establish_connection_pg(); use crate::schema::accounts::dsl::*; @@ -34,15 +34,15 @@ pub fn post_login(jar: &CookieJar<'_>, input: Form) -> Template { Ok(account_id_username_val) => { match helpers::accounts::auth(account_id_username_val.0, Some(input.password.clone()), None, None) { Ok(account_id_user_id_val) => { - jar.add_private(Cookie::build( + cookies.add_private(Cookie::build( "blackmail_data", format!("{}:{}:{}", account_id_username_val.1, account_id_user_id_val.0, account_id_user_id_val.1)) - .path("/") - // should probably make this true when we get into production - .secure(false) - .http_only(true) - .max_age(Duration::days(365)) - .finish()); + .path("/") + // should probably make this true when we get into production + .secure(false) + .http_only(true) + .max_age(Duration::days(365)) + .finish()); return Template::render("login", context! { success: "Successfully logged in" diff --git a/src/template_endpoints/logout.rs b/src/template_endpoints/logout.rs index 83b0a28..99566e6 100644 --- a/src/template_endpoints/logout.rs +++ b/src/template_endpoints/logout.rs @@ -3,9 +3,7 @@ use rocket::response::Redirect; #[post("/accounts/logout")] pub fn logout(jar: &CookieJar<'_>) -> Redirect { - jar.remove_private(Cookie::named("username")); - jar.remove_private(Cookie::named("account_id")); - jar.remove_private(Cookie::named("user_id")); + jar.remove_private(Cookie::named("blackmail_data")); Redirect::to("/") } \ No newline at end of file diff --git a/templates/account_header.html.hbs b/templates/account_header.html.hbs new file mode 100644 index 0000000..ee6e4d0 --- /dev/null +++ b/templates/account_header.html.hbs @@ -0,0 +1,23 @@ +
+
+ +
+
+
+ hai, {{ username }}! +
+
+ {{ stars }} {{ diamonds }} {{ coins }} {{ user_coins }} {{ demons }} +
+
+
+ Settings · +
+ +
+
+
+
+
\ No newline at end of file diff --git a/templates/account_management.html.hbs b/templates/account_management.html.hbs new file mode 100644 index 0000000..35aa150 --- /dev/null +++ b/templates/account_management.html.hbs @@ -0,0 +1,49 @@ + + + + + + + + + Home + + + +

+ + Account Management +

+
+
+ +
+
+
+ hai, {{ username }}! +
+
+ {{ stars }} {{ diamonds }} {{ coins }} {{ user_coins }} {{ demons }} +
+
+
+ Settings · +
+ +
+
+
+
+
+
+ lorem ipsum sur dolor amet or something. i'll put stuff here later LOL +

+ anyway how has ur day been +

+ the demon should be your user icon haha, ill get 2 that latr :3 (gonna be next update i think) +
+ + + \ No newline at end of file diff --git a/templates/index.html.hbs b/templates/index.html.hbs index 612426d..0eaf129 100644 --- a/templates/index.html.hbs +++ b/templates/index.html.hbs @@ -11,7 +11,7 @@

- + gdps-server

@@ -24,10 +24,11 @@
  • The Git repository
  • Level reuploading
  • +
  • Account stuff
  • -
    +
    {{ silly_string }}
    diff --git a/templates/login.html.hbs b/templates/login.html.hbs index 127901b..94c9fe5 100644 --- a/templates/login.html.hbs +++ b/templates/login.html.hbs @@ -34,7 +34,7 @@
    - +