improves registration
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
- [x] Get files in FS by their hash
|
- [x] Get files in FS by their hash
|
||||||
- [x] Registration
|
- [x] Registration
|
||||||
- [x] Encrypt passwords in DB
|
- [x] Encrypt passwords in DB
|
||||||
- [ ] Registration: Error when username or email is already used
|
- [x] Registration: Error when username or email is already used
|
||||||
- [ ] Check correctness of email
|
- [ ] Check correctness of email
|
||||||
- [ ] Message to admin
|
- [ ] Message to admin
|
||||||
- [x] Advanced folder structure in the storage
|
- [x] Advanced folder structure in the storage
|
||||||
|
|||||||
@@ -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) {
|
int32_t db_user_create(i_db_user_create *args) {
|
||||||
const char *paramValues[3];
|
const char *paramValues[3];
|
||||||
|
int32_t paramLengths[3];
|
||||||
char passHashed[SHA256_DIGEST_LENGTH * 2];
|
char passHashed[SHA256_DIGEST_LENGTH * 2];
|
||||||
paramValues[0] = args->uname;
|
paramValues[0] = args->uname;
|
||||||
paramValues[2] = args->email;
|
paramValues[2] = args->email;
|
||||||
|
|
||||||
|
paramLengths[0] = strlen(args->uname);
|
||||||
|
paramLengths[2] = strlen(args->email);
|
||||||
uint32_t ret_value;
|
uint32_t ret_value;
|
||||||
|
|
||||||
string_to_SHA256(args->pass, passHashed);
|
string_to_SHA256(args->pass, passHashed);
|
||||||
paramValues[1] = 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,
|
res = PQexecParams(conn,
|
||||||
"INSERT INTO users (username, password, email, "
|
"INSERT INTO users (username, password, email, "
|
||||||
"privileges, created_at, last_login)"
|
"privileges, created_at, last_login)"
|
||||||
" VALUES ($1, $2, $3, 1, NOW(), NOW()) RETURNING id",
|
" 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))
|
if (PQresultStatus(res) != PGRES_TUPLES_OK && !PQntuples(res))
|
||||||
return exit_query(-1);
|
return exit_query(-4);
|
||||||
|
|
||||||
ret_value = atoi(PQgetvalue(res, 0, 0));
|
ret_value = atoi(PQgetvalue(res, 0, 0));
|
||||||
clearRes();
|
clearRes();
|
||||||
|
|||||||
+13
-5
@@ -9,16 +9,23 @@
|
|||||||
int32_t create_user(session *sess, char *line) {
|
int32_t create_user(session *sess, char *line) {
|
||||||
i_db_user_create p;
|
i_db_user_create p;
|
||||||
uint32_t privileges;
|
uint32_t privileges;
|
||||||
uint32_t res;
|
int32_t res;
|
||||||
if (sscanf(line, "register %s %s", p.uname, p.pass) == 2) {
|
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);
|
res = db_user_create(&p);
|
||||||
if (res) {
|
if (res > 0) {
|
||||||
sess->state = OP_WAIT;
|
sess->state = OP_WAIT;
|
||||||
sess->uname = malloc(strlen(p.uname));
|
sess->uname = malloc(strlen(p.uname));
|
||||||
strcpy(sess->uname, p.uname);
|
strcpy(sess->uname, p.uname);
|
||||||
sess->uid = res;
|
sess->uid = res;
|
||||||
sess->privileges = 1; // by default
|
sess->privileges = 1; /* by default */
|
||||||
session_send_string(sess, "ok");
|
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;
|
return res;
|
||||||
};
|
};
|
||||||
@@ -85,7 +92,8 @@ int process_error(session *sess) {
|
|||||||
return 1;
|
return 1;
|
||||||
break;
|
break;
|
||||||
case LOGIN:
|
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->state = OP_LOGIN_USR;
|
||||||
sess->reason = NO_REASON;
|
sess->reason = NO_REASON;
|
||||||
session_send_string(sess, "login_again> ");
|
session_send_string(sess, "login_again> ");
|
||||||
|
|||||||
Reference in New Issue
Block a user