3
|
1 # Most of the routes in the application |
|
2 # |
|
3 # Copyright 2013, E14N (https://e14n.com/) |
|
4 # all changes Copyright 2014, Intevation GmbH (https://intevation.org) |
|
5 # |
|
6 # Licensed under the Apache License, Version 2.0 (the "License"); |
|
7 # you may not use this file except in compliance with the License. |
|
8 # You may obtain a copy of the License at |
|
9 # |
|
10 # http://www.apache.org/licenses/LICENSE-2.0 |
|
11 # |
|
12 # Unless required by applicable law or agreed to in writing, software |
|
13 # distributed under the License is distributed on an "AS IS" BASIS, |
|
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
15 # See the License for the specific language governing permissions and |
|
16 # limitations under the License. |
|
17 |
|
18 async = require("async") |
|
19 _ = require("underscore") |
|
20 PumpIOClientApp = require("pump.io-client-app") |
|
21 RequestToken = PumpIOClientApp.RequestToken |
|
22 userAuth = PumpIOClientApp.userAuth |
|
23 userOptional = PumpIOClientApp.userOptional |
|
24 userRequired = PumpIOClientApp.userRequired |
|
25 noUser = PumpIOClientApp.noUser |
|
26 Routes = require("./routes") |
|
27 Config = require("./config") |
|
28 config = Config.config |
|
29 |
|
30 addRoutes = (app) -> |
|
31 |
|
32 Twitter = require("./twitter")(config) |
|
33 |
|
34 addAccount = (req, res, next) -> |
|
35 Twitter.getRequestToken req.site, (err, rt) -> |
|
36 if err |
|
37 next err |
|
38 else |
|
39 res.redirect Twitter.authorizeURL(rt) |
|
40 return |
|
41 |
|
42 return |
|
43 |
|
44 authorizedForTwitter = (req, res, next) -> |
|
45 hostname = "twitter.com" |
|
46 token = req.query.oauth_token |
|
47 verifier = req.query.oauth_verifier |
|
48 problem = req.query.oauth_problem |
|
49 user = req.user |
|
50 rt = undefined |
|
51 fuser = undefined |
|
52 access_token = undefined |
|
53 token_secret = undefined |
|
54 id = undefined |
|
55 object = undefined |
|
56 newUser = false |
|
57 unless token |
|
58 next new Error("No token returned.") |
|
59 return |
|
60 async.waterfall [ |
|
61 (callback) -> |
|
62 RequestToken.get RequestToken.key(hostname, token), callback |
|
63 (results, callback) -> |
|
64 rt = results |
|
65 Twitter.getAccessToken req.site, rt, verifier, callback |
|
66 (token, secret, extra, callback) -> |
|
67 access_token = token |
|
68 token_secret = secret |
|
69 async.parallel [ |
|
70 (callback) -> |
|
71 rt.del callback |
|
72 (callback) -> |
|
73 Twitter.whoami req.site, access_token, token_secret, callback |
|
74 ], callback |
|
75 (results, callback) -> |
|
76 object = results[1] |
|
77 object = JSON.stringify(object) |
|
78 object = JSON.parse(object) |
|
79 res.clearCookie('twitteruser') |
|
80 res.clearCookie('twitterid') |
|
81 res.cookie('twitterid',object.id, { maxAge: 900000, httpOnly: false }) |
|
82 res.cookie('twitteruser',object.screen_name, { maxAge: 900000, httpOnly: false }) |
|
83 Routes.saveUsermap(user.id ,object.id + "@twitter" ,access_token, token_secret, callback) |
|
84 ], (err) -> |
|
85 if err |
|
86 next err |
|
87 else |
|
88 res.redirect "/" |
|
89 return |
|
90 |
|
91 return |
|
92 |
|
93 # Routes |
|
94 console.log "Initializing Twitter routes" |
|
95 app.get "/add-account", userAuth, userRequired, addAccount |
|
96 app.get "/authorized-for-twitter", userAuth, userRequired, authorizedForTwitter |
|
97 return |
|
98 |
|
99 exports.addRoutes = addRoutes |