E5BotForSQLite/outlook.go

137 lines
3.8 KiB
Go
Raw Normal View History

2020-03-26 12:53:00 +08:00
package main
import (
"fmt"
"github.com/spf13/viper"
2020-03-26 16:43:51 +08:00
"github.com/tidwall/gjson"
"io/ioutil"
"net/http"
2020-03-28 11:19:40 +08:00
"net/url"
2020-03-26 16:43:51 +08:00
"strings"
)
const (
MsApiUrl string = "https://login.microsoftonline.com"
MsGraUrl string = "https://graph.microsoft.com"
2020-03-26 12:53:00 +08:00
)
var (
2020-03-28 11:19:40 +08:00
cliId string
redirectUri string
scope string
authUrl string
2020-03-26 12:53:00 +08:00
)
func init() {
viper.SetConfigName("config")
viper.AddConfigPath(".")
err := viper.ReadInConfig()
if err != nil {
panic(fmt.Errorf("Fatal error config file: %s \n", err))
}
2020-03-28 11:19:40 +08:00
authUrl = viper.GetString("auth_url")
cliId = GetURLValue(authUrl, "client_id")
redirectUri, _ = url.QueryUnescape(GetURLValue(authUrl, "redirect_uri"))
scope, _ = url.QueryUnescape(GetURLValue(authUrl, "scope"))
2020-03-26 16:43:51 +08:00
//refreshtoken := "xxxx"
//fmt.Println(MSGetUserInfo(MSGetToken(refreshtoken,"user.read mail.read")))
2020-03-27 21:45:36 +08:00
//code := "xxx"
//fmt.Println(MSFirGetToken(code))
2020-03-26 12:53:00 +08:00
}
2020-03-26 16:43:51 +08:00
//return access_token and refresh_token
2020-03-27 21:45:36 +08:00
func MSFirGetToken(code string) (access string, refresh string) {
2020-03-26 16:43:51 +08:00
var r http.Request
client := &http.Client{}
r.ParseForm()
2020-03-28 11:19:40 +08:00
r.Form.Add("client_id", cliId)
2020-03-26 16:43:51 +08:00
r.Form.Add("grant_type", "authorization_code")
r.Form.Add("scope", scope)
r.Form.Add("code", code)
2020-03-28 11:19:40 +08:00
r.Form.Add("redirect_uri", redirectUri)
2020-03-26 16:43:51 +08:00
body := strings.NewReader(r.Form.Encode())
req, err := http.NewRequest("POST", MsApiUrl+"/common/oauth2/v2.0/token", body)
resp, err := client.Do(req)
defer resp.Body.Close()
content, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Fatal error ", err.Error())
}
if gjson.Get(string(content), "token_type").String() == "Bearer" {
return gjson.Get(string(content), "access_token").String(), gjson.Get(string(content), "refresh_token").String()
} else {
return "", ""
}
return "", ""
}
//return access_token
2020-03-27 21:45:36 +08:00
func MSGetToken(refreshtoken string) (access string) {
2020-03-26 16:43:51 +08:00
var r http.Request
client := &http.Client{}
r.ParseForm()
2020-03-28 11:19:40 +08:00
r.Form.Add("client_id", cliId)
2020-03-26 16:43:51 +08:00
r.Form.Add("grant_type", "refresh_token")
r.Form.Add("scope", scope)
r.Form.Add("refresh_token", refreshtoken)
2020-03-28 11:19:40 +08:00
r.Form.Add("redirect_uri", redirectUri)
2020-03-26 16:43:51 +08:00
body := strings.NewReader(r.Form.Encode())
fmt.Println(body)
req, err := http.NewRequest("POST", MsApiUrl+"/common/oauth2/v2.0/token", body)
resp, err := client.Do(req)
defer resp.Body.Close()
content, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Fatal error ", err.Error())
}
fmt.Println(string(content))
//fmt.Println(gjson.Get(string(content), "access_token").String())
if gjson.Get(string(content), "token_type").String() == "Bearer" {
return gjson.Get(string(content), "access_token").String()
} else {
return ""
}
return ""
}
//Get User's Information
2020-03-27 18:13:53 +08:00
func MSGetUserInfo(accesstoken string) (json string) {
2020-03-26 16:43:51 +08:00
client := http.Client{}
//r.Header.Set("Host","graph.microsoft.com")
req, err := http.NewRequest("GET", MsGraUrl+"/v1.0/me", nil)
if err != nil {
fmt.Println("MSGetUserInfo ERROR ", err.Error())
return ""
}
req.Header.Set("Authorization", accesstoken)
resp, _ := client.Do(req)
defer resp.Body.Close()
content, _ := ioutil.ReadAll(resp.Body)
if gjson.Get(string(content), "id").String() != "" {
fmt.Println("UserName: " + gjson.Get(string(content), "displayName").String())
return string(content)
}
2020-03-26 12:53:00 +08:00
return ""
}
2020-03-27 16:31:09 +08:00
func OutLookGetMails(accesstoken string) bool {
client := http.Client{}
//r.Header.Set("Host","graph.microsoft.com")
req, err := http.NewRequest("GET", MsGraUrl+"/v1.0/me/messages", nil)
if err != nil {
fmt.Println("MSGetMils ERROR ", err.Error())
return false
}
req.Header.Set("Authorization", accesstoken)
resp, _ := client.Do(req)
defer resp.Body.Close()
content, _ := ioutil.ReadAll(resp.Body)
2020-03-28 14:58:17 +08:00
fmt.Println(string(content))
//这里的.需要转义,否则会按路径的方式解析
if gjson.Get(string(content), "@odata\\.context").String() != "" {
2020-03-27 16:31:09 +08:00
return true
}
return false
}