|
4 | 4 | #include "kerberos.h"
|
5 | 5 | #include "kerberos_client.h"
|
6 | 6 | #include "kerberos_server.h"
|
| 7 | +#include "kerberos_worker.h" |
7 | 8 |
|
8 | 9 | using v8::FunctionTemplate;
|
9 | 10 |
|
@@ -159,44 +160,28 @@ NAN_METHOD(PrincipalDetails) {
|
159 | 160 | AsyncQueueWorker(new PrincipalDetailsWorker(service, hostname, callback));
|
160 | 161 | }
|
161 | 162 |
|
162 |
| -class CheckPasswordWorker : public Nan::AsyncWorker { |
163 |
| - public: |
164 |
| - CheckPasswordWorker(std::string username, |
165 |
| - std::string password, |
166 |
| - std::string service, |
167 |
| - std::string defaultRealm, |
168 |
| - Nan::Callback* callback) |
169 |
| - : AsyncWorker(callback, "kerberos:CheckPassword"), |
170 |
| - _username(username), |
171 |
| - _password(password), |
172 |
| - _service(service), |
173 |
| - _defaultRealm(defaultRealm) {} |
174 |
| - |
175 |
| - virtual void Execute() { |
176 |
| - std::unique_ptr<gss_result, FreeDeleter> result(authenticate_user_krb5pwd( |
177 |
| - _username.c_str(), _password.c_str(), _service.c_str(), _defaultRealm.c_str())); |
178 |
| - |
179 |
| - if (result->code == AUTH_GSS_ERROR) { |
180 |
| - SetErrorMessage(result->message); |
181 |
| - return; |
182 |
| - } |
183 |
| - } |
184 |
| - |
185 |
| - private: |
186 |
| - std::string _username; |
187 |
| - std::string _password; |
188 |
| - std::string _service; |
189 |
| - std::string _defaultRealm; |
190 |
| -}; |
191 |
| - |
192 | 163 | NAN_METHOD(CheckPassword) {
|
193 | 164 | std::string username(*Nan::Utf8String(info[0]));
|
194 | 165 | std::string password(*Nan::Utf8String(info[1]));
|
195 | 166 | std::string service(*Nan::Utf8String(info[2]));
|
196 | 167 | std::string defaultRealm(*Nan::Utf8String(info[3]));
|
197 | 168 | Nan::Callback* callback = new Nan::Callback(Nan::To<v8::Function>(info[4]).ToLocalChecked());
|
198 | 169 |
|
199 |
| - AsyncQueueWorker(new CheckPasswordWorker(username, password, service, defaultRealm, callback)); |
| 170 | + KerberosWorker::Run(callback, "kerberos:CheckPassword", [=](KerberosWorker::SetOnFinishedHandler onFinished) { |
| 171 | + std::shared_ptr<gss_result> result(authenticate_user_krb5pwd( |
| 172 | + username.c_str(), password.c_str(), service.c_str(), defaultRealm.c_str()), ResultDeleter); |
| 173 | + |
| 174 | + return onFinished([=](KerberosWorker* worker) { |
| 175 | + Nan::HandleScope scope; |
| 176 | + if (result->code == AUTH_GSS_ERROR) { |
| 177 | + v8::Local<v8::Value> argv[] = {Nan::New(result->message).ToLocalChecked(), Nan::Null()}; |
| 178 | + worker->Call(2, argv); |
| 179 | + } else { |
| 180 | + v8::Local<v8::Value> argv[] = {Nan::Null(), Nan::Null()}; |
| 181 | + worker->Call(2, argv); |
| 182 | + } |
| 183 | + }); |
| 184 | + }); |
200 | 185 | }
|
201 | 186 |
|
202 | 187 | NAN_MODULE_INIT(Init) {
|
|
0 commit comments