o365 calendar sync (#8044)
Implemented: * Account Connect * Calendar sync via delta ids then requesting single events I think I would split the messaging part into a second pr - that's a step more complex then the calendar :) --------- Co-authored-by: bosiraphael <raphael.bosi@gmail.com>
This commit is contained in:
@ -0,0 +1,62 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import {
|
||||
AuthProvider,
|
||||
AuthProviderCallback,
|
||||
Client,
|
||||
} from '@microsoft/microsoft-graph-client';
|
||||
|
||||
import { EnvironmentService } from 'src/engine/core-modules/environment/environment.service';
|
||||
|
||||
@Injectable()
|
||||
export class MicrosoftOAuth2ClientManagerService {
|
||||
constructor(private readonly environmentService: EnvironmentService) {}
|
||||
|
||||
public async getOAuth2Client(refreshToken: string): Promise<Client> {
|
||||
const authProvider: AuthProvider = async (
|
||||
callback: AuthProviderCallback,
|
||||
) => {
|
||||
try {
|
||||
const tenantId = this.environmentService.get(
|
||||
'AUTH_MICROSOFT_TENANT_ID',
|
||||
);
|
||||
|
||||
const urlData = new URLSearchParams();
|
||||
|
||||
urlData.append(
|
||||
'client_id',
|
||||
this.environmentService.get('AUTH_MICROSOFT_CLIENT_ID'),
|
||||
);
|
||||
urlData.append('scope', 'https://graph.microsoft.com/.default');
|
||||
urlData.append('refresh_token', refreshToken);
|
||||
urlData.append(
|
||||
'client_secret',
|
||||
this.environmentService.get('AUTH_MICROSOFT_CLIENT_SECRET'),
|
||||
);
|
||||
urlData.append('grant_type', 'refresh_token');
|
||||
|
||||
const res = await fetch(
|
||||
`https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`,
|
||||
{
|
||||
method: 'POST',
|
||||
body: urlData,
|
||||
},
|
||||
);
|
||||
|
||||
const data = await res.json();
|
||||
|
||||
callback(null, data.access_token);
|
||||
} catch (error) {
|
||||
callback(error, null);
|
||||
}
|
||||
};
|
||||
|
||||
const client = Client.init({
|
||||
defaultVersion: 'v1.0',
|
||||
debugLogging: false,
|
||||
authProvider: authProvider,
|
||||
});
|
||||
|
||||
return client;
|
||||
}
|
||||
}
|
||||
@ -1,11 +1,16 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
import { GoogleOAuth2ClientManagerService } from 'src/modules/connected-account/oauth2-client-manager/drivers/google/google-oauth2-client-manager.service';
|
||||
import { MicrosoftOAuth2ClientManagerService } from 'src/modules/connected-account/oauth2-client-manager/drivers/microsoft/microsoft-oauth2-client-manager.service';
|
||||
import { OAuth2ClientManagerService } from 'src/modules/connected-account/oauth2-client-manager/services/oauth2-client-manager.service';
|
||||
|
||||
@Module({
|
||||
imports: [],
|
||||
providers: [OAuth2ClientManagerService, GoogleOAuth2ClientManagerService],
|
||||
exports: [OAuth2ClientManagerService],
|
||||
providers: [
|
||||
OAuth2ClientManagerService,
|
||||
GoogleOAuth2ClientManagerService,
|
||||
MicrosoftOAuth2ClientManagerService,
|
||||
],
|
||||
exports: [OAuth2ClientManagerService, MicrosoftOAuth2ClientManagerService],
|
||||
})
|
||||
export class OAuth2ClientManagerModule {}
|
||||
|
||||
@ -22,6 +22,7 @@ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/sta
|
||||
|
||||
export enum ConnectedAccountProvider {
|
||||
GOOGLE = 'google',
|
||||
MICROSOFT = 'microsoft',
|
||||
}
|
||||
|
||||
@WorkspaceEntity({
|
||||
|
||||
Reference in New Issue
Block a user