diff --git a/readme.md b/readme.md
index bf88c5a..901b43d 100644
--- a/readme.md
+++ b/readme.md
@@ -39,4 +39,4 @@ _these features are implemented_
- in our level parsing, check for dual portals rather than just starting dual
- green name users...
- add more old endpoints
-- add events, weekly, daily
\ No newline at end of file
+- better support for older versions
\ No newline at end of file
diff --git a/src/endpoints/accounts.rs b/src/endpoints/accounts.rs
index fca82a6..0ec14fd 100644
--- a/src/endpoints/accounts.rs
+++ b/src/endpoints/accounts.rs
@@ -1,2 +1,3 @@
pub mod login_account;
-pub mod register_account;
\ No newline at end of file
+pub mod register_account;
+pub mod update_account_settings;
\ No newline at end of file
diff --git a/src/endpoints/accounts/update_account_settings.rs b/src/endpoints/accounts/update_account_settings.rs
new file mode 100644
index 0000000..23b3fff
--- /dev/null
+++ b/src/endpoints/accounts/update_account_settings.rs
@@ -0,0 +1,63 @@
+use rocket::form::Form;
+use rocket::http::Status;
+use rocket::response::status;
+
+use diesel::prelude::*;
+
+use crate::helpers;
+use crate::db;
+
+#[derive(FromForm)]
+pub struct FormUpdateAccountSettings {
+ accountID: i32,
+
+ mS: i32,
+ frS: i32,
+ cS: i32,
+
+ yt: String,
+ twitter: String,
+ twitch: String,
+
+ password: Option,
+ gjp: Option,
+ gjp2: Option,
+}
+
+#[post("/updateGJAccSettings20.php", data = "")]
+pub fn update_account_settings(input: Form) -> status::Custom<&'static str> {
+ let connection = &mut db::establish_connection_pg();
+
+ // account verification
+ let (_user_id_val, account_id_val): (i32, i32);
+
+ // password argument is used for the level, so
+ match helpers::accounts::auth(input.accountID.clone(), input.password.clone(), input.gjp.clone(), input.gjp2.clone()) {
+ Ok((user_id, account_id)) => {
+ _user_id_val = user_id;
+ account_id_val = account_id;
+ },
+ Err(_) => return status::Custom(Status::Ok, "-1")
+ };
+
+ use crate::models::Account;
+
+ {
+ use crate::schema::accounts::dsl::*;
+
+ diesel::update(accounts)
+ .filter(id.eq(account_id_val))
+ .set((
+ messages_enabled.eq(input.mS.clamp(0, 2)),
+ friend_requests_enabled.eq(input.frS.clamp(0, 1)),
+ comments_enabled.eq(input.cS.clamp(0, 2)),
+ youtube_url.eq(input.yt.chars().take(20).collect::()),
+ twitch_url.eq(input.twitch.chars().take(25).collect::()),
+ twitter_url.eq(input.twitter.chars().take(15).collect::())
+ ))
+ .get_result::(connection)
+ .expect("failed to update account");
+ }
+
+ return status::Custom(Status::Ok, "1")
+}
\ No newline at end of file
diff --git a/src/endpoints/levels/upload_level.rs b/src/endpoints/levels/upload_level.rs
index 347d6c7..5544124 100644
--- a/src/endpoints/levels/upload_level.rs
+++ b/src/endpoints/levels/upload_level.rs
@@ -164,7 +164,7 @@ pub fn upload_level(input: Form) -> status::Custom<&'static str
Some(requested_stars_val) => requested_stars_val.clamp(0, 10),
None => 0
},
- unlisted: input.unlisted.unwrap_or(0),
+ unlisted: input.unlisted.unwrap_or(0).clamp(0, 1),
version: input.levelVersion,
extra_data: extra_string.as_bytes().to_owned(),
level_info: input.levelInfo.clone().into_bytes(),
@@ -175,7 +175,7 @@ pub fn upload_level(input: Form) -> status::Custom<&'static str
length_real: level_length_secs,
objects: objects_val as i32,
coins: coins_val as i32,
- has_ldm: input.ldm.unwrap_or(0),
+ has_ldm: input.ldm.unwrap_or(0).clamp(0, 1),
two_player: two_player_val
};
diff --git a/src/main.rs b/src/main.rs
index d9dfe45..d46c0dd 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -35,6 +35,7 @@ fn rocket() -> _ {
.mount(CONFIG.general.append_path.as_str(), routes![
endpoints::accounts::login_account::login_account,
endpoints::accounts::register_account::register_account,
+ endpoints::accounts::update_account_settings::update_account_settings,
endpoints::users::get_users::get_users,