fix: Refactor to use oauth2 package
This commit is contained in:
@ -7,63 +7,51 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"pkg/spamasaurusrex/pkg/graphhelper"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
_ "github.com/breml/rootcerts"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
|
||||
"github.com/AzureAD/microsoft-authentication-library-for-go/apps/confidential"
|
||||
"golang.org/x/oauth2"
|
||||
"golang.org/x/oauth2/microsoft"
|
||||
)
|
||||
|
||||
func handler(w http.ResponseWriter, r *http.Request) {
|
||||
clientId := "dccb4b93-3f75-4775-a94a-da39216d7daf"
|
||||
tenantId := "ceeae22e-f163-4ac9-b7c2-45972d3aed4f"
|
||||
redirectURI := "https://alias.spamasaurus.com/"
|
||||
scopes := []string{"user.read"}
|
||||
queryParams := r.URL.Query()
|
||||
var config = oauth2.Config{
|
||||
ClientID: "dccb4b93-3f75-4775-a94a-da39216d7daf",
|
||||
ClientSecret: "tiL8Q~qahoaZUck4ZG4sc5w.V_I.1c60bwkW6aYJ",
|
||||
Endpoint: microsoft.AzureADEndpoint("ceeae22e-f163-4ac9-b7c2-45972d3aed4f"),
|
||||
RedirectURL: "https://alias.spamasaurus.com//callback",
|
||||
Scopes: []string{"User.Read"},
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
func rootHandler(w http.ResponseWriter, r *http.Request) {
|
||||
url := config.AuthCodeURL("state", oauth2.AccessTypeOffline)
|
||||
http.Redirect(w, r, url, http.StatusFound)
|
||||
}
|
||||
|
||||
// confidential clients have a credential, such as a secret or a certificate
|
||||
cred, err := confidential.NewCredFromSecret("client_secret")
|
||||
func callbackHandler(w http.ResponseWriter, r *http.Request) {
|
||||
// Handle the callback after successful authentication
|
||||
code := r.URL.Query().Get("code")
|
||||
token, err := config.Exchange(r.Context(), code)
|
||||
if err != nil {
|
||||
// TODO: handle error
|
||||
}
|
||||
confidentialClient, err := confidential.New("https://login.microsoftonline.com/"+tenantId, clientId, cred)
|
||||
if err != nil {
|
||||
// TODO: handle error
|
||||
http.Error(w, "Error exchanging code for token", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
result, err := confidentialClient.AcquireTokenSilent(ctx, scopes)
|
||||
if err != nil {
|
||||
// cache miss, authenticate with another AcquireToken... method
|
||||
// result, err = confidentialClient.AcquireTokenByCredential(ctx, scopes)
|
||||
result, err = confidentialClient.AcquireTokenByAuthCode(ctx, queryParams["code"][0], redirectURI, scopes)
|
||||
if err != nil {
|
||||
// TODO: handle error
|
||||
}
|
||||
}
|
||||
// accessToken := result.AccessToken
|
||||
w.Write([]byte(fmt.Sprintf("Hello, %s\n", spew.Sdump(result))))
|
||||
// Use the token to make MS Graph queries
|
||||
// Example: Fetch user profile information
|
||||
// ...
|
||||
w.Write([]byte(spew.Sdump(token)))
|
||||
|
||||
fmt.Fprintln(w, "Authentication successful!")
|
||||
}
|
||||
|
||||
func healthHandler(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
||||
func loginHandler(w http.ResponseWriter, r *http.Request) {
|
||||
clientId := "dccb4b93-3f75-4775-a94a-da39216d7daf"
|
||||
tenantId := "ceeae22e-f163-4ac9-b7c2-45972d3aed4f"
|
||||
redirectURI := "https://alias.spamasaurus.com/"
|
||||
|
||||
http.Redirect(w, r,
|
||||
"https://login.microsoftonline.com/"+tenantId+"/oauth2/v2.0/authorize?client_id="+clientId+"&response_type=code&redirect_uri="+redirectURI+"&scope=openid profile offline_access", http.StatusMovedPermanently)
|
||||
}
|
||||
|
||||
func readinessHandler(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
@ -71,9 +59,9 @@ func readinessHandler(w http.ResponseWriter, r *http.Request) {
|
||||
func main() {
|
||||
r := mux.NewRouter()
|
||||
|
||||
r.HandleFunc("/", handler)
|
||||
r.HandleFunc("/", rootHandler)
|
||||
r.HandleFunc("/health", healthHandler)
|
||||
r.HandleFunc("/login", loginHandler)
|
||||
r.HandleFunc("/callback", callbackHandler)
|
||||
r.HandleFunc("/readiness", readinessHandler)
|
||||
|
||||
srv := &http.Server{
|
||||
@ -110,24 +98,3 @@ func waitForShutdown(srv *http.Server) {
|
||||
log.Println("Shutting down")
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
func initializeGraph(graphHelper *graphhelper.GraphHelper) {
|
||||
err := graphHelper.InitializeGraphForUserAuth()
|
||||
if err != nil {
|
||||
log.Panicf("Error initializing Graph for user auth: %v\n", err)
|
||||
}
|
||||
}
|
||||
|
||||
func displayAccessToken(graphHelper *graphhelper.GraphHelper) {
|
||||
token, err := graphHelper.GetUserToken()
|
||||
if err != nil {
|
||||
log.Panicf("Error getting user token: %v\n", err)
|
||||
}
|
||||
|
||||
fmt.Printf("User token: %s", *token)
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
func makeGraphCall(graphHelper *graphhelper.GraphHelper) {
|
||||
// TODO
|
||||
}
|
||||
|
Reference in New Issue
Block a user