Mercurial > pumpbridge
view src/routes.coffee @ 27:f27ddfa42e94
try/catch; From/To/-ESN changes; google probs
author | Mathias Gebbe <mgebbe@intevation.de> |
---|---|
date | Sat, 28 Jun 2014 13:08:40 +0200 |
parents | a52b5b244e51 |
children | 3e3fa35e3ce2 |
line wrap: on
line source
# Copyright (C) 2014 by Intevation GmbH # Author: Mathias Gebbe <mgebbe@intevation.de> # # This file is Free Software under the Apache License, Version 2.0; # and comes with NO WARRANTY! # See the documentation coming with pumpbridge for details. async = require("async") _ = require("underscore") PumpIOClientApp = require("pump.io-client-app") databank = require 'databank' Databank = databank.Databank DatabankObject = databank.DatabankObject RequestToken = PumpIOClientApp.RequestToken userAuth = PumpIOClientApp.userAuth userOptional = PumpIOClientApp.userOptional userRequired = PumpIOClientApp.userRequired noUser = PumpIOClientApp.noUser Usermap = require("./usermap") Google = require("./google") Facebook = require("./facebook") Twitterroutes = require("./twitterroutes") Pump = require("./pumpio") User = require("./user") Edge = require("./edge") Host = require("../node_modules/pump.io-client-app/lib/models/host") https = require("https") OAuth = require('oauth') Sync = require('./sync') addRoutes = (app, options) -> getBridge = (req, res) -> res.send 'Hello, i am the bridge you looking for!' return saveBridge = (req, res) -> pumpid = req.body.pumpid pumptoken = req.body.pumptoken pumpsecret = req.body.pumpsecret gpid = req.body.gpid gptoken = req.body.gptoken gpdelete = req.body.gpdelete fbid = req.body.fbid fbtoken = req.body.fbtoken fbdelete = req.body.fbdelete twdelete = req.body.twdelete # create/update userdb entrys # SET THE CONNECTION BETWEENS PUMPIO AND ESN-ACCOUNT (facebook or google) #### PUMPIO STUFF #### if not (pumpid?) console.log 'no pumpio' else saveUsermap(pumpid,pumpid,pumptoken+';'+pumpsecret,pumpsecret, (err, result) -> Pump.getUser(result)) #async.waterfall [(callback) -> # searchUsermap(bridgeid,bridgeid, callback) #], (result) -> # Pump.postUser(result, 'mgebbe@io.intevation.de','Hallo Welt') #### GOOGLE STUFF #### if not (gpid?) or not (gptoken?) or gpid is "" or gptoken is "" console.log 'no google' else async.waterfall [ (callback) -> saveUsermap(pumpid,gpid,gptoken,'', callback) (user, callback) -> Google.getRefreshToken(user,callback) (token, callback) -> saveUsermap(pumpid,gpid,token.access_token + ";" + gptoken.substr(gptoken.indexOf(';')+1,gptoken.length),token.refresh_token,callback) ], (err, result) -> # now we have a gp refresh token #console.log 'done' if (gpdelete?) console.log "delete gp account" async.waterfall [ (callback) -> Usermap.search {user_pumpio: gpdelete}, callback (result, callback) -> _.each result, (um) -> if um.user_ESN.indexOf('@google') isnt -1 deleteUsermap(um.id,callback) return ], (err, result) -> #### FACEBOOK STUFF #### if not (fbid?) or not (fbtoken?) or fbid is "" or fbtoken is "" console.log 'no facebook' else # get long-lived token # (token is callback function) # get the long lived token from facebook Facebook.getLongLivedToken fbtoken,(token) -> if (token?) saveUsermap(pumpid,fbid,token,fbtoken, (err, result) -> console.log 'fbsave.') if (fbdelete?) console.log "delete fb account" async.waterfall [ (callback) -> Usermap.search {user_pumpio: fbdelete}, callback (result, callback) -> _.each result, (um) -> if um.user_ESN.indexOf('@facebook') isnt -1 deleteUsermap(um.id,callback) return ], (err, result) -> if (twdelete?) console.log "delete tw account" async.waterfall [ (callback) -> Usermap.search {user_pumpio: twdelete}, callback (result, callback) -> _.each result, (um) -> if um.user_ESN.indexOf('@twitter') isnt -1 deleteUsermap(um.id,callback) return ], (err, result) -> # go back to main page #res.send JSON.stringify(req.body.pumpobj) #res.send 'bridge update for:'+ pumpid + '<br>--> ' + gpid + ' ' + gptoken + '<br>--> ' + fbid + ' ' + fbtoken res.redirect('/') # END return # Routes app.get "/bridge", userAuth, userRequired, getBridge app.post "/bridge", userAuth, userRequired, saveBridge Twitterroutes.addRoutes(app) return # update or create usermap saveUsermap = (pumpid,esnid,esntoken, extra, callback) -> saveMap = new Usermap( id : Usermap.key(pumpid,esnid) user_pumpio : pumpid user_ESN : esnid oauth_token : esntoken extra_token : extra created : Date.now() ) saveMap.save (cb) -> #console.log 'saved.' callback null, saveMap # only create and not update usermap createUsermap = (pumpid,esnid,esntoken) -> async.waterfall [(callback) -> Usermap.create user_pumpio: pumpid user_ESN: esnid oauth_token: esntoken , callback ], (err, result) -> if err instanceof databank.AlreadyExistsError console.log err return if err console.log err return else return # update or create a user updateUserDB = (id, name, displayName, profileLink, profilePicLink) -> async.waterfall [(callback) -> saveUser = new User() saveUser.id = id saveUser.name = name saveUser.displayName = displayName saveUser.profileLink = profileLink saveUser.profilePicLink = profilePicLink saveUser.created = Date.now() saveUser.save callback ], (err, result) -> return deleteUsermap = (id, callback) -> bank = Usermap.bank() bank.del Usermap.type, id, callback return exports.saveUsermap = saveUsermap exports.updateUserDB = updateUserDB exports.addRoutes = addRoutes