Files
powerpoint-toolbox/node_modules/keytar/src/async.cc
T
2025-03-07 19:22:02 +01:00

243 lines
6.1 KiB
C++

#include <string>
#include <vector>
#include "napi.h"
#include "keytar.h"
#include "async.h"
using keytar::KEYTAR_OP_RESULT;
SetPasswordWorker::SetPasswordWorker(
const std::string& service,
const std::string& account,
const std::string& password,
const Napi::Env &env
) : AsyncWorker(env),
service(service),
account(account),
password(password),
deferred(Napi::Promise::Deferred::New(env)) {}
SetPasswordWorker::~SetPasswordWorker() {}
Napi::Promise SetPasswordWorker::Promise() {
return deferred.Promise();
}
void SetPasswordWorker::Execute() {
std::string error;
KEYTAR_OP_RESULT result = keytar::SetPassword(service,
account,
password,
&error);
if (result == keytar::FAIL_ERROR) {
SetError(error.c_str());
}
}
void SetPasswordWorker::OnOK() {
Napi::HandleScope scope(Env());
deferred.Resolve(Env().Undefined());
}
void SetPasswordWorker::OnError(Napi::Error const &error) {
Napi::HandleScope scope(Env());
deferred.Reject(error.Value());
}
GetPasswordWorker::GetPasswordWorker(
const std::string& service,
const std::string& account,
const Napi::Env &env
) : AsyncWorker(env),
service(service),
account(account),
deferred(Napi::Promise::Deferred::New(env)) {}
GetPasswordWorker::~GetPasswordWorker() {}
Napi::Promise GetPasswordWorker::Promise() {
return deferred.Promise();
}
void GetPasswordWorker::Execute() {
std::string error;
KEYTAR_OP_RESULT result = keytar::GetPassword(service,
account,
&password,
&error);
if (result == keytar::FAIL_ERROR) {
SetError(error.c_str());
} else if (result == keytar::FAIL_NONFATAL) {
success = false;
} else {
success = true;
}
}
void GetPasswordWorker::OnOK() {
Napi::HandleScope scope(Env());
Napi::Value val = Env().Null();
if (success) {
val = Napi::String::New(Env(), password.data(),
password.length());
}
deferred.Resolve(val);
}
void GetPasswordWorker::OnError(Napi::Error const &error) {
Napi::HandleScope scope(Env());
deferred.Reject(error.Value());
}
DeletePasswordWorker::DeletePasswordWorker(
const std::string& service,
const std::string& account,
const Napi::Env &env
) : AsyncWorker(env),
service(service),
account(account),
deferred(Napi::Promise::Deferred::New(env)) {}
DeletePasswordWorker::~DeletePasswordWorker() {}
Napi::Promise DeletePasswordWorker::Promise() {
return deferred.Promise();
}
void DeletePasswordWorker::Execute() {
std::string error;
KEYTAR_OP_RESULT result = keytar::DeletePassword(service, account, &error);
if (result == keytar::FAIL_ERROR) {
SetError(error.c_str());
} else if (result == keytar::FAIL_NONFATAL) {
success = false;
} else {
success = true;
}
}
void DeletePasswordWorker::OnOK() {
Napi::HandleScope scope(Env());
deferred.Resolve(Napi::Boolean::New(Env(), success));
}
void DeletePasswordWorker::OnError(Napi::Error const &error) {
Napi::HandleScope scope(Env());
deferred.Reject(error.Value());
}
FindPasswordWorker::FindPasswordWorker(
const std::string& service,
const Napi::Env &env
) : AsyncWorker(env),
service(service),
deferred(Napi::Promise::Deferred::New(env)) {}
FindPasswordWorker::~FindPasswordWorker() {}
Napi::Promise FindPasswordWorker::Promise() {
return deferred.Promise();
}
void FindPasswordWorker::Execute() {
std::string error;
KEYTAR_OP_RESULT result = keytar::FindPassword(service,
&password,
&error);
if (result == keytar::FAIL_ERROR) {
SetError(error.c_str());
} else if (result == keytar::FAIL_NONFATAL) {
success = false;
} else {
success = true;
}
}
void FindPasswordWorker::OnOK() {
Napi::HandleScope scope(Env());
Napi::Value val = Env().Null();
if (success) {
val = Napi::String::New(Env(), password.data(),
password.length());
}
deferred.Resolve(val);
}
void FindPasswordWorker::OnError(Napi::Error const &error) {
Napi::HandleScope scope(Env());
deferred.Reject(error.Value());
}
FindCredentialsWorker::FindCredentialsWorker(
const std::string& service,
const Napi::Env &env
) : AsyncWorker(env),
service(service),
deferred(Napi::Promise::Deferred::New(env)) {}
FindCredentialsWorker::~FindCredentialsWorker() {}
Napi::Promise FindCredentialsWorker::Promise() {
return deferred.Promise();
}
void FindCredentialsWorker::Execute() {
std::string error;
KEYTAR_OP_RESULT result = keytar::FindCredentials(service,
&credentials,
&error);
if (result == keytar::FAIL_ERROR) {
SetError(error.c_str());
} else if (result == keytar::FAIL_NONFATAL) {
success = false;
} else {
success = true;
}
}
void FindCredentialsWorker::OnOK() {
Napi::HandleScope scope(Env());
Napi::Env env = Env();
if (success) {
Napi::Array val = Napi::Array::New(env, credentials.size());
unsigned int idx = 0;
std::vector<keytar::Credentials>::iterator it;
for (it = credentials.begin(); it != credentials.end(); it++) {
keytar::Credentials cred = *it;
Napi::Object obj = Napi::Object::New(env);
Napi::String account = Napi::String::New(env,
cred.first.data(),
cred.first.length());
Napi::String password = Napi::String::New(env,
cred.second.data(),
cred.second.length());
#ifndef _WIN32
#pragma GCC diagnostic ignored "-Wunused-result"
#endif
obj.Set("account", account);
#ifndef _WIN32
#pragma GCC diagnostic ignored "-Wunused-result"
#endif
obj.Set("password", password);
(val).Set(idx, obj);
++idx;
}
deferred.Resolve(val);
} else {
deferred.Resolve(Napi::Array::New(env, 0));
}
}
void FindCredentialsWorker::OnError(Napi::Error const &error) {
Napi::HandleScope scope(Env());
deferred.Reject(error.Value());
}