Finish MS Api

This commit is contained in:
iyear 2020-03-26 16:43:51 +08:00
parent 723d96931e
commit eb3a3b0f57

View File

@ -3,6 +3,15 @@ package main
import (
"fmt"
"github.com/spf13/viper"
"github.com/tidwall/gjson"
"io/ioutil"
"net/http"
"strings"
)
const (
MsApiUrl string = "https://login.microsoftonline.com"
MsGraUrl string = "https://graph.microsoft.com"
)
var (
@ -19,7 +28,81 @@ func init() {
}
cliid = viper.GetString("client_id")
rediuri = viper.GetString("redirect_uri")
//refreshtoken := "xxxx"
//fmt.Println(MSGetUserInfo(MSGetToken(refreshtoken,"user.read mail.read")))
}
func GetToken(code string) string {
//return access_token and refresh_token
func MSFirGetToken(code, scope string) (string, string) {
var r http.Request
client := &http.Client{}
r.ParseForm()
r.Form.Add("client_id", cliid)
r.Form.Add("grant_type", "authorization_code")
r.Form.Add("scope", scope)
r.Form.Add("code", code)
r.Form.Add("redirect_uri", rediuri)
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
func MSGetToken(refreshtoken, scope string) string {
var r http.Request
client := &http.Client{}
r.ParseForm()
r.Form.Add("client_id", cliid)
r.Form.Add("grant_type", "refresh_token")
r.Form.Add("scope", scope)
r.Form.Add("refresh_token", refreshtoken)
r.Form.Add("redirect_uri", rediuri)
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
func MSGetUserInfo(accesstoken string) string {
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)
}
return ""
}