JNIEXPORT jstring JNICALL Java_com_mypasswords7_gui_embeddedweb_LoginProfile_nativeGenToken (JNIEnv *env, jobject obj, jstring jpassword, jstring jtimestamp) { const char* password = (*env)->GetStringUTFChars(env, jpassword, NULL); const char* timestamp = (*env)->GetStringUTFChars(env, jtimestamp, NULL); printf("%s\n%s", password, timestamp); printf("\n%d %d", strlen(password), strlen(timestamp)); const char* charResult = genToken(password, timestamp); jstring result = (*env)->NewStringUTF(env, charResult); return result; }
void msg_login_handler(int socket, mensagem_s *msg) { //header + str + str if (msg->size < HEADER_SIZE + 1 + 1) { disconnect(socket); return; } fprintf(stdout, "MENSAGEM: CMSG_LOGIN\n"); char *username = msg_recv_string(msg); char *password = msg_recv_string(msg); mensagem_s * s = preparePacket(SMSG_LOGIN_RESPONSE); Utilizador * c = GetCliente(username); if (c) { if (c->congelada) { msg_put_short(ERROR_CODE_CONTA_CONGELADA, s); } else if (strcmp(password, c->password) == 0) { Session *session = malloc(sizeof(Session)); session->cliente = c; session->token = genToken(); session->sessionExpire = time(NULL) + 1 *60 * 10; SessionAdd(session); msg_put_short(ERROR_CODE_SUCCESS, s); msg_put_int(session->token, s); msg_put_byte(c->flags, s); } else { msg_put_short(ERROR_CODE_NOME_UTILIZADOR_OU_PASS_INVALIDA, s); } } else { msg_put_short(ERROR_CODE_NOME_UTILIZADOR_OU_PASS_INVALIDA, s); } free(username); free(password); finalizePacket(s); sendData(socket, s); free(s); }
JNIEXPORT jint JNICALL Java_com_mypasswords7_gui_embeddedweb_LoginProfile_nativeCheckToken (JNIEnv *env, jobject obj, jstring jtoken, jstring jpassword, jstring jtimestamp) { const char* password = (*env)->GetStringUTFChars(env, jpassword, NULL); const char* timestamp = (*env)->GetStringUTFChars(env, jtimestamp, NULL); const char* currentToken = (*env)->GetStringUTFChars(env, jtoken, NULL); printf(" "); const char* token = genToken(password, timestamp); int compare = strcmp(token, currentToken); jint result = compare == 0 ? 1 : 0; return result; }
// Define all requests here /// POST: /login RequestResult Request_POST_Login(Database* db, const std::string& uriparams, const std::string& qparams, const std::string& body) { RequestResult ret; // Parse and check credentials auto js = JSONParse(body); const std::string usr_id = js.get("id", "").asString(); const std::string pwd = js.get("password", "").asString(); Usuario usr; if(db->loadUsuario(usr_id, usr) && usr.password == pwd) { usr.last_action = std::time(nullptr); usr.token = genToken(); db->saveUsuario(usr); ret.data = std::string("{ \"token\": \"") + usr.token + usr.nombre + "\" }"; ret.code = 201; }else{ ret.data = "{ \"error\": \"Usuario o clave invalidos\" }"; ret.code = 401; } return ret; }