diff options
author | Cara Salter <cara@devcara.com> | 2022-10-24 13:21:37 -0400 |
---|---|---|
committer | Cara Salter <cara@devcara.com> | 2022-10-24 13:21:37 -0400 |
commit | f0f0efcafeec83850add53712eb463c8ff5ee9be (patch) | |
tree | 709ad1678f10788c57c713e6683f5be2b780479b /src/login.c | |
parent | 338c3d50f45598418e0ed29fed542e76cf071e0f (diff) | |
download | cmud-f0f0efcafeec83850add53712eb463c8ff5ee9be.tar.gz cmud-f0f0efcafeec83850add53712eb463c8ff5ee9be.zip |
login: Login complete!
segfaults... so many segfaults
but i'm learning so that's what matters!
Diffstat (limited to 'src/login.c')
-rw-r--r-- | src/login.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/login.c b/src/login.c index 6ccebc7..8214234 100644 --- a/src/login.c +++ b/src/login.c @@ -72,19 +72,33 @@ int step_login(playerc_t *player, int conn_fd) { case EnterPassword: ; asprintf(&buf, "Welcome back %s! Please enter your password, so we can confirm it.\n", player->plr.name); send_to_fd(player->conn, buf); - recv(player->conn, buf, sizeof(buf), 0); - printf("%s\n", player->plr.pw_hash); + memset(buf, '\0', 1 << 9); + recv(player->conn, buf, sizeof(buf), 0); + char* pw = trimwhitespace(buf); + int res = argon2i_verify(player->plr.pw_hash, pw, strlen(pw)); + printf("%d\n", res); + if (res == ARGON2_OK) { + // The password is good! + send_to_fd(player->conn, "That looks good to me! Let's get you loaded in\n"); + player->state = Complete; + } else { + // Password is incorrect + send_to_fd(player->conn, "Password incorrect, please try again\n"); + break; + } break; case WantMakeAccount: asprintf(&buf, "Welcome aboard %s! Why don't you start us off by giving me a password.\n", player->plr.name); send_to_fd(player->conn, buf); + memset(buf, '\0', 1 << 9); recv(player->conn, buf, sizeof(buf), 0); if (strlen(buf) <= 5) { send_to_fd(player->conn, "We're sorry, but passwords need to be at least 5 characters"); } else { player->plr.pw_hash = (char *)malloc(512); char* hashbuf = (char *)malloc (1 << 5); - err = argon2i_hash_encoded(32, 512, 1, buf, strlen(buf), "adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I=", strlen("adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I="), 32, player->plr.pw_hash, 512); + char* pw = trimwhitespace(buf); + err = argon2i_hash_encoded(32, 512, 1, pw, strlen(pw), "adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I=", strlen("adSAaVWIueBwP2jHfAl7diRJ9ijC1Ysb9e920d6d9+I="), 32, player->plr.pw_hash, 512); if (err != ARGON2_OK) { send_to_fd(player->conn, "Uhhh, something happened. Try again."); |