1- import { app , BrowserWindow , net , shell , ipcMain } from "electron" ;
1+ import { app , BrowserWindow , net } from "electron" ;
22import { Deeplink } from "electron-deeplink" ;
33import isDev from "electron-is-dev" ;
44import jwt_decode from 'jwt-decode' ;
@@ -43,35 +43,26 @@ const deeplink = new Deeplink({
4343// logEverywhere(`electron path: ${require('path').join(__dirname, '../../node_modules/electron/dist/electron.exe')}`);
4444// Sends request to Slack for User's information,
4545// then sends user information back to renderer process
46+ function slackErrorHandler ( err ) {
47+ return mainWindow . webContents . send ( 'slackError' , err )
48+ }
49+
4650function sendTokenRequest ( ) {
4751 logEverywhere ( "inside sendTokenRequest" ) ;
4852
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-
7153 // Send Post request for user information
7254 const request = net . request ( {
7355 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 ,
7566 headers : {
7667 "Content-Type" : "application/x-www-form-urlencoded"
7768 }
@@ -84,22 +75,61 @@ function sendTokenRequest() {
8475 logEverywhere ( "Response ended " ) ;
8576 } ) ;
8677 response . on ( "data" , data => {
87- // logEverywhere("response.on data ");
88- // decodes utf8 Buffer into JSON, then parses it
8978 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' )
9583 mainWindow . webContents . send ( "tokenReceived" , decoded ) ;
84+ // getSlackUser(decoded.access_token, decoded.authed_user.id)
9685 } ) ;
9786 } ) ;
9887 request . end ( ) ;
9988}
10089
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+
101130// Turns on event listener for Slack Oauth deep linking back app
102131// TODO: Deep linking currently doesn't work properly in dev mode - requires fix
132+
103133function setOauthListener ( ) {
104134 logEverywhere ( `process.env.SLACK_CLIENT_ID in electron-main: ${ process . env . SLACK_CLIENT_ID } ` ) ;
105135 logEverywhere ( `process.env.SLACK_CLIENT_SECRET in electron-main: ${ process . env . SLACK_CLIENT_SECRET } ` ) ;
0 commit comments