improves registration
This commit is contained in:
@@ -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
@@ -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> ");
|
||||
|
||||
Reference in New Issue
Block a user