Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const AUTHORIZATION_URL = `https://login.microsoftonline.com/common/oauth2/v2.0/authorize`;
- const TOKEN_URL = `https://login.microsoftonline.com/common/oauth2/v2.0/token`;
- const SCOPE = `Mail.Read Mail.Read.Shared User.Read offline_access`;
- const CLIENT_ID = ‘XXX’;
- const CLIENT_SECRET = ‘XXX;
- const REDIRECT_URI = “XXX”;
- export async function outlookSignIn(fromMain, service, callback) {
- const code = await signInWithPopup(fromMain, service);
- const tokens = await fetchAccessTokens(code);
- return callback(tokens);
- }
- function signInWithPopup(fromMain, service) {
- return new Promise((resolve, reject) => {
- const authWindow = new BrowserWindow({width: 500, height: 600, show: true})
- // TODO: Generate and validate PKCE code_challenge value
- const urlParams = {
- response_type: 'code',
- response_mode: 'query',
- state: Math.floor(Math.random() * 1e10) + 1,
- redirect_uri: REDIRECT_URI,
- client_id: CLIENT_ID,
- scope: SCOPE
- }
- const authUrl = `${AUTHORIZATION_URL}?${qs.stringify(urlParams)}`
- function handleNavigation(url) {
- const query = parse(url, true).query
- console.log("url",query);
- if (query) {
- if (query.error) {
- reject(new Error(`There was an error: ${query.error}`))
- } else if (query.code) {
- // Login is complete
- authWindow.removeAllListeners('closed')
- setImmediate(() => authWindow.close())
- // This is the authorization code we need to request tokens
- resolve(query.code)
- }
- }
- }
- authWindow.on('closed', event => {
- fromMain.sender.send('error', service);
- });
- authWindow.webContents.on('will-navigate', (event, url) => {
- handleNavigation(url)
- })
- authWindow.webContents.on('did-get-redirect-request', (event, oldUrl, newUrl) => {
- handleNavigation(newUrl)
- })
- authWindow.loadURL(authUrl)
- }, error => {
- console.log(error);
- })
- }
- async function fetchAccessTokens(code) {
- const response = await axios.post(TOKEN_URL,
- qs.stringify({
- code,
- client_id: CLIENT_ID,
- client_secret: CLIENT_SECRET,
- redirect_uri: REDIRECT_URI,
- grant_type: 'authorization_code',
- scope: SCOPE
- }), {
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded'
- }
- })
- return response.data
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement