UNPKG

ares-ide

Version:

A browser-based code editor and UI designer for Enyo 2 projects

110 lines (94 loc) 3.67 kB
# Stashes Dropbox access credentials. class TokenStash # @param {Object} options the advanced options below # @option options {Boolean} fullDropbox if true, the returned credentials # will be good for full Dropbox access; otherwise, the credentials will # work for Folder access constructor: (options) -> @fs = require 'fs' # Node 0.6 hack. unless @fs.existsSync path = require 'path' @fs.existsSync = (filePath) -> path.existsSync filePath @getCache = null @sandbox = !options?.fullDropbox @setupFs() # Calls the supplied method with the Dropbox access credentials. get: (callback) -> @getCache or= @readStash() if @getCache callback @getCache return null @liveLogin (fullCredentials, sandboxCredentials) => unless fullCredentials and sandboxCredentials throw new Error('Dropbox API authorization failed') @writeStash fullCredentials, sandboxCredentials @getCache = @readStash() callback @getCache # Obtains credentials by doing a login on the live site. liveLogin: (callback) -> Dropbox = require '../../../lib/dropbox' sandboxClient = new Dropbox.Client @clientOptions().sandbox fullClient = new Dropbox.Client @clientOptions().full @setupAuth() sandboxClient.authDriver @authDriver sandboxClient.authenticate (error, data) => if error @killAuth() callback null return fullClient.authDriver @authDriver fullClient.authenticate (error, data) => @killAuth() if error callback null return credentials = @clientOptions() callback fullClient.credentials(), sandboxClient.credentials() # Returns the options used to create a Dropbox Client. clientOptions: -> { sandbox: sandbox: true key: 'gWJAiHNbmDA=|MJ3xAk3nLeByuOckISnHib+h+1zTCG3TKTOEFvAAZw==' full: key: 'OYaTsqx6IXA=|z8mRqmTRoSdCqvkTvHTZq4ZZNxa7I5wM8X5E33IwCA==' } # Reads the file containing the access credentials, if it is available. # # @return {Object?} parsed access credentials, or null if they haven't been # stashed readStash: -> unless @fs.existsSync @jsonPath return null stash = JSON.parse @fs.readFileSync @jsonPath if @sandbox then stash.sandbox else stash.full # Stashes the access credentials for future test use. writeStash: (fullCredentials, sandboxCredentials) -> json = JSON.stringify full: fullCredentials, sandbox: sandboxCredentials @fs.writeFileSync @jsonPath, json browserJs = "window.testKeys = #{JSON.stringify sandboxCredentials};" + "window.testFullDropboxKeys = #{JSON.stringify fullCredentials};" @fs.writeFileSync @browserJsPath, browserJs workerJs = "self.testKeys = #{JSON.stringify sandboxCredentials};" + "self.testFullDropboxKeys = #{JSON.stringify fullCredentials};" @fs.writeFileSync @workerJsPath, workerJs # Sets up a node.js server-based authentication driver. setupAuth: -> return if @authDriver Dropbox = require '../../../lib/dropbox' @authDriver = new Dropbox.Drivers.NodeServer # Shuts down the node.js server behind the authentication server. killAuth: -> return unless @authDriver @authDriver.closeServer() @authDriver = null # Sets up the directory structure for the credential stash. setupFs: -> @dirPath = 'test/token' @jsonPath = 'test/token/token.json' @browserJsPath = 'test/token/token.browser.js' @workerJsPath = 'test/token/token.worker.js' unless @fs.existsSync @dirPath @fs.mkdirSync @dirPath module.exports = TokenStash