1
- import { app , BrowserWindow , net , shell , ipcMain } from "electron" ;
1
+ import { app , BrowserWindow , net } from "electron" ;
2
2
import { Deeplink } from "electron-deeplink" ;
3
3
import isDev from "electron-is-dev" ;
4
4
import jwt_decode from 'jwt-decode' ;
@@ -43,35 +43,26 @@ const deeplink = new Deeplink({
43
43
// logEverywhere(`electron path: ${require('path').join(__dirname, '../../node_modules/electron/dist/electron.exe')}`);
44
44
// Sends request to Slack for User's information,
45
45
// then sends user information back to renderer process
46
+ function slackErrorHandler ( err ) {
47
+ return mainWindow . webContents . send ( 'slackError' , err )
48
+ }
49
+
46
50
function sendTokenRequest ( ) {
47
51
logEverywhere ( "inside sendTokenRequest" ) ;
48
52
49
- const authData = {
50
- client_id : process . env . SLACK_CLIENT_ID ,
51
- client_secret : process . env . SLACK_CLIENT_SECRET ,
52
- code : authCode ,
53
- redirect_uri : process . env . SLACK_REDIRECT_URI
54
- } ;
55
- logEverywhere ( authData . code ) ;
56
-
57
- const url =
58
- "https://slack.com/api/openid.connect.token?" +
59
- "client_id=" +
60
- authData . client_id +
61
- "&client_secret=" +
62
- authData . client_secret +
63
- "&code=" +
64
- authData . code +
65
- "&grant_type=authorization_code" +
66
- "&redirect_uri=" +
67
- authData . redirect_uri ;
68
-
69
- logEverywhere ( `Token Request URL: ${ url } ` ) ;
70
-
71
53
// Send Post request for user information
72
54
const request = net . request ( {
73
55
method : "POST" ,
74
- url : url ,
56
+ url : 'https://slack.com/api/oauth.v2.access?' +
57
+ "client_id=" +
58
+ process . env . SLACK_CLIENT_ID +
59
+ "&client_secret=" +
60
+ process . env . SLACK_CLIENT_SECRET +
61
+ "&code=" +
62
+ authCode +
63
+ "&grant_type=authorization_code" +
64
+ "&redirect_uri=" +
65
+ process . env . SLACK_REDIRECT_URI ,
75
66
headers : {
76
67
"Content-Type" : "application/x-www-form-urlencoded"
77
68
}
@@ -84,22 +75,61 @@ function sendTokenRequest() {
84
75
logEverywhere ( "Response ended " ) ;
85
76
} ) ;
86
77
response . on ( "data" , data => {
87
- // logEverywhere("response.on data ");
88
- // decodes utf8 Buffer into JSON, then parses it
89
78
const decoded = JSON . parse ( data . toString ( ) )
90
-
91
- // decodes JSON Web Token and places decoded JWT back into response data
92
- decoded . id_token = jwt_decode ( decoded . id_token )
93
- // logEverywhere(`decoded in response.on data: ${decoded}`)
94
- // send user information back to renderer process
79
+ if ( decoded . error ) {
80
+ return slackErrorHandler ( decoded . error )
81
+ }
82
+ console . log ( 'Is there an error? ' , ! ! decoded . error , 'if true, this shouldnt be logging' )
95
83
mainWindow . webContents . send ( "tokenReceived" , decoded ) ;
84
+ // getSlackUser(decoded.access_token, decoded.authed_user.id)
96
85
} ) ;
97
86
} ) ;
98
87
request . end ( ) ;
99
88
}
100
89
90
+ function getSlackUser ( token , userId ) {
91
+ const request = net . request ( {
92
+ method : 'POST' ,
93
+ url : 'https://slack.com/api/users.profile.get?' +
94
+ "token=" + token +
95
+ "&user=" + userId ,
96
+ headers : {
97
+ 'Content-Type' : 'application/x-www-form-urlencoded'
98
+ }
99
+ } )
100
+ request . on ( 'response' , response => {
101
+ response . on ( 'end' , ( ) => {
102
+ logEverywhere ( 'User data recieved' )
103
+ } )
104
+ response . on ( 'data' , data => {
105
+ const decoded = JSON . parse ( data . toString ( ) ) ;
106
+ if ( decoded . error ) {
107
+ return slackErrorHandler ( decoded . error )
108
+ }
109
+ // logEverywhere('slackUser decoded data in getSlackUser' + decoded)
110
+ mainWindow . webContents . send ( 'slackUser' , decoded )
111
+ } )
112
+ } )
113
+ request . end ( )
114
+ }
115
+
116
+ /*
117
+ For Sign In with Slack, but we are now using the Add to Slack feature instead
118
+ */
119
+ // function decodeUserToken (data) {
120
+ // // logEverywhere("response.on data ");
121
+ // // decodes utf8 Buffer into JSON, then parses it
122
+ // const decoded = JSON.parse(data.toString())
123
+ // // decodes JSON Web Token and places decoded JWT back into response data
124
+ // decoded.id_token = jwt_decode(decoded.id_token)
125
+ // // logEverywhere(`decoded in response.on data: ${decoded}`)
126
+ // // send user information back to renderer process
127
+ // return mainWindow.webContents.send("tokenReceived", decoded);
128
+ // }
129
+
101
130
// Turns on event listener for Slack Oauth deep linking back app
102
131
// TODO: Deep linking currently doesn't work properly in dev mode - requires fix
132
+
103
133
function setOauthListener ( ) {
104
134
logEverywhere ( `process.env.SLACK_CLIENT_ID in electron-main: ${ process . env . SLACK_CLIENT_ID } ` ) ;
105
135
logEverywhere ( `process.env.SLACK_CLIENT_SECRET in electron-main: ${ process . env . SLACK_CLIENT_SECRET } ` ) ;
0 commit comments