diff --git a/src/emailnotification/main.go b/src/emailnotification/main.go index 2dbadfe5388aafc762a4b14f76c9376a7dbe4be0..20b5a1718a43315a189248b40627189cc9508410 100644 --- a/src/emailnotification/main.go +++ b/src/emailnotification/main.go @@ -16,7 +16,7 @@ func main() { if err != nil { log.Fatalf("unable to connect to nats", err) } - nc.Subscribe("confirmOrder", func(m *nats.Msg) { + nc.Subscribe("confirmOrder.*", func(m *nats.Msg) { var ( req model.EmialContent res model.Response @@ -25,9 +25,13 @@ func main() { panic(err) } - // hier email verschicken auslösen, wenn kein error --> dann response tru verschicken - - res.Send = true + emailadre, emailcontent, emailtype := service.CreateEmail(req, "confirm") + err := service.SendEmail(emailadre, emailcontent, emailtype) + if err != nil { + res.Send = false + } else { + res.Send = true + } e, errMarshal := json.Marshal(res) if errMarshal != nil { fmt.Println(errMarshal) @@ -36,7 +40,7 @@ func main() { nc.Publish(m.Reply, []byte(e)) }) - nc.Subscribe("confirmCancel", func(m *nats.Msg) { + nc.Subscribe("confirmCancel.*", func(m *nats.Msg) { var ( req model.EmialContent res model.Response @@ -44,7 +48,12 @@ func main() { if err := json.Unmarshal(m.Data, &req); err != nil { panic(err) } - res.Send = true + emailadre, emailcontent, emailtype := service.CreateEmail(req, "cancel") + if err := service.SendEmail(emailadre, emailcontent, emailtype); err != nil { + res.Send = false + } else { + res.Send = true + } e, errMarshal := json.Marshal(res) if errMarshal != nil { fmt.Println(errMarshal) diff --git a/src/emailnotification/model/emailContent.go b/src/emailnotification/model/emailContent.go index 7c854114d7c9fb008c18882606cdb25da1e79b62..5a7867cd142ec0802e44c25d342aed04a441285c 100644 --- a/src/emailnotification/model/emailContent.go +++ b/src/emailnotification/model/emailContent.go @@ -1,6 +1,7 @@ package model type EmialContent struct { + OrderID string `json:"orderid"` Name string `json:"name"` AwayMatch bool `json:"awaymatch"` Location string `json:"location"` diff --git a/src/emailnotification/service/email.go b/src/emailnotification/service/email.go index f4276c382691b3628620654af463e2c1ecf759a3..9572f56715db3b1ceb1906807be14a10acd1131f 100644 --- a/src/emailnotification/service/email.go +++ b/src/emailnotification/service/email.go @@ -13,19 +13,20 @@ import ( ) func CreateEmail(emailContenct model.EmialContent, subject string) (string, string, string) { - if subject == "confirmOrder" { - return emailContenct.Emailadress, fmt.Sprintf("Hallo Herr/Frau, %s\r\nHiermit bestaetigen wird deine Bestellung fuer das VFB Spiel in %s, am %s", emailContenct.Name, emailContenct.Location, emailContenct.Date), "Confirm Cancelation" + if subject == "confirm" { + return emailContenct.Emailadress, fmt.Sprintf("Hallo Herr/Frau, %s\r\nHiermit bestaetigen wird deine Bestellung fuer das VFB Spiel in %s, am %s", emailContenct.Name, emailContenct.Location, emailContenct.Date), "Confirm Order" } - if subject == "confirmCancelation" { - return emailContenct.Emailadress, fmt.Sprintf("Hallo Herr/Frau, %s\r\nHiermit bestaetigen wird die Stornierung deiner Bestellung fuer das VFB Spiel in %s, am %s", emailContenct.Name, emailContenct.Location, emailContenct.Date), "Confirm Order" + if subject == "cancel" { + return emailContenct.Emailadress, fmt.Sprintf("Hallo Herr/Frau, %s\r\nHiermit bestaetigen wird die Stornierung deiner Bestellung fuer das VFB Spiel in %s, am %s", emailContenct.Name, emailContenct.Location, emailContenct.Date), "Confirm Cancelation" } return "", "", "" } -func SendEmail(receiver string, body string, subject string) { +func SendEmail(receiver string, body string, subject string) error { err := godotenv.Load(".env") if err != nil { log.Fatalf("Error loading .env file") + return fmt.Errorf("Error loading .env file") } from := mail.Address{ @@ -33,9 +34,8 @@ func SendEmail(receiver string, body string, subject string) { Address: os.Getenv("EMAIL_ADRESS"), } - fmt.Println(from) - // das von oben nehmen - toList := []string{"yannick.ege@web.de"} + toList := []string{} + toList = append(toList, receiver) header := make(map[string]string) header["From"] = from.String() @@ -56,9 +56,7 @@ func SendEmail(receiver string, body string, subject string) { err1 := smtp.SendMail(smtpServer+":"+smtpPort, auth, from.Address, toList, []byte(message)) if err1 != nil { - fmt.Println(err1) - os.Exit(1) + return err1 } - - fmt.Println("E-Mail erfolgreich gesendet.") + return nil } diff --git a/src/highlanderticketing/config/oauthconf.go b/src/highlanderticketing/config/oauthconf.go index 65bce4c567c17425589f044270b18aaa3ada1f21..b1013e8758eb63bd5d482df1ee146d3c4bfec4e0 100644 --- a/src/highlanderticketing/config/oauthconf.go +++ b/src/highlanderticketing/config/oauthconf.go @@ -5,11 +5,25 @@ import ( "golang.org/x/oauth2/google" ) -func GetOAuthConfig() *oauth2.Config { +// in env varialben packen +func GetOAuthConfigLogin() *oauth2.Config { return &oauth2.Config{ ClientID: "20993146996-uvmr7479e3qmhiu9gasko3lr163ll76j.apps.googleusercontent.com", ClientSecret: "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", - RedirectURL: "http://localhost:8000/callback", + RedirectURL: "http://localhost:8000/callback/login", + Scopes: []string{ + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile", + }, + Endpoint: google.Endpoint, + } +} + +func GetOAuthConfigRegister() *oauth2.Config { + return &oauth2.Config{ + ClientID: "20993146996-uvmr7479e3qmhiu9gasko3lr163ll76j.apps.googleusercontent.com", + ClientSecret: "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", + RedirectURL: "http://localhost:8000/callback/register", Scopes: []string{ "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile", diff --git a/src/highlanderticketing/handler/oauth.go b/src/highlanderticketing/handler/oauth.go index 4865490eafa1286292fd50bb9a9cae9ee88760c5..90fd848b3d5acd0756cf6eed3d470437755b413a 100644 --- a/src/highlanderticketing/handler/oauth.go +++ b/src/highlanderticketing/handler/oauth.go @@ -13,13 +13,18 @@ import ( ) func HandleLogin(w http.ResponseWriter, r *http.Request) { - oauthConfig := config.GetOAuthConfig() + oauthConfig := config.GetOAuthConfigLogin() url := oauthConfig.AuthCodeURL("state", oauth2.AccessTypeOffline) http.Redirect(w, r, url, http.StatusTemporaryRedirect) } -func HandleCallback(w http.ResponseWriter, r *http.Request) { - oauthConfig := config.GetOAuthConfig() +func HandleRegister(w http.ResponseWriter, r *http.Request) { + oauthConfig := config.GetOAuthConfigRegister() + url := oauthConfig.AuthCodeURL("state", oauth2.AccessTypeOffline) + http.Redirect(w, r, url, http.StatusTemporaryRedirect) +} +func HandleCallbackRegister(w http.ResponseWriter, r *http.Request) { + oauthConfig := config.GetOAuthConfigRegister() code := r.URL.Query().Get("code") token, err := oauthConfig.Exchange(context.Background(), code) if err != nil { @@ -28,6 +33,17 @@ func HandleCallback(w http.ResponseWriter, r *http.Request) { return } service.Register(token.AccessToken) +} + +func HandleCallback(w http.ResponseWriter, r *http.Request) { + oauthConfig := config.GetOAuthConfigLogin() + code := r.URL.Query().Get("code") + token, err := oauthConfig.Exchange(context.Background(), code) + if err != nil { + log.Println("Fehler beim Austausch des Autorisierungscodes:", err) + http.Error(w, "Fehler beim Authentifizieren", http.StatusInternalServerError) + return + } sendJson(w, token.AccessToken) } diff --git a/src/highlanderticketing/main.go b/src/highlanderticketing/main.go index 69278d401d7111602895824781ff5cd64e2e9af9..6b9a4ea94576ae2449320354bc15b1703a917ebf 100644 --- a/src/highlanderticketing/main.go +++ b/src/highlanderticketing/main.go @@ -4,6 +4,7 @@ import ( "fmt" "net/http" "os" + "strconv" "github.com/gorilla/mux" "github.com/joho/godotenv" @@ -16,12 +17,12 @@ import ( ) func main() { - /*service.DeleteAllUsers() + service.DeleteAllUsers() var userArray []model.User userArray, _ = service.GetAllUsers() - fmt.Println(userArray) - service.DeleteAllMatches() - api.GetMatchesOfApiToDb("https://api.openligadb.de/getmatchesbyteamid/16/5/0")*/ + fmt.Println(userArray) /* + service.DeleteAllMatches() + api.GetMatchesOfApiToDb("https://api.openligadb.de/getmatchesbyteamid/16/5/0")*/ if err := godotenv.Load(".env"); err != nil { log.Fatalf("Error loading .env file") @@ -45,14 +46,16 @@ func main() { } fmt.Println("Connected to NATS at:", natsServer.Nc.ConnectedUrl()) - - e := model.EmialContent{Name: "aa", AwayMatch: true, Location: "ss", Date: "aaa", Emailadress: "aaa"} + var nr = strconv.Itoa(1) + e := model.EmialContent{Name: "aa", AwayMatch: true, Location: "ss", Date: "aaa", Emailadress: "yannick.ege@web.de", OrderID: nr} natsServer.ConfirmOrder(&e) log.Println("Starting Highlander Ticketing server") router := mux.NewRouter() + router.HandleFunc("/register", handler.HandleRegister).Methods("GET") + router.HandleFunc("/callback/register", handler.HandleCallback).Methods("GET") router.HandleFunc("/login", handler.HandleLogin).Methods("GET") - router.HandleFunc("/callback", handler.HandleCallback).Methods("GET") + router.HandleFunc("/callback/login", handler.HandleCallback).Methods("GET") router.HandleFunc("/health", handler.Health).Methods("GET") router.HandleFunc("/match", handler.CreateMatch).Methods("POST") router.HandleFunc("/matches", handler.GetAllMatches).Methods("GET") diff --git a/src/highlanderticketing/model/emailContent.go b/src/highlanderticketing/model/emailContent.go index 7c854114d7c9fb008c18882606cdb25da1e79b62..5a7867cd142ec0802e44c25d342aed04a441285c 100644 --- a/src/highlanderticketing/model/emailContent.go +++ b/src/highlanderticketing/model/emailContent.go @@ -1,6 +1,7 @@ package model type EmialContent struct { + OrderID string `json:"orderid"` Name string `json:"name"` AwayMatch bool `json:"awaymatch"` Location string `json:"location"` diff --git a/src/highlanderticketing/service/nats.go b/src/highlanderticketing/service/nats.go index cacd302e13d715edc4d50376b3eb2d44a1b8918e..59b22dceca44f179138aa63a608e69fe86e61baa 100644 --- a/src/highlanderticketing/service/nats.go +++ b/src/highlanderticketing/service/nats.go @@ -15,16 +15,37 @@ type NatsServer struct { } func (s NatsServer) ConfirmOrder(e *model.EmialContent) { + var res *model.Response emailContenct, errMarshal := json.Marshal(e) if errMarshal != nil { fmt.Println(errMarshal) return } - response, err := s.Nc.Request("confirmOrder", []byte(emailContenct), 2*time.Second) + response, err := s.Nc.Request("confirmOrder."+string(e.OrderID), []byte(emailContenct), 2*time.Second) if err != nil { log.Println("Error making NATS request:", err) } - fmt.Println("hier die nats response", string(response.Data)) + + if err := json.Unmarshal(response.Data, &res); err != nil { + panic(err) + } + fmt.Println("hier die nats response", *res) } -// hier dann confirm cancel +func (s NatsServer) confirmCancel(e *model.EmialContent) { + var res *model.Response + emailContenct, errMarshal := json.Marshal(e) + if errMarshal != nil { + fmt.Println(errMarshal) + return + } + response, err := s.Nc.Request("confirmOrder."+string(e.Emailadress), []byte(emailContenct), 2*time.Second) + if err != nil { + log.Println("Error making NATS request:", err) + } + + if err := json.Unmarshal(response.Data, &res); err != nil { + panic(err) + } + fmt.Println("hier die nats response", &res) +} diff --git a/src/highlanderticketing/service/user.go b/src/highlanderticketing/service/user.go index 25fd0be8d6cfac9c36f025ebef53bc96c32060bb..d398fc74915b7ef07a9afa926eea607d64ec23ae 100644 --- a/src/highlanderticketing/service/user.go +++ b/src/highlanderticketing/service/user.go @@ -52,11 +52,14 @@ func CreateUser(user *model.User) error { result := collection.FindOneAndUpdate(context.TODO(), filter, update, options) if result.Err() == mongo.ErrNoDocuments { + fmt.Println(3) return nil // dokument wurd erstellt } else if result.Err() != nil { + fmt.Println(2) return result.Err() // fehler beim process an sich } else { - return nil // erstellt oder nicht aktualisiert + fmt.Println(1) + return fmt.Errorf("Der Benutzer existiert bereits") } }