diff --git a/oauth2.go b/oauth2.go index 8f4230d..9a1291c 100755 --- a/oauth2.go +++ b/oauth2.go @@ -14,6 +14,7 @@ import ( "log" "net/http" "strconv" + //"net/url" "os" "strings" @@ -822,6 +823,7 @@ func HandleNewOutlookRegister(resp http.ResponseWriter, request *http.Request) { Expiry: accessToken.Expiry, } + //log.Printf("%#v", trigger) log.Println(trigger.WorkflowId) log.Println(trigger.Id) @@ -2941,6 +2943,52 @@ func MakeGmailWebhookRequest(ctx context.Context, webhookUrl string, mappedData return nil } +func RefreshOutlookClient(ctx context.Context, auth TriggerAuth) (error) { + // Manually recreate the oauthtoken + conf := &oauth2.Config{ + ClientID: os.Getenv("OFFICE365_CLIENT_ID"), + ClientSecret: os.Getenv("OFFICE365_CLIENT_SECRET"), + Scopes: []string{ + "Mail.Read", + }, + Endpoint: oauth2.Endpoint{ + TokenURL: "https://login.microsoftonline.com/common/oauth2/token", + }, + } + + // save new access_token, expiry, refresh_token to database + trigger, err := GetTriggerAuth(ctx, auth.Id) + if err != nil { + log.Printf("[WARNING] Failed getting trigger auth for outlook: %s", err) + return err + } + + token, err := conf.TokenSource(ctx, &oauth2.Token{ + RefreshToken: auth.OauthToken.RefreshToken, + }).Token() + + if err != nil { + log.Printf("[WARNING] Failed getting token for outlook: %s", err) + return err + } + + log.Printf("[INFO] Token %s refreshed successfully from outlook. Proceeding to save..", auth.Id) + + trigger.OauthToken.AccessToken = token.AccessToken + trigger.OauthToken.RefreshToken = token.RefreshToken + trigger.OauthToken.Expiry = token.Expiry + + err = SetTriggerAuth(ctx, *trigger) + if err != nil { + log.Printf("[WARNING] Failed setting trigger auth for outlook: %s", err) + return err + } + + log.Printf("[INFO] Successfully refreshed outlook token for trigger %s and user %s", auth.Id, auth.Owner) + + return nil +} + func RefreshGmailClient(ctx context.Context, auth TriggerAuth) (*http.Client, error) { // Manually recreate the oauthtoken conf := &oauth2.Config{ @@ -3866,4 +3914,4 @@ func VerifyIdToken(ctx context.Context, idToken string) (IdTokenCheck, error) { } return IdTokenCheck{}, errors.New("Couldn't verify nonce") -} +} \ No newline at end of file