From f45f164211504f677468beb8b785419612dbaf60 Mon Sep 17 00:00:00 2001 From: Maciej Bowszys Date: Sun, 5 Jul 2026 01:29:36 +0200 Subject: [PATCH] 260705_012936 --- moira_db.go | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/moira_db.go b/moira_db.go index 3dd6136..af82751 100644 --- a/moira_db.go +++ b/moira_db.go @@ -31,6 +31,19 @@ import ( var templates *template.Template = template.New("") var client = &http.Client{Timeout: 2*time.Second} + +type UserInfo struct{ + ProviderCode, // DC--Discord, GG--Google, GH--GitHub, LC--local database + ExtID, + Username, + Fullname, + Email, + Locale string + + CreatedTS, + UpdatedTS int64 // UNIX timestamps +} + var oauth2_dc_config = &oauth2.Config{ ClientID: os.Getenv("MOIRA_OAUTH2_DC_CLI_ID"), ClientSecret: os.Getenv("MOIRA_OAUTH2_DC_CLI_SECRET"), @@ -82,7 +95,7 @@ func oauth2_dc_exchangeReceivedCode(req *http.Request) (_ *http.Client, err erro return oauth2_dc_config.Client(context.Background(), token), nil } -func oauth2_fetch_dc_userInfo(in_client *http.Client) (ret string, err error){ +func oauth2_fetch_dcUserInfo(in_client *http.Client) (ret []byte, err error){ req, err := http.NewRequest("GET", "https://discord.com/api/users/@me", nil) if err != nil{ return } @@ -96,13 +109,26 @@ func oauth2_fetch_dc_userInfo(in_client *http.Client) (ret string, err error){ if err != nil{ return } //fmt.Printf("%+v\n", string(resp_text)) - return string(resp_text), nil + return resp_text, nil } -func oauth2_dc_userInfo_to_User(resp_text string) (err error){ // TODO: add User{} return - fmt.Printf("%s\n", resp_text) +func oauth2_dcUserInfo_to_UserInfo(resp_text []byte) (ret UserInfo, err error){ + //fmt.Printf("%s\n", string(resp_text)) + // TODO: you might want to check if the data fields are not empty - return nil + ts_now := time.Now().Unix() + + return UserInfo{ + ProviderCode: "DC", + ExtID: gjson.GetBytes(resp_text, "id").String(), + Username: gjson.GetBytes(resp_text, "username").String(), + Fullname: gjson.GetBytes(resp_text, "global_name").String(), + Email: gjson.GetBytes(resp_text, "email").String(), + Locale: gjson.GetBytes(resp_text, "locale").String(), + + CreatedTS: ts_now, + UpdatedTS: ts_now, + }, nil } func oauth2_hdlr_login(resp http.ResponseWriter, req *http.Request){ @@ -119,11 +145,14 @@ func oauth2_hdlr_clbk(resp http.ResponseWriter, req *http.Request){ client, err := oauth2_dc_exchangeReceivedCode(req) if err != nil { return } // TODO: should the error be reported somehow? - resp_text, err := oauth2_fetch_dc_userInfo(client) + resp_text, err := oauth2_fetch_dcUserInfo(client) if err != nil { return } // TODO: should the error be reported somehow? - err = oauth2_dc_userInfo_to_User(resp_text) + new_userInfo, err := oauth2_dcUserInfo_to_UserInfo(resp_text) if err != nil { return } // TODO: should the error be reported somehow? + + t_json, _ := json.MarshalIndent(new_userInfo, "", " ") + fmt.Printf("%+v\n", string(t_json)) }