loading up the forgejo repo on tangled to test page performance
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request '[BUG] First user created through reverse proxy should be admin' (#4549) from gusted/forgejo-reverseproxy-admin into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/4549
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Reviewed-by: Radosław Piliszek <radek@piliszek.it>

Gusted 78e4736d 1cab8788

+72
+5
services/auth/reverseproxy.go
··· 164 164 IsActive: optional.Some(true), 165 165 } 166 166 167 + // The first user created should be an admin. 168 + if user_model.CountUsers(req.Context(), nil) == 0 { 169 + user.IsAdmin = true 170 + } 171 + 167 172 if err := user_model.CreateUser(req.Context(), user, &overwriteDefault); err != nil { 168 173 // FIXME: should I create a system notice? 169 174 log.Error("CreateUser: %v", err)
+67
services/auth/reverseproxy_test.go
··· 1 + // Copyright 2024 The Forgejo Authors. All rights reserved. 2 + // SPDX-License-Identifier: MIT 3 + 4 + package auth 5 + 6 + import ( 7 + "net/http" 8 + "testing" 9 + 10 + "code.gitea.io/gitea/models/db" 11 + "code.gitea.io/gitea/models/unittest" 12 + user_model "code.gitea.io/gitea/models/user" 13 + "code.gitea.io/gitea/modules/setting" 14 + "code.gitea.io/gitea/modules/test" 15 + 16 + "github.com/stretchr/testify/require" 17 + ) 18 + 19 + func TestReverseProxyAuth(t *testing.T) { 20 + defer test.MockVariableValue(&setting.Service.EnableReverseProxyEmail, true)() 21 + defer test.MockVariableValue(&setting.Service.EnableReverseProxyFullName, true)() 22 + defer test.MockVariableValue(&setting.Service.EnableReverseProxyFullName, true)() 23 + require.NoError(t, unittest.PrepareTestDatabase()) 24 + 25 + require.NoError(t, db.TruncateBeans(db.DefaultContext, &user_model.User{})) 26 + require.EqualValues(t, 0, user_model.CountUsers(db.DefaultContext, nil)) 27 + 28 + t.Run("First user should be admin", func(t *testing.T) { 29 + req, err := http.NewRequest("GET", "/", nil) 30 + require.NoError(t, err) 31 + 32 + req.Header.Add(setting.ReverseProxyAuthUser, "Edgar") 33 + req.Header.Add(setting.ReverseProxyAuthFullName, "Edgar Allan Poe") 34 + req.Header.Add(setting.ReverseProxyAuthEmail, "edgar@example.org") 35 + 36 + rp := &ReverseProxy{} 37 + user := rp.newUser(req) 38 + 39 + require.EqualValues(t, 1, user_model.CountUsers(db.DefaultContext, nil)) 40 + unittest.AssertExistsAndLoadBean(t, &user_model.User{Email: "edgar@example.org", Name: "Edgar", LowerName: "edgar", FullName: "Edgar Allan Poe", IsAdmin: true}) 41 + require.EqualValues(t, "edgar@example.org", user.Email) 42 + require.EqualValues(t, "Edgar", user.Name) 43 + require.EqualValues(t, "edgar", user.LowerName) 44 + require.EqualValues(t, "Edgar Allan Poe", user.FullName) 45 + require.True(t, user.IsAdmin) 46 + }) 47 + 48 + t.Run("Second user shouldn't be admin", func(t *testing.T) { 49 + req, err := http.NewRequest("GET", "/", nil) 50 + require.NoError(t, err) 51 + 52 + req.Header.Add(setting.ReverseProxyAuthUser, " Gusted ") 53 + req.Header.Add(setting.ReverseProxyAuthFullName, "❤‿❤") 54 + req.Header.Add(setting.ReverseProxyAuthEmail, "gusted@example.org") 55 + 56 + rp := &ReverseProxy{} 57 + user := rp.newUser(req) 58 + 59 + require.EqualValues(t, 2, user_model.CountUsers(db.DefaultContext, nil)) 60 + unittest.AssertExistsAndLoadBean(t, &user_model.User{Email: "gusted@example.org", Name: "Gusted", LowerName: "gusted", FullName: "❤‿❤"}, "is_admin = false") 61 + require.EqualValues(t, "gusted@example.org", user.Email) 62 + require.EqualValues(t, "Gusted", user.Name) 63 + require.EqualValues(t, "gusted", user.LowerName) 64 + require.EqualValues(t, "❤‿❤", user.FullName) 65 + require.False(t, user.IsAdmin) 66 + }) 67 + }