diff --git a/main.go b/main.go index 21e8d64abcc69b344f7427197f9e86a078538779..3dd3c8f747642f95ee1cdc3e9210c1a8c4ce4c57 100644 --- a/main.go +++ b/main.go @@ -33,7 +33,7 @@ func main() { mux := http.NewServeMux() fmt.Println("Server started") - mux.HandleFunc("/auth", func(w http.ResponseWriter, r *http.Request) { + mux.HandleFunc("/auth_old", func(w http.ResponseWriter, r *http.Request) { fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- New auth request") query := r.URL.Query() fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- Query received - ", query) @@ -62,6 +62,89 @@ func main() { replyUri = replyUri + "accounts/enedis-konnector/redirect" fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- Reply to - ", replyUri) + // Get the response body as a string + pageContent := string(contents) + + // Find a substr + codeStartIndex := strings.Index(pageContent, "?code=") + if codeStartIndex == -1 { + fmt.Println("No code found") + } + codeStartIndex += 6 + + // Find the index of the closing tag + codeEndIndex := strings.Index(pageContent, "&state=") + if codeEndIndex == -1 { + fmt.Println("No closing tag for code found.") + } + + stateStartIndex := strings.Index(pageContent, "&state=") + if stateStartIndex == -1 { + fmt.Println("No state found") + } + stateStartIndex += 7 + + stateEndIndex := strings.Index(pageContent, "&usage_point_id=") + if stateEndIndex == -1 { + fmt.Println("No closing tag for state found.") + } + + + usageStartIndex := strings.Index(pageContent, "&usage_point_id=") + if usageStartIndex == -1 { + fmt.Println("No usage found") + } + usageStartIndex += 16 + + usageEndIndex := strings.Index(pageContent, "&usage_point_id=") + if usageEndIndex == -1 { + fmt.Println("No closing tag for usage found.") + } + usageEndIndex += 30 + + pageCode := string([]byte(pageContent[codeStartIndex:codeEndIndex])) + pageState := string([]byte(pageContent[stateStartIndex:stateEndIndex])) + pageUsage := string([]byte(pageContent[usageStartIndex:usageEndIndex])) + + // Print out the result + fmt.Printf("Page code: %s\n", pageCode) + fmt.Printf("Page state: %s\n", pageState) + fmt.Printf("Page usage: %s\n", pageUsage) + + redir := replyUri + "?code=" + pageCode + "&state="+ pageState +"&usage_point_id=" + pageUsage + fmt.Println(redir) + http.Redirect(w, r, redir, 302) + + } + }) + + mux.HandleFunc("/auth", func(w http.ResponseWriter, r *http.Request) { + fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- New auth request") + query := r.URL.Query() + fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- Query received - ", query) + + clientId := query.Get("client_id") + state := query.Get("state") + redirectUri := "https://oauth-proxy.wf.alpha.grandlyon.com/" + responseType := "code" + + authReq := "https://gw.hml.api.enedis.fr/group/espace-particuliers/consentement-linky/oauth2/authorize?client_id="+ clientId +"&duration=P6M&redirect_uri="+ redirectUri +"&response_type="+ responseType +"&state="+ state + + fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- Send request to auth endpoint", authReq) + response, err := http.Get(authReq) + fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- Endpoint response with status", response.Status) + if err != nil { + fmt.Println(err) + } else { + defer response.Body.Close() + contents, err := ioutil.ReadAll(response.Body) + if err != nil { + fmt.Println(err) + } + // Define the replyUri + replyUri := "oauth-proxy.wf.alpha.grandlyon.com/redirect" + fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- Reply to - ", replyUri) + // Get the response body as a string pageContentString := string(contents) // Replace redirectUri by the host in the body @@ -79,6 +162,37 @@ func main() { } }) + mux.HandleFunc("/redirect", func(w http.ResponseWriter, r *http.Request) { + fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- New redirect request") + query := r.URL.Query() + fmt.Println(query) + + code := query.Get("code") + state := query.Get("state") + usagePointId := query.Get("usage_point_id") + + // Get the redirect uri from the referer + referer := r.Header.Get("Referer") + redirectUri := "" + redirectStartIndex := strings.Index(referer, "&redirect_uri=") + if redirectStartIndex == -1 { + fmt.Println("No redirect found") + } + redirectStartIndex += len("&redirect_uri=") + splitRefer := string([]byte(referer[redirectStartIndex:len(referer)])) + fmt.Println(splitRefer) + redirectEndIndex := strings.Index(splitRefer, "&") + if redirectEndIndex == -1 { + redirectUri = splitRefer + } + redirectUri = string([]byte(splitRefer[0:redirectEndIndex])) + fmt.Println(redirectUri) + + redir := "https://" + redirectUri + "/accounts/enedis-konnector/redirect?code=" + code + "&state="+ state +"&usage_point_id=" + usagePointId + fmt.Println(redir) + http.Redirect(w, r, redir, 302) + }) + mux.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) { fmt.Println(time.Now().Format("2006-01-02 15:04:05"), "- New token request") query := r.URL.Query()