| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- should = require('chai').should()
- SandboxedModule = require('sandboxed-module')
- assert = require('assert')
- path = require('path')
- sinon = require('sinon')
- modulePath = path.join __dirname, "../../../../app/js/Features/Security/OneTimeTokenHandler"
- expect = require("chai").expect
- describe "OneTimeTokenHandler", ->
- beforeEach ->
- @value = "user id here"
- @stubbedToken = require("crypto").randomBytes(32)
- @settings =
- redis:
- web:{}
- @redisMulti =
- set:sinon.stub()
- get:sinon.stub()
- del:sinon.stub()
- expire:sinon.stub()
- exec:sinon.stub()
- self = @
- @OneTimeTokenHandler = SandboxedModule.require modulePath, requires:
- "../../infrastructure/RedisWrapper" :
- client: =>
- auth:->
- multi: -> return self.redisMulti
- "settings-sharelatex":@settings
- "logger-sharelatex": log:->
- "crypto": randomBytes: () => @stubbedToken
- describe "getNewToken", ->
- it "should set a new token into redis with a ttl", (done)->
- @redisMulti.exec.callsArgWith(0)
- @OneTimeTokenHandler.getNewToken @value, (err, token) =>
- @redisMulti.set.calledWith("password_token:#{@stubbedToken.toString("hex")}", @value).should.equal true
- @redisMulti.expire.calledWith("password_token:#{@stubbedToken.toString("hex")}", 60 * 60).should.equal true
- done()
- it "should return if there was an error", (done)->
- @redisMulti.exec.callsArgWith(0, "error")
- @OneTimeTokenHandler.getNewToken @value, (err, token)=>
- err.should.exist
- done()
- it "should allow the expiry time to be overridden", (done) ->
- @redisMulti.exec.callsArgWith(0)
- @ttl = 42
- @OneTimeTokenHandler.getNewToken @value, {expiresIn: @ttl}, (err, token) =>
- @redisMulti.expire.calledWith("password_token:#{@stubbedToken.toString("hex")}", @ttl).should.equal true
- done()
- describe "getValueFromTokenAndExpire", ->
- it "should get and delete the token", (done)->
- @redisMulti.exec.callsArgWith(0, null, [@value])
- @OneTimeTokenHandler.getValueFromTokenAndExpire @stubbedToken, (err, value)=>
- value.should.equal @value
- @redisMulti.get.calledWith("password_token:#{@stubbedToken}").should.equal true
- @redisMulti.del.calledWith("password_token:#{@stubbedToken}").should.equal true
- done()
|