add: verification status page
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -36,6 +36,7 @@ go.work
|
||||
|
||||
!*.go
|
||||
!*.html
|
||||
!*.css
|
||||
!go.sum
|
||||
!go.mod
|
||||
!*.sql
|
||||
|
||||
@@ -40,7 +40,6 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Not a valid subscription model"})
|
||||
return
|
||||
}
|
||||
|
||||
regData.User.Membership.SubscriptionModel = *selectedModel
|
||||
// Register User
|
||||
id, token, err := uc.Service.RegisterUser(®Data.User)
|
||||
@@ -51,14 +50,6 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
|
||||
}
|
||||
regData.User.ID = id
|
||||
|
||||
// Register Bank Account
|
||||
/* _, err = uc.BankAccountService.RegisterBankAccount(®Data.User.BankAccount)
|
||||
if err != nil {
|
||||
logger.Error.Printf("Couldn't register bank account: %v", err)
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Couldn't register User-BankAccount"})
|
||||
return
|
||||
} */
|
||||
|
||||
// Register Consents
|
||||
var consents = [2]models.Consent{
|
||||
{
|
||||
@@ -83,14 +74,6 @@ func (uc *UserController) RegisterUser(c *gin.Context) {
|
||||
}
|
||||
}
|
||||
|
||||
// Register Membership
|
||||
/* _, err = uc.MembershipService.RegisterMembership(®Data.User.Membership)
|
||||
if err != nil {
|
||||
logger.Error.Printf("Couldn't register membership: %v", err)
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Couldn't register User-membership"})
|
||||
return
|
||||
} */
|
||||
|
||||
// Send notifications
|
||||
if err := uc.EmailService.SendVerificationEmail(®Data.User, &token); err != nil {
|
||||
logger.Error.Printf("Failed to send email verification email to user: %v", err)
|
||||
@@ -113,26 +96,26 @@ func (uc *UserController) VerifyMailHandler(c *gin.Context) {
|
||||
token := c.Query("token")
|
||||
if token == "" {
|
||||
logger.Error.Println("Missing token to verify mail")
|
||||
c.JSON(http.StatusNoContent, gin.H{"error": "Missing token"})
|
||||
c.HTML(http.StatusBadRequest, "verification_error.html", gin.H{"ErrorMessage": "Missing token"})
|
||||
return
|
||||
}
|
||||
|
||||
user, err := uc.Service.VerifyUser(&token)
|
||||
if err != nil {
|
||||
logger.Error.Printf("Cannot verify user: %v", err)
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Cannot verify user"})
|
||||
c.HTML(http.StatusUnauthorized, "verification_error.html", gin.H{"ErrorMessage": "Emailadresse wurde schon bestätigt. Sollte dies nicht der Fall sein, wende Dich bitte an info@carsharing-hasloh.de."})
|
||||
return
|
||||
}
|
||||
|
||||
membership, err := uc.MembershipService.FindMembershipByUserID(user.ID)
|
||||
if err != nil {
|
||||
logger.Error.Printf("Cannot get membership of user %v: %v", user.ID, err)
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Cannot get Membership of user"})
|
||||
c.HTML(http.StatusInternalServerError, "verifiction_error.html", gin.H{"ErrorMessage": "Nutzer konnte nicht gefunden werden.. Merkwürdig.. wende Dich bitte an info@carsharing-hasloh.de."})
|
||||
return
|
||||
}
|
||||
|
||||
uc.EmailService.SendWelcomeEmail(user, membership)
|
||||
c.Status(http.StatusOK)
|
||||
c.HTML(http.StatusOK, "verification_success.html", gin.H{"FirstName": user.FirstName})
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -7,9 +7,9 @@ type Membership struct {
|
||||
UpdatedAt time.Time
|
||||
StartDate time.Time `json:"start_date"`
|
||||
EndDate time.Time `json:"end_date"`
|
||||
Children *[]User `gorm:"foreignKey:ParentMemberID"`
|
||||
Status string `json:"status"`
|
||||
SubscriptionModel SubscriptionModel `gorm:"foreignKey:SubscriptionModelID" json:"subscription_model"`
|
||||
ParentMembershipID int64 `json:"parent_member_id" validate:"omitempty,omitnil,number"`
|
||||
SubscriptionModelID int64 `json:"subsription_model_id"`
|
||||
ID int64 `json:"id"`
|
||||
UserID int64 `json:"user_id"`
|
||||
|
||||
@@ -25,7 +25,6 @@ type User struct {
|
||||
BankAccount BankAccount `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"bank_account"`
|
||||
Verification Verification `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
|
||||
Membership Membership `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"membership"`
|
||||
ParentMemberID int64 `json:"parent_member_id" validate:"omitempty,number"`
|
||||
ID int64 `gorm:"primaryKey"`
|
||||
PaymentStatus int8 `json:"payment_status"`
|
||||
Status int8 `json:"status"`
|
||||
|
||||
@@ -43,6 +43,9 @@ func Run() {
|
||||
|
||||
router := gin.Default()
|
||||
// gin.SetMode(gin.ReleaseMode)
|
||||
router.Static("/templates/css", "./style")
|
||||
// Load HTML templates
|
||||
router.LoadHTMLGlob("templates/html/*")
|
||||
router.Use(gin.Logger())
|
||||
// router.Use(middlewares.LoggerMiddleware())
|
||||
|
||||
|
||||
28
templates/css/style.css
Normal file
28
templates/css/style.css
Normal file
@@ -0,0 +1,28 @@
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f8f9fa;
|
||||
color: #333;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #0056b3;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 18px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.error-message {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
}
|
||||
@@ -53,7 +53,7 @@
|
||||
<div style="font-weight: normal; padding: 0px 24px 16px 24px">
|
||||
<p>
|
||||
Ein neues Mitglied!!!<br />{{.FirstName}} {{.LastName}} hat
|
||||
sich regitriert.
|
||||
sich registriert.
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
</div>
|
||||
<div style="text-align: center; padding: 16px 24px 16px 24px">
|
||||
<a
|
||||
href="https://carsharing-hasloh/backend/api/verify?token={{.Token}}"
|
||||
href="https://carsharing-hasloh/backend/verify?token={{.Token}}"
|
||||
style="
|
||||
color: #ffffff;
|
||||
font-size: 26px;
|
||||
@@ -122,7 +122,7 @@
|
||||
padding: 4px 24px 16px 24px;
|
||||
"
|
||||
>
|
||||
https://carsharing-hasloh/backend/api/verify?token={{.Token}}
|
||||
https://carsharing-hasloh/backend/verify?token={{.Token}}
|
||||
</div>
|
||||
<div style="font-weight: normal; padding: 16px 24px 16px 24px">
|
||||
Nachdem wir Ihre E-Mail Adresse bestätigen konnten, schicken wir
|
||||
|
||||
108
templates/html/verification_error.html
Normal file
108
templates/html/verification_error.html
Normal file
@@ -0,0 +1,108 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<body style="background-color: #f2f5f7">
|
||||
<div
|
||||
style="
|
||||
color: #242424;
|
||||
font-family: "Helvetica Neue", "Arial Nova",
|
||||
"Nimbus Sans", Arial, sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0.15008px;
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
padding: 32px 0;
|
||||
min-height: 100%;
|
||||
width: 100%;
|
||||
"
|
||||
>
|
||||
<table
|
||||
align="center"
|
||||
width="100%"
|
||||
style="margin: 0 auto; max-width: 600px; background-color: #ffffff"
|
||||
role="presentation"
|
||||
cellspacing="0"
|
||||
cellpadding="0"
|
||||
border="0"
|
||||
>
|
||||
<tbody>
|
||||
<tr style="width: 100%">
|
||||
<td>
|
||||
<div style="padding: 0px 24px 0px 24px">
|
||||
<a
|
||||
href="https://carsharing-hasloh.de"
|
||||
style="text-decoration: none"
|
||||
target="_blank"
|
||||
><img
|
||||
alt="Carsharing-Hasloh"
|
||||
src="https://carsharing-hasloh.de/images/CarsharingSH-Hasloh-LOGO.jpeg"
|
||||
style="
|
||||
outline: none;
|
||||
border: none;
|
||||
text-decoration: none;
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
"
|
||||
/></a>
|
||||
</div>
|
||||
<h1
|
||||
style="
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
font-family: Seravek, "Gill Sans Nova", Ubuntu,
|
||||
Calibri, "DejaVu Sans", source-sans-pro,
|
||||
sans-serif;
|
||||
font-size: 32px;
|
||||
padding: 40px 24px 40px 24px;
|
||||
"
|
||||
>
|
||||
So ein Mist!
|
||||
</h1>
|
||||
<div
|
||||
style="
|
||||
font-size: 48px;
|
||||
font-family: Seravek, "Gill Sans Nova", Ubuntu,
|
||||
Calibri, "DejaVu Sans", source-sans-pro,
|
||||
sans-serif;
|
||||
font-weight: normal;
|
||||
text-align: center;
|
||||
padding: 0px 24px 24px 24px;
|
||||
"
|
||||
>
|
||||
🧐
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
font-family: Seravek, "Gill Sans Nova", Ubuntu,
|
||||
Calibri, "DejaVu Sans", source-sans-pro,
|
||||
sans-serif;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
padding: 0px 24px 16px 24px;
|
||||
"
|
||||
>
|
||||
Da ist etwas schiefgelaufen, wir konnten Deine E-Mail Adresse
|
||||
nicht bestätigen:
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
font-size: 17px;
|
||||
font-family: Seravek, "Gill Sans Nova", Ubuntu,
|
||||
Calibri, "DejaVu Sans", source-sans-pro,
|
||||
sans-serif;
|
||||
font-weight: normal;
|
||||
text-align: center;
|
||||
padding: 0px 24px 80px 24px;
|
||||
"
|
||||
>
|
||||
{{ .ErrorMessage }}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
94
templates/html/verification_success.html
Normal file
94
templates/html/verification_success.html
Normal file
@@ -0,0 +1,94 @@
|
||||
<!doctype html>
|
||||
<html>
|
||||
<body style="background-color: #f2f5f7">
|
||||
<div
|
||||
style="
|
||||
color: #242424;
|
||||
font-family: "Helvetica Neue", "Arial Nova",
|
||||
"Nimbus Sans", Arial, sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 400;
|
||||
letter-spacing: 0.15008px;
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
padding: 32px 0;
|
||||
min-height: 100%;
|
||||
width: 100%;
|
||||
"
|
||||
>
|
||||
<table
|
||||
align="center"
|
||||
width="100%"
|
||||
style="margin: 0 auto; max-width: 600px; background-color: #ffffff"
|
||||
role="presentation"
|
||||
cellspacing="0"
|
||||
cellpadding="0"
|
||||
border="0"
|
||||
>
|
||||
<tbody>
|
||||
<tr style="width: 100%">
|
||||
<td>
|
||||
<div style="padding: 0px 24px 0px 24px">
|
||||
<a
|
||||
href="https://carsharing-hasloh.de"
|
||||
style="text-decoration: none"
|
||||
target="_blank"
|
||||
><img
|
||||
alt="Carsharing-Hasloh"
|
||||
src="https://carsharing-hasloh.de/images/CarsharingSH-Hasloh-LOGO.jpeg"
|
||||
style="
|
||||
outline: none;
|
||||
border: none;
|
||||
text-decoration: none;
|
||||
vertical-align: middle;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
"
|
||||
/></a>
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
font-size: 23px;
|
||||
font-family: Seravek, "Gill Sans Nova", Ubuntu,
|
||||
Calibri, "DejaVu Sans", source-sans-pro,
|
||||
sans-serif;
|
||||
font-weight: normal;
|
||||
text-align: center;
|
||||
padding: 36px 24px 36px 24px;
|
||||
"
|
||||
>
|
||||
Herzlich Willkommen {{.FirstName}}👋,
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
font-family: Seravek, "Gill Sans Nova", Ubuntu,
|
||||
Calibri, "DejaVu Sans", source-sans-pro,
|
||||
sans-serif;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
padding: 0px 24px 16px 24px;
|
||||
"
|
||||
>
|
||||
Vielen Dank für die Registrierung Deiner E-Mail Adresse.
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
font-size: 17px;
|
||||
font-family: Seravek, "Gill Sans Nova", Ubuntu,
|
||||
Calibri, "DejaVu Sans", source-sans-pro,
|
||||
sans-serif;
|
||||
font-weight: normal;
|
||||
text-align: center;
|
||||
padding: 0px 24px 80px 24px;
|
||||
"
|
||||
>
|
||||
Weitere Informationen wurden soeben an Deine E-Mail Adresse
|
||||
gesandt!
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user