Пример #1
0
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;
}
Пример #2
0
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);
    }
}
Пример #3
0
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;
}
Пример #4
0
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);
}
Пример #5
0
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);
}
Пример #6
0
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);
}