improves registration

This commit is contained in:
2026-02-19 14:46:08 +02:00
parent c8b91776d3
commit e24c6b3ef3
3 changed files with 45 additions and 8 deletions
+31 -2
View File
@@ -147,22 +147,51 @@ int32_t db_user_auth(i_auth_t *c, o_auth_t *r) {
int32_t db_user_create(i_db_user_create *args) {
const char *paramValues[3];
int32_t paramLengths[3];
char passHashed[SHA256_DIGEST_LENGTH * 2];
paramValues[0] = args->uname;
paramValues[2] = args->email;
paramLengths[0] = strlen(args->uname);
paramLengths[2] = strlen(args->email);
uint32_t ret_value;
string_to_SHA256(args->pass, passHashed);
paramValues[1] = passHashed;
paramLengths[1] = 64;
/* Check username */
res = PQexecParams(conn, "SELECT id FROM users WHERE username=$1", 1, NULL,
paramValues, paramLengths, NULL, TEXT);
if (PQresultStatus(res) != PGRES_TUPLES_OK && !PQntuples(res))
return exit_query_2(-1);
if (PQntuples(res) > 0) {
return exit_query_2(-2);
}
/* Check email */
res = PQexecParams(conn, "SELECT id FROM users WHERE email=$1", 1, NULL,
paramValues+2, paramLengths+2, NULL, TEXT);
if (PQresultStatus(res) != PGRES_TUPLES_OK && !PQntuples(res))
return exit_query_2(-1);
if (PQntuples(res) > 0) {
return exit_query_2(-3);
}
clearRes();
res = PQexecParams(conn,
"INSERT INTO users (username, password, email, "
"privileges, created_at, last_login)"
" VALUES ($1, $2, $3, 1, NOW(), NOW()) RETURNING id",
3, NULL, paramValues, NULL, NULL, TEXT);
3, NULL, paramValues, paramLengths, NULL, TEXT);
if (PQresultStatus(res) != PGRES_TUPLES_OK && !PQntuples(res))
return exit_query(-1);
return exit_query(-4);
ret_value = atoi(PQgetvalue(res, 0, 0));
clearRes();
+13 -5
View File
@@ -9,16 +9,23 @@
int32_t create_user(session *sess, char *line) {
i_db_user_create p;
uint32_t privileges;
uint32_t res;
int32_t res;
if (sscanf(line, "register %s %s", p.uname, p.pass) == 2) {
sprintf(p.email, "%s@mail.net", p.uname); /* TODO: return back email */
res = db_user_create(&p);
if (res) {
if (res > 0) {
sess->state = OP_WAIT;
sess->uname = malloc(strlen(p.uname));
strcpy(sess->uname, p.uname);
sess->uid = res;
sess->privileges = 1; // by default
session_send_string(sess, "ok");
sess->privileges = 1; /* by default */
session_send_string(sess, "ok\n");
} else if (res == -2) {
session_send_string(sess, "User with such name already exists\n");
} else if (res == -3) {
session_send_string(sess, "User with such email already exists\n");
} else {
session_send_string(sess, "Error creating the user\n");
}
return res;
};
@@ -85,7 +92,8 @@ int process_error(session *sess) {
return 1;
break;
case LOGIN:
session_send_string(sess, "Can't find the user with such credentials\04\n");
session_send_string(sess,
"Can't find the user with such credentials\04\n");
sess->state = OP_LOGIN_USR;
sess->reason = NO_REASON;
session_send_string(sess, "login_again> ");