Skip to content

Commit 903b781

Browse files
authored
Removed lang path parameter from routes. Use cookie for locale setting instead
1 parent b095997 commit 903b781

35 files changed

+188
-185
lines changed

internal/webserver/authentication_test.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func TestAuthentication(t *testing.T) {
2929

3030
t.Run("Try to log in with good and bad credentials", func(t *testing.T) {
3131
// Check that login page is accessible
32-
req, err := http.NewRequest(http.MethodGet, "/en/sessions/new", nil)
32+
req, err := http.NewRequest(http.MethodGet, "/sessions/new", nil)
3333
if err != nil {
3434
t.Fatalf("Unexpected error: %v", err.Error())
3535
}
@@ -42,7 +42,7 @@ func TestAuthentication(t *testing.T) {
4242
}
4343

4444
// Use no credentials to log in
45-
req, err = http.NewRequest(http.MethodPost, "/en/sessions", nil)
45+
req, err = http.NewRequest(http.MethodPost, "/sessions", nil)
4646
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
4747
if err != nil {
4848
t.Fatalf("Unexpected error: %v", err.Error())
@@ -56,7 +56,7 @@ func TestAuthentication(t *testing.T) {
5656
}
5757

5858
// Use good credentials to log in
59-
req, err = http.NewRequest(http.MethodPost, "/en/sessions", strings.NewReader(data.Encode()))
59+
req, err = http.NewRequest(http.MethodPost, "/sessions", strings.NewReader(data.Encode()))
6060
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
6161
if err != nil {
6262
t.Fatalf("Unexpected error: %v", err.Error())
@@ -75,8 +75,8 @@ func TestAuthentication(t *testing.T) {
7575
t.Error("No location header present")
7676
return
7777
}
78-
if url.Path != "/en" {
79-
t.Errorf("Expected location %s, received %s", "/en", url.Path)
78+
if url.Path != "/" {
79+
t.Errorf("Expected location %s, received %s", "/", url.Path)
8080
}
8181
})
8282
}
@@ -85,7 +85,7 @@ func TestRecoverNoEmailService(t *testing.T) {
8585
db := infrastructure.Connect(":memory:?cache=shared", 250)
8686
app := bootstrapApp(db, &infrastructure.NoEmail{}, afero.NewMemMapFs(), webserver.Config{})
8787

88-
req, err := http.NewRequest(http.MethodGet, "/en/recover", nil)
88+
req, err := http.NewRequest(http.MethodGet, "/recover", nil)
8989
if err != nil {
9090
t.Fatalf("Unexpected error: %v", err.Error())
9191
}
@@ -127,7 +127,7 @@ func TestRecover(t *testing.T) {
127127
t.Run("Check that recover page is accessible", func(t *testing.T) {
128128
reset(2 * time.Hour)
129129

130-
req, err := http.NewRequest(http.MethodGet, "/en/recover", nil)
130+
req, err := http.NewRequest(http.MethodGet, "/recover", nil)
131131
if err != nil {
132132
t.Fatalf("Unexpected error: %v", err.Error())
133133
}
@@ -143,7 +143,7 @@ func TestRecover(t *testing.T) {
143143
t.Run("Check that not posting an email returns an error", func(t *testing.T) {
144144
reset(2 * time.Hour)
145145

146-
req, err := http.NewRequest(http.MethodPost, "/en/recover", nil)
146+
req, err := http.NewRequest(http.MethodPost, "/recover", nil)
147147
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
148148
if err != nil {
149149
t.Fatalf("Unexpected error: %v", err.Error())
@@ -180,7 +180,7 @@ func TestRecover(t *testing.T) {
180180
"email": {"unknown@example.com"},
181181
}
182182

183-
req, err := http.NewRequest(http.MethodPost, "/en/recover", strings.NewReader(data.Encode()))
183+
req, err := http.NewRequest(http.MethodPost, "/recover", strings.NewReader(data.Encode()))
184184
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
185185
if err != nil {
186186
t.Fatalf("Unexpected error: %v", err.Error())
@@ -202,7 +202,7 @@ func TestRecover(t *testing.T) {
202202
t.Run("Try to access the update password without the recovery ID", func(t *testing.T) {
203203
reset(2 * time.Hour)
204204

205-
req, err := http.NewRequest(http.MethodGet, "/en/reset-password", nil)
205+
req, err := http.NewRequest(http.MethodGet, "/reset-password", nil)
206206
if err != nil {
207207
t.Fatalf("Unexpected error: %v", err.Error())
208208
}
@@ -218,7 +218,7 @@ func TestRecover(t *testing.T) {
218218
t.Run("Check that posting an existing email sends a recovery email and resetting the password successfully redirects to the login page", func(t *testing.T) {
219219
reset(2 * time.Hour)
220220

221-
req, err := http.NewRequest(http.MethodPost, "/en/recover", strings.NewReader(data.Encode()))
221+
req, err := http.NewRequest(http.MethodPost, "/recover", strings.NewReader(data.Encode()))
222222
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
223223
if err != nil {
224224
t.Fatalf("Unexpected error: %v", err.Error())
@@ -248,7 +248,7 @@ func TestRecover(t *testing.T) {
248248
"id": {adminUser.RecoveryUUID},
249249
}
250250

251-
req, err = http.NewRequest(http.MethodPost, "/en/reset-password", strings.NewReader(data.Encode()))
251+
req, err = http.NewRequest(http.MethodPost, "/reset-password", strings.NewReader(data.Encode()))
252252
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
253253
if err != nil {
254254
t.Fatalf("Unexpected error: %v", err.Error())
@@ -267,14 +267,14 @@ func TestRecover(t *testing.T) {
267267
t.Error("No location header present")
268268
return
269269
}
270-
if expectedURL := "/en/sessions"; url.Path != expectedURL {
270+
if expectedURL := "/sessions"; url.Path != expectedURL {
271271
t.Errorf("Expected location %s, received %s", expectedURL, url.Path)
272272
}
273273

274274
// Try to access again to the reset password page with the same recovery ID leads to an error
275275
db.Where("email = ?", "admin@example.com").First(&adminUser)
276276

277-
req, err = http.NewRequest(http.MethodGet, "/en/reset-password", nil)
277+
req, err = http.NewRequest(http.MethodGet, "/reset-password", nil)
278278
if err != nil {
279279
t.Fatalf("Unexpected error: %v", err.Error())
280280
}
@@ -295,7 +295,7 @@ func TestRecover(t *testing.T) {
295295
t.Run("Check that using a timed out link returns an error", func(t *testing.T) {
296296
reset(0 * time.Hour)
297297

298-
req, err := http.NewRequest(http.MethodPost, "/en/recover", strings.NewReader(data.Encode()))
298+
req, err := http.NewRequest(http.MethodPost, "/recover", strings.NewReader(data.Encode()))
299299
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
300300
if err != nil {
301301
t.Fatalf("Unexpected error: %v", err.Error())
@@ -315,7 +315,7 @@ func TestRecover(t *testing.T) {
315315
adminUser := model.User{}
316316
db.Where("email = ?", "admin@example.com").First(&adminUser)
317317

318-
req, err = http.NewRequest(http.MethodGet, fmt.Sprintf("/en/reset-password?id=%s", adminUser.RecoveryUUID), nil)
318+
req, err = http.NewRequest(http.MethodGet, fmt.Sprintf("/reset-password?id=%s", adminUser.RecoveryUUID), nil)
319319
if err != nil {
320320
t.Fatalf("Unexpected error: %v", err.Error())
321321
}
@@ -336,7 +336,7 @@ func TestRecover(t *testing.T) {
336336
"id": {adminUser.RecoveryUUID},
337337
}
338338

339-
req, err = http.NewRequest(http.MethodPost, "/en/reset-password", strings.NewReader(data.Encode()))
339+
req, err = http.NewRequest(http.MethodPost, "/reset-password", strings.NewReader(data.Encode()))
340340
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
341341
if err != nil {
342342
t.Fatalf("Unexpected error: %v", err.Error())

internal/webserver/controller/auth/login.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ import (
1010

1111
func (a *Controller) Login(c *fiber.Ctx) error {
1212
resetPassword := fmt.Sprintf(
13-
"%s/%s/reset-password",
13+
"%s/reset-password",
1414
c.Locals("fqdn").(string),
15-
c.Params("lang"),
1615
)
1716

1817
msg := ""

internal/webserver/controller/auth/request.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,18 @@ func (a *Controller) Request(c *fiber.Ctx) error {
3636
}
3737

3838
recoveryLink := fmt.Sprintf(
39-
"%s/%s/reset-password?id=%s",
39+
"%s/reset-password?id=%s",
4040
c.Locals("fqdn"),
41-
c.Params("lang"),
4241
user.RecoveryUUID,
4342
)
4443
c.Render("auth/email", fiber.Map{
45-
"Lang": c.Params("lang"),
4644
"RecoveryLink": recoveryLink,
4745
"RecoveryTimeout": strconv.FormatFloat(a.config.RecoveryTimeout.Hours(), 'f', -1, 64),
4846
})
4947

5048
return a.sender.Send(
5149
c.FormValue("email"),
52-
a.printers[c.Params("lang")].Sprintf("Password recovery request"),
50+
a.printers[c.Locals("Lang").(string)].Sprintf("Password recovery request"),
5351
string(c.Response().Body()),
5452
)
5553
}

internal/webserver/controller/auth/reset-password.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package auth
22

33
import (
4-
"fmt"
54
"time"
65

76
"github.com/gofiber/fiber/v2"
@@ -45,7 +44,7 @@ func (a *Controller) UpdatePassword(c *fiber.Ctx) error {
4544
return fiber.ErrInternalServerError
4645
}
4746

48-
return c.Redirect(fmt.Sprintf("/%s/sessions", c.Params("lang")))
47+
return c.Redirect("/sessions")
4948
}
5049

5150
func (a *Controller) validateRecoveryAccess(recoveryUuid string) (*model.User, error) {

internal/webserver/controller/auth/signin.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package auth
22

33
import (
4-
"fmt"
54
"strings"
65
"time"
76

@@ -51,7 +50,7 @@ func (a *Controller) SignIn(c *fiber.Ctx) error {
5150
return c.Redirect(referer)
5251
}
5352

54-
return c.Redirect(fmt.Sprintf("/%s", c.Params("lang")))
53+
return c.Redirect("/")
5554
}
5655

5756
func GenerateToken(c *fiber.Ctx, user *model.User, expiration time.Time, secret []byte) (string, error) {

internal/webserver/controller/document/upload.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (d *Controller) Upload(c *fiber.Ctx) error {
7878
return internalServerErrorStatus
7979
}
8080

81-
return c.Redirect(fmt.Sprintf("/%s/documents/%s?success=1", c.Params("lang"), slug))
81+
return c.Redirect(fmt.Sprintf("/documents/%s?success=1", slug))
8282
}
8383

8484
func fileToBytes(fileHeader *multipart.FileHeader) ([]byte, error) {

internal/webserver/controller/user/create.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package user
22

33
import (
4-
"fmt"
54
"strconv"
65
"strings"
76

@@ -47,5 +46,5 @@ func (u *Controller) Create(c *fiber.Ctx) error {
4746
return fiber.ErrInternalServerError
4847
}
4948

50-
return c.Redirect(fmt.Sprintf("/%s/users", c.Params("lang")))
49+
return c.Redirect("/users")
5150
}

internal/webserver/document_detail_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ func TestDocumentAndRead(t *testing.T) {
1818
url string
1919
expectedStatus int
2020
}{
21-
{"/en/documents/miguel-de-cervantes-y-saavedra-don-quijote-de-la-mancha/read", http.StatusOK},
22-
{"/en/documents/miguel-de-cervantes-y-saavedra-don-quijote-de-la-mancha--2/read", http.StatusOK},
23-
{"/en/documents/miguel-de-cervantes-y-saavedra-don-quijote-de-la-mancha--3/read", http.StatusOK},
24-
{"/en/documents/miguel-de-cervantes-y-saavedra-don-quijote-de-la-mancha", http.StatusOK},
21+
{"/documents/miguel-de-cervantes-y-saavedra-don-quijote-de-la-mancha/read", http.StatusOK},
22+
{"/documents/miguel-de-cervantes-y-saavedra-don-quijote-de-la-mancha--2/read", http.StatusOK},
23+
{"/documents/miguel-de-cervantes-y-saavedra-don-quijote-de-la-mancha--3/read", http.StatusOK},
24+
{"/documents/miguel-de-cervantes-y-saavedra-don-quijote-de-la-mancha", http.StatusOK},
2525
}
2626

2727
for _, tcase := range cases {

internal/webserver/embedded/views/auth/edit-password.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<h2 class="pb-5">{{t .Lang "Set new password"}}</h2>
2-
<form method="post" action="/{{.Lang}}/reset-password">
2+
<form method="post" action="/reset-password">
33
<div class="mb-3">
44
<label for="password" class="form-label">{{t .Lang "New password"}}</label>
55
<input type="password" name="password"

internal/webserver/embedded/views/auth/login.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<form method="post" action="/{{.Lang}}/sessions">
1+
<form method="post" action="/sessions">
22
<h2 class="h3 mb-3 fw-normal">{{t .Lang "Please sign in"}}</h2>
33

44
<div class="form-floating">
@@ -9,7 +9,7 @@ <h2 class="h3 mb-3 fw-normal">{{t .Lang "Please sign in"}}</h2>
99
<input type="password" class="form-control" id="floatingPassword" placeholder="Password" name="password">
1010
<label for="floatingPassword">{{t .Lang "Password"}}</label>
1111
{{if .EmailSendingConfigured}}
12-
<div id="passwordHelp" class="form-text text-end pb-5"><a href="/{{.Lang}}/recover">{{t .Lang "I don't remember my password"}}</a></div>
12+
<div id="passwordHelp" class="form-text text-end pb-5"><a href="/recover">{{t .Lang "I don't remember my password"}}</a></div>
1313
{{end}}
1414
</div>
1515

internal/webserver/embedded/views/auth/recover.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<section class="pb-5">
22
<h2 class="pb-5">{{t .Lang "Recover password"}}</h2>
3-
<form method="post" action="/{{.Lang}}/recover" autocomplete="off">
3+
<form method="post" action="/recover" autocomplete="off">
44
<div class="mb-3">
55
<label for="email" class="form-label">{{t .Lang "Email"}}</label>
66
<div class="input-group">

0 commit comments

Comments
 (0)