static int psync_p2p_get_download_token(psync_fileid_t fileid, const unsigned char *filehashhex, uint64_t fsize, unsigned char **token, size_t *tlen){ binparam params[]={P_STR("auth", psync_my_auth), P_NUM("fileid", fileid), P_NUM("filesize", fsize), P_LSTR(PSYNC_CHECKSUM, filehashhex, PSYNC_HASH_DIGEST_HEXLEN), P_LSTR("keydata", psync_rsa_public_bin->data, psync_rsa_public_bin->datalen)}; psync_socket *api; binresult *res; const binresult *ctoken; *token=NULL; /* especially for gcc */ *tlen=0; api=psync_apipool_get(); if (unlikely_log(!api)) return PSYNC_NET_TEMPFAIL; res=send_command(api, "getfileownershiptoken", params); if (unlikely_log(!res)){ psync_apipool_release_bad(api); return PSYNC_NET_TEMPFAIL; } psync_apipool_release(api); if (unlikely_log(psync_find_result(res, "result", PARAM_NUM)->num!=0)){ psync_free(res); return PSYNC_NET_PERMFAIL; } ctoken=psync_find_result(res, "token", PARAM_STR); *token=psync_malloc(ctoken->length+1); memcpy(*token, ctoken->str, ctoken->length+1); *tlen=ctoken->length; psync_free(res); return PSYNC_NET_OK; }
void PCloudApp::mount() { if (this->authentication != ""){ QByteArray auth=this->authentication.toUtf8(); apisock *conn=getAPISock(); binresult *res, *result; QByteArray err; if (!conn) return; res=send_command(conn, "userinfo", P_LSTR("auth", auth.constData(), auth.size()), P_BOOL("getauth", 1)); api_close(conn); result=find_res(res, "result"); if (!result){ free(res); return; } if (result->num!=0){ free(res); return; } userLogged(res, err, true); free(res); } }
static int check_token(char *token, uint32_t tlen, unsigned char *key, uint32_t keylen, unsigned char *hashhex){ binparam params[]={P_LSTR(PSYNC_CHECKSUM, hashhex, PSYNC_HASH_DIGEST_HEXLEN), P_LSTR("keydata", key, keylen), P_LSTR("token", token, tlen)}; psync_socket *api; binresult *res; uint64_t result; api=psync_apipool_get(); if (unlikely_log(!api)) return 0; res=send_command(api, "checkfileownershiptoken", params); if (unlikely_log(!res)){ psync_apipool_release_bad(api); return 0; } psync_apipool_release(api); result=psync_find_result(res, "result", PARAM_NUM)->num; psync_free(res); return result?0:1; }
void DirectoryPickerDialog::newFolder() { if (!ui->dirtree->currentItem()) return; quint64 folderid=ui->dirtree->currentItem()->data(1, Qt::UserRole).toULongLong(); QString newdir=QInputDialog::getText(this, "Create Folder", "New folder name"); if (!newdir.length()) return; QByteArray auth=app->settings->get("auth").toUtf8(); QByteArray bnewdir=newdir.toUtf8(); apisock *conn; binresult *res, *result; QTreeWidgetItem *item; if (!(conn=app->getAPISock())){ showError("Could not connect to server. Check your Internet connection."); return; } res=send_command(conn, "createfolder", P_LSTR("auth", auth.constData(), auth.size()), P_LSTR("name", bnewdir.constData(), bnewdir.size()), P_NUM("folderid", folderid)); api_close(conn); result=find_res(res, "result"); if (!result){ showError("Could not connect to server. Check your Internet connection."); free(res); return; } if (result->num!=0){ showError(find_res(res, "error")->str); free(res); return; } item=new QTreeWidgetItem((QTreeWidget*)0, QStringList(newdir)); item->setData(1, Qt::UserRole, (qulonglong)find_res(find_res(res, "metadata"), "folderid")->num); ui->dirtree->currentItem()->addChild(item); ui->dirtree->sortByColumn(0, Qt::AscendingOrder); ui->dirtree->setCurrentItem(item); free(res); }
void DirectoryPickerDialog::showEvent(QShowEvent *) { QList<QTreeWidgetItem *> items; apisock *conn; binresult *res, *result, *rn; binresult root; QByteArray auth=app->settings->get("auth").toUtf8(); if (!(conn=app->getAPISock())){ showError("Could not connect to server. Check your Internet connection."); return; } ui->dirtree->clear(); ui->dirtree->setColumnCount(1); ui->dirtree->setHeaderLabels(QStringList("Name")); res=send_command(conn, "listfolder", P_LSTR("auth", auth.constData(), auth.size()), P_STR("filtermeta", "contents,folderid,name"), P_NUM("folderid", 0), P_BOOL("recursive", 1), P_BOOL("nofiles", 1), P_BOOL("noshares", onlyMine)); api_close(conn); result=find_res(res, "result"); if (!result){ showError("Could not connect to server. Check your Internet connection."); free(res); return; } if (result->num!=0){ showError(find_res(res, "error")->str); free(res); return; } if (showRoot){ root.type=PARAM_ARRAY; root.length=1; root.array=&rn; rn=find_res(res, "metadata"); result=&root; } else result=find_res(find_res(res, "metadata"), "contents"); items=binresToQList(result); ui->dirtree->insertTopLevelItems(0, items); ui->dirtree->sortByColumn(0, Qt::AscendingOrder); if (items.count()){ ui->dirtree->setCurrentItem(items[0]); ui->dirtree->expandItem(items[0]); } free(res); }
void RegisterWindow::doRegister(){ if (!ui->accepttos->checkState()){ setError("Registration only possible upon acceptance of terms."); return; } if (ui->password->text().length()<6){ setError("Password too short - minimum 6 characters."); return; } if (ui->password->text()!=ui->confirmpassword->text()){ setError("Password confirmation does not match."); return; } QByteArray email=ui->email->text().toUtf8(); QByteArray password=ui->password->text().toUtf8(); apisock *conn; binresult *res, *result; QByteArray err; quint64 type=0; #if defined(Q_OS_WIN) type=5; #elif defined(Q_OS_LINUX) type=7; #elif defined(Q_OS_MAC) type=6; #endif if (!(conn=app->getAPISock())){ setError("Connection to server failed."); return; } res=send_command(conn, "register", P_STR("termsaccepted", "yes"), P_LSTR("mail", email.constData(), email.size()), P_LSTR("password", password.constData(), password.size()), P_NUM("os", type)); result=find_res(res, "result"); if (!result){ setError("Connection to server failed."); free(res); api_close(conn); return; } if (result->num!=0){ setError(find_res(res, "error")->str); free(res); api_close(conn); return; } res=send_command(conn, "userinfo", P_LSTR("username", email.constData(), email.size()), P_LSTR("password", password.constData(), password.size()), P_BOOL("getauth", 1)); api_close(conn); result=find_res(res, "result"); if (!result){ setError("Connection to server failed."); free(res); return; } if (result->num!=0){ setError(find_res(res, "error")->str); free(res); return; } if (!app->userLogged(res, err, false)) setError(err); else{ setError(""); ui->password->clear(); ui->confirmpassword->clear(); hide(); } free(res); }