Browse Source

Remove gateway

master
parent
commit
4686a97c6e
Signed by: chris GPG Key ID: 3025DCBD46F81C0F
  1. 69
      cmd/gateway/main.go
  2. 136
      gateway/gateway.go

69
cmd/gateway/main.go

@ -1,69 +0,0 @@
package main
import (
"flag"
"fmt"
"log"
"net/http"
"os"
"git.chrishayward.xyz/x/users/gateway"
"git.chrishayward.xyz/x/users/proto"
"google.golang.org/grpc"
"gopkg.in/yaml.v3"
)
var configPath = flag.String("config", "./config/gateway.yaml", "--config=./config/gateway.yaml")
type config struct {
Port int `yaml:"port"`
Domain string `yaml:"domain"`
Server struct {
Address string `yaml:"address"`
Port int `yaml:"port"`
Secret string `yaml:"secret"`
} `yaml:"server"`
}
func main() {
// Parse the optional flags.
flag.Parse()
// Read the config file.
config := &config{}
file, err := os.Open(*configPath)
if err != nil {
log.Fatal(err)
}
defer file.Close()
if err := yaml.NewDecoder(file).Decode(&config); err != nil {
log.Fatal(err)
}
// Create the connection to the server.
conn, err := grpc.Dial(
fmt.Sprintf("%s:%d", config.Server.Address, config.Server.Port),
grpc.WithInsecure())
if err != nil {
log.Fatal(err)
}
// Defer closing the connection.
defer conn.Close()
// Create the client.
client := proto.NewUsersClient(conn)
// Setup HTTP endpoints.
http.HandleFunc("/register", gateway.Register(client))
http.HandleFunc("/login", gateway.Login(client))
http.HandleFunc("/logout", gateway.Authorize(client, config.Server.Secret, gateway.Logout(client)))
http.HandleFunc("/reset_password", gateway.ResetPassword(client, fmt.Sprintf("%s, %d", config.Domain, config.Port)))
http.HandleFunc("/change_password", gateway.ChangePassword(client))
// Listen for requests.
log.Printf("Forwarding from :%d to %s:%d", config.Port, config.Server.Address, config.Server.Port)
if err := http.ListenAndServe(fmt.Sprintf(":%d", config.Port), nil); err != nil {
log.Fatal(err)
}
}

136
gateway/gateway.go

@ -1,136 +0,0 @@
package gateway
import (
"context"
"encoding/json"
"fmt"
"net/http"
"git.chrishayward.xyz/x/users/proto"
)
func Register(client proto.UsersClient) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var req proto.RegisterRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
return
}
if _, err := client.Register(r.Context(), &req); err != nil {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte(err.Error()))
return
}
w.WriteHeader(http.StatusOK)
})
}
func Login(client proto.UsersClient) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var req proto.LoginRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
res, err := client.Login(r.Context(), &req)
if err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
w.Write([]byte(res.Token.Token))
w.WriteHeader(http.StatusOK)
})
}
func Logout(client proto.UsersClient) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if _, err := client.Logout(r.Context(), &proto.LogoutRequest{
Token: r.Context().Value("token").(*proto.UserToken),
}); err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
w.WriteHeader(http.StatusOK)
})
}
func Authorize(client proto.UsersClient, secret string, next http.HandlerFunc) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var req proto.AuthorizeRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
res, err := client.Authorize(r.Context(), &proto.AuthorizeRequest{
Secret: secret,
Token: req.Token,
})
if err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
ctx := context.WithValue(r.Context(), "user", res.User)
ctx = context.WithValue(ctx, "roles", res.Roles)
ctx = context.WithValue(ctx, "token", &proto.UserToken{
Token: req.Token.Token,
})
next(w, r.WithContext(ctx))
})
}
func ResetPassword(client proto.UsersClient, endpoint string) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var req proto.ResetPasswordRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
res, err := client.ResetPassword(r.Context(), &req)
if err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
w.Write([]byte(fmt.Sprintf(
"Please follow this link to update your password: %s/change_password?token=%s\n",
endpoint, res.Token.Token)))
w.WriteHeader(http.StatusOK)
})
}
func ChangePassword(client proto.UsersClient) http.HandlerFunc {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
var req proto.ChangePasswordRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
if _, err := client.ChangePassword(r.Context(), &req); err != nil {
w.Write([]byte(err.Error()))
w.WriteHeader(http.StatusBadRequest)
return
}
w.WriteHeader(http.StatusOK)
})
}
Loading…
Cancel
Save