Skip to content

Commit

Permalink
Create Entry Point
Browse files Browse the repository at this point in the history
  • Loading branch information
lvmingze123 authored Dec 2, 2024
1 parent 50bce80 commit 38eb52a
Showing 1 changed file with 86 additions and 0 deletions.
86 changes: 86 additions & 0 deletions Entry Point
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package main

import (
"log"
"net/http"
"net/http/httputil"
"net/url"
)

type Config struct {
ListenAddr string
TargetURL string
AuthServiceURL string
}

type EntryPoint struct {
config *Config
proxy *httputil.ReverseProxy
authClient *http.Client
}

func NewEntryPoint(config *Config) (*EntryPoint, error) {
targetURL, err := url.Parse(config.TargetURL)
if err != nil {
return nil, err
}

return &EntryPoint{
config: config,
proxy: httputil.NewSingleHostReverseProxy(targetURL),
authClient: &http.Client{},
}, nil
}

func (ep *EntryPoint) verifyAuth(token string) (bool, error) {
req, err := http.NewRequest("POST", ep.config.AuthServiceURL, nil)
if err != nil {
return false, err
}

req.Header.Set("Authorization", token)
resp, err := ep.authClient.Do(req)
if err != nil {
return false, err
}
defer resp.Body.Close()

return resp.StatusCode == http.StatusOK, nil
}

func (ep *EntryPoint) ProxyHandler(w http.ResponseWriter, r *http.Request) {

token := r.Header.Get("Authorization")


authorized, err := ep.verifyAuth(token)
if err != nil {
http.Error(w, "Authorization service error", http.StatusInternalServerError)
return
}

if !authorized {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}


ep.proxy.ServeHTTP(w, r)
}

func main() {
config := &Config{
ListenAddr: ":8080",
TargetURL: "http://target-service:8000",
AuthServiceURL: "http://auth-service:8001/verify",
}

entryPoint, err := NewEntryPoint(config)
if err != nil {
log.Fatal(err)
}

http.HandleFunc("/", entryPoint.ProxyHandler)
log.Printf("Starting entry point on %s", config.ListenAddr)
log.Fatal(http.ListenAndServe(config.ListenAddr, nil))
}

0 comments on commit 38eb52a

Please sign in to comment.