johnjones4/InBrief

View on GitHub
src/lib/processHelpers/authorizorsSetup.js

Summary

Maintainability
A
2 hrs
Test Coverage
const { ipcMain, BrowserWindow } = require('electron')
const keys = require('../../keys')
const OAuth = require('oauth-electron-twitter').oauth
const Twitter = require('oauth-electron-twitter').twitter
const oauthFactory = require('../util/oauthFactory')

module.exports = (mainWindow) => {
  const authWindowOptions = {
    alwaysOnTop: true,
    autoHideMenuBar: true,
    webPreferences: {
      nodeIntegration: false
    }
  }

  const getAccessTokenOptions = (service) => {
    switch (service) {
      case 'asana':
        return {
          additionalTokenRequestData: {
            'response_type': 'code',
            'state': new Date().getTime() + ''
          }
        }
      case 'todoist':
        return {
          scope: 'data:read'
        }
      default:
        return null
    }
  }

  const doOAuth2Request = (service) => {
    const oauth = oauthFactory(service, authWindowOptions)
    oauth.getAccessToken(getAccessTokenOptions(service))
      .then(token => {
        mainWindow.webContents.send('authorize-tasks-' + service, {
          token: token.access_token,
          refreshToken: token.refresh_token
        })
      })
      .catch((err) => console.error(err))
  }

  ipcMain.on('authorize-tasks-asana', (event) => {
    doOAuth2Request('asana')
  })

  ipcMain.on('authorize-tasks-todoist', (event) => {
    doOAuth2Request('todoist')
  })

  ipcMain.on('authorize-twitter', (event) => {
    const window = new BrowserWindow(authWindowOptions)
    var info = new Twitter(keys.twitter.key, keys.twitter.secret)
    var auth = new OAuth()
    auth.login(info, window)
      .then((result) => {
        mainWindow.webContents.send('authorize-twitter', {
          token: result.oauth_access_token,
          tokenSecret: result.oauth_access_token_secret
        })
        window.close()
      })
      .catch((error) => {
        console.log('here')
        console.error(error)
      })
  })
}