Selaa lähdekoodia

Verify nonce.

Jared Hanson 3 vuotta sitten
vanhempi
commit
13702fe89f
1 muutettua tiedostoa jossa 30 lisäystä ja 22 poistoa
  1. 30 22
      lib/strategy.js

+ 30 - 22
lib/strategy.js

@@ -1,6 +1,7 @@
 var passport = require('passport-strategy')
   , siwe = require('siwe')
   , util = require('util')
+  , SessionStore = require('./store/session');
 
 function Strategy(options, verify) {
   if (typeof options == 'function') {
@@ -12,6 +13,7 @@ function Strategy(options, verify) {
   this.name = 'ethereum';
   this._verify = verify;
   this._passReqToCallback = options.passReqToCallback;
+  this._store = options.store || new SessionStore();
 }
 
 /**
@@ -30,34 +32,40 @@ Strategy.prototype.authenticate = function(req, options) {
   if (!signature) { return this.fail({ message: 'Missing signature' }, 400); }
   
   var self = this;
-  
   var siweMessage = new siwe.SiweMessage(message);
   
-  siweMessage.validate(signature)
-    .then(function(message) {
-      console.log('valid!');
-      console.log(message);
+  this._store.verify(req, siweMessage.nonce, function(err, ok, info) {
+    if (!ok) {
+      return self.fail(info, 403);
+    }
+  
+  
+    siweMessage.validate(signature)
+      .then(function(message) {
+        console.log('valid!');
+        console.log(message);
       
       
-      function verified(err, user, info) {
-        if (err) { return self.error(err); }
-        if (!user) { return self.fail(info); }
-        self.success(user, info);
-      }
+        function verified(err, user, info) {
+          if (err) { return self.error(err); }
+          if (!user) { return self.fail(info); }
+          self.success(user, info);
+        }
       
-      try {
-        if (self._passReqToCallback) {
-          self._verify(req, message.address, verified);
-        } else {
-          self._verify(message.address, verified);
+        try {
+          if (self._passReqToCallback) {
+            self._verify(req, message.address, verified);
+          } else {
+            self._verify(message.address, verified);
+          }
+        } catch (ex) {
+          return self.error(ex);
         }
-      } catch (ex) {
-        return self.error(ex);
-      }
-    })
-    .catch(function(err) {
-      return self.fail({ message: 'Invalid signature' });
-    });
+      })
+      .catch(function(err) {
+        return self.fail({ message: 'Invalid signature' });
+      });
+  });
 };
 
 /**