From addc60d59cdc845f004e2fb74fe4f4909b159862 Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 17 Jun 2026 17:10:22 +0300 Subject: [PATCH 1/8] tests: improve coverage for resources controller --- .../controller/resources_controller_test.go | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/internal/controller/resources_controller_test.go b/internal/controller/resources_controller_test.go index fe8cf48b..540a899a 100644 --- a/internal/controller/resources_controller_test.go +++ b/internal/controller/resources_controller_test.go @@ -9,6 +9,7 @@ import ( "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/tinyauthapp/tinyauth/internal/model" "github.com/tinyauthapp/tinyauth/internal/test" ) @@ -18,8 +19,12 @@ func TestResourcesController(t *testing.T) { err := os.MkdirAll(cfg.Resources.Path, 0777) require.NoError(t, err) + // create a "backup" of the original configuration to restore after each test + originalCfg := cfg.Resources + type testCase struct { description string + customCfg *model.ResourcesConfig run func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) } @@ -52,6 +57,32 @@ func TestResourcesController(t *testing.T) { assert.Equal(t, 404, recorder.Code) }, }, + { + description: "Ensure resources controller returns 404 when resources path is empty", + customCfg: &model.ResourcesConfig{ + Path: "", + Enabled: true, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/resources/testfile.txt", nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 404, recorder.Code) + }, + }, + { + description: "Ensure resources controller returns 403 when resources are disabled", + customCfg: &model.ResourcesConfig{ + Path: cfg.Resources.Path, + Enabled: false, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/resources/testfile.txt", nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 403, recorder.Code) + }, + }, } testFilePath := cfg.Resources.Path + "/testfile.txt" @@ -68,6 +99,14 @@ func TestResourcesController(t *testing.T) { group := router.Group("/") gin.SetMode(gin.TestMode) + // if custom configuration is provided, override the default config + if test.customCfg != nil { + cfg.Resources = *test.customCfg + } else { + // Reset to default configuration for each test + cfg.Resources = originalCfg + } + NewResourcesController(ResourcesControllerInput{ RouterGroup: group, Config: &cfg, From e40f6b50a06e021f1139317b065305e7d9c0f093 Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 17 Jun 2026 17:33:50 +0300 Subject: [PATCH 2/8] tests: improve test coverage for well known controller --- cover.out | 447 ++++++++++++++++++ .../controller/well_known_controller_test.go | 210 +++++++- 2 files changed, 649 insertions(+), 8 deletions(-) create mode 100644 cover.out diff --git a/cover.out b/cover.out new file mode 100644 index 00000000..c2c7d51b --- /dev/null +++ b/cover.out @@ -0,0 +1,447 @@ +mode: set +github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:90.72,97.34 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:97.34,99.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:101.2,105.19 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:108.73,111.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:111.16,119.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:121.2,143.26 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:146.72,168.2 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/health_controller.go:17.69,24.2 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/health_controller.go:26.67,31.2 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:43.66,56.2 5 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:58.68,62.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:62.16,69.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:71.2,75.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:75.16,82.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:84.2,84.42 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:84.42,85.56 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:85.56,88.4 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:91.2,93.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:93.16,100.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:102.2,104.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:104.16,111.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:113.2,119.4 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:122.73,126.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:126.16,133.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:135.2,137.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:137.16,141.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:143.2,147.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:147.16,151.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:153.2,156.40 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:156.40,160.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:162.2,165.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:165.16,169.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:171.2,173.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:173.16,177.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:179.2,179.17 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:179.17,183.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:185.2,185.22 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:185.22,189.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:191.2,193.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:193.16,197.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:199.2,199.30 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:199.30,203.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:205.2,205.63 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:205.63,213.17 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:213.17,217.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:219.3,220.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:223.2,225.40 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:225.40,228.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:228.8,231.22 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:231.22,233.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:233.9,235.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:238.2,240.53 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:240.53,243.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:243.8,246.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:248.2,262.16 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:262.16,266.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:268.2,272.66 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:272.66,275.17 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:275.17,279.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:280.3,281.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:284.2,284.58 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:284.58,290.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:290.17,294.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:296.3,297.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:300.2,300.69 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:303.91,305.2 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:307.61,308.46 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:308.46,310.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:311.2,311.40 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:314.76,317.50 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:317.50,319.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:321.2,321.60 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:321.60,323.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:323.17,325.12 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:328.3,328.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:328.28,329.12 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:333.3,333.41 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:333.41,335.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:338.3,338.48 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:338.48,339.12 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:344.3,345.10 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:345.10,346.12 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:349.3,354.17 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:354.17,355.12 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:359.3,359.59 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:359.59,361.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:364.2,364.14 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:92.63,109.2 9 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:114.61,115.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:115.28,122.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:124.2,126.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:126.16,134.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:136.2,138.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:138.9,145.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:147.2,149.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:149.16,151.43 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:151.43,161.4 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:162.3,167.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:170.2,179.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:179.16,186.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:188.2,189.43 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:194.69,195.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:195.28,206.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:208.2,210.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:210.16,218.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:220.2,220.32 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:220.32,228.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:230.2,234.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:234.16,242.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:244.2,246.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:246.9,254.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:257.2,264.16 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:264.16,275.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:278.2,285.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:285.16,296.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:298.2,301.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:304.57,305.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:305.28,311.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:313.2,316.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:316.16,322.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:324.2,325.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:325.16,331.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:334.2,340.54 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:340.54,345.10 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:345.10,352.4 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:354.3,355.36 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:360.2,362.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:362.9,368.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:370.2,370.47 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:370.47,376.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:378.2,380.23 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:381.28,384.10 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:384.10,388.10 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:388.10,391.19 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:391.19,393.6 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:394.5,397.11 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:400.4,404.10 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:408.3,410.43 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:410.43,416.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:418.3,420.10 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:420.10,426.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:428.3,430.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:430.17,436.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:438.3,438.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:439.23,442.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:442.17,443.47 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:443.47,449.5 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:451.4,451.48 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:451.48,457.5 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:459.4,463.10 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:466.3,466.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:469.2,472.28 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:475.60,476.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:476.28,482.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:484.2,487.25 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:487.25,489.10 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:489.10,495.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:497.3,497.45 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:497.45,503.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:505.3,505.22 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:506.8,506.48 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:506.48,507.61 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:507.61,513.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:514.3,515.18 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:515.18,521.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:522.8,528.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:530.2,532.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:532.16,533.47 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:533.47,539.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:541.3,545.9 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:549.2,549.65 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:549.65,555.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:557.2,561.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:561.16,567.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:569.2,569.69 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:572.95,575.27 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:575.27,580.32 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:580.32,582.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:584.3,584.25 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:584.25,586.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:588.3,590.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:590.17,594.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:596.3,598.18 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:598.18,604.4 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:606.3,607.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:610.2,616.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:616.16,620.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:622.2,624.28 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:624.28,626.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:626.8,628.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:630.2,630.17 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:630.17,636.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:638.2,638.43 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:641.110,646.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:646.16,648.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:650.2,650.26 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:650.26,652.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:656.2,656.42 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:659.107,662.54 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:662.54,664.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:666.2,666.15 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:666.15,668.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:670.2,670.48 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:673.106,678.41 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:678.41,680.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:682.2,682.53 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:682.53,684.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:686.2,686.18 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:74.66,87.2 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:89.65,93.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:93.16,100.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:103.2,105.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:105.16,109.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:111.2,119.71 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:119.71,126.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:128.2,128.72 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:128.72,136.3 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:138.2,138.71 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:138.71,144.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:144.17,148.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:150.3,152.47 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:152.47,159.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:161.3,162.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:165.2,167.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:167.16,169.52 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:169.52,171.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:172.3,174.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:177.2,179.31 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:179.31,180.74 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:180.74,187.18 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:187.18,191.5 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:193.4,193.29 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:193.29,195.5 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:195.10,197.5 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:199.4,201.48 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:201.48,208.5 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:210.4,211.10 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:214.3,214.52 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:214.52,217.29 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:217.29,219.5 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:219.10,221.5 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:223.4,223.16 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:223.16,231.19 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:231.19,235.6 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:237.5,237.30 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:237.30,239.6 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:239.11,241.6 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:243.5,245.49 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:245.49,252.6 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:254.5,255.11 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:259.3,263.27 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:263.27,265.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:267.3,267.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:267.28,270.4 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:272.3,278.9 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:281.2,286.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:286.16,290.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:292.2,294.46 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:294.46,301.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:303.2,303.55 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:306.80,309.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:309.17,311.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:313.2,315.34 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:315.34,317.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:319.2,321.67 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:321.67,324.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:327.87,330.46 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:330.46,337.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:339.2,339.55 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:342.92,345.2 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:347.83,349.33 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:349.33,351.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:355.2,355.24 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:355.24,357.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:359.2,359.14 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:362.82,363.15 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:364.17,365.22 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:366.15,367.20 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:368.15,369.20 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:370.15,371.20 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:372.10,373.60 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:379.96,382.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:382.9,384.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:386.2,388.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:388.9,390.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:392.2,394.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:394.9,396.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:400.2,408.8 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:411.96,414.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:414.9,416.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:418.2,420.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:420.16,422.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:424.2,426.35 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:426.35,428.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:430.2,432.36 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:432.36,434.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:436.2,445.8 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:448.93,452.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:452.9,454.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:457.2,459.35 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:459.35,461.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:464.2,475.8 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:478.91,479.15 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:480.22,481.39 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:482.13,483.49 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:484.13,485.52 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:486.10,487.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:491.122,492.16 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:493.19,495.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:495.17,497.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:498.3,498.18 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:499.16,501.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:501.17,503.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:504.3,504.18 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:505.19,507.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:507.17,509.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:510.3,510.18 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:512.2,512.74 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:515.90,519.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:519.16,521.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:523.2,525.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:525.16,527.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:529.2,533.27 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:533.27,535.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:537.2,539.37 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:539.37,542.17 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:542.17,544.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:546.3,546.96 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:549.2,549.16 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:549.16,551.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:554.2,557.15 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:557.15,559.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:559.8,561.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:563.2,565.17 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:23.78,34.2 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:36.73,37.44 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:37.44,43.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:44.2,44.42 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:44.42,50.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:51.2,51.54 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:44.63,58.2 7 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:60.64,64.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:64.16,71.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:73.2,77.14 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:77.14,87.3 6 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:89.2,91.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:91.16,92.46 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:92.46,101.4 5 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:102.3,107.9 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:110.2,110.81 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:110.81,113.37 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:113.37,115.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:115.9,117.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:118.3,122.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:125.2,127.36 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:127.36,130.23 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:130.23,137.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:139.3,139.33 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:139.33,143.18 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:143.18,145.5 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:147.4,148.19 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:148.19,150.5 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:152.4,160.18 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:160.18,167.5 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:169.4,176.10 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:180.2,187.36 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:187.36,188.38 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:188.38,190.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:191.3,191.39 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:191.39,193.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:196.2,196.35 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:196.35,198.25 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:198.25,200.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:203.2,205.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:205.16,212.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:214.2,218.36 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:218.36,220.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:220.8,222.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:224.2,229.4 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:232.65,237.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:237.16,238.39 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:238.39,245.4 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:246.3,251.9 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:254.2,256.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:256.16,263.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:265.2,267.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:267.16,269.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:269.8,272.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:274.2,279.4 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:282.63,286.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:286.16,293.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:295.2,297.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:297.16,304.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:306.2,306.28 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:306.28,313.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:315.2,319.14 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:319.14,329.3 6 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:331.2,333.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:333.17,340.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:342.2,344.9 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:344.9,353.3 5 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:355.2,357.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:357.16,359.17 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:359.17,361.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:362.8,364.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:366.2,375.32 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:375.32,377.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:378.2,378.33 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:378.33,380.3 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:382.2,384.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:384.16,391.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:393.2,401.4 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:404.68,407.16 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:407.16,414.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:416.2,416.30 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:416.30,423.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:425.2,434.16 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:434.16,441.3 3 0 +github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:443.2,451.4 4 0 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:56.78,66.2 5 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:68.83,69.28 1 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:69.28,75.3 2 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:77.2,94.4 2 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:97.61,98.28 1 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:98.28,104.3 2 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:106.2,108.16 2 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:108.16,114.3 2 0 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:116.2,122.25 5 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:125.66,131.53 4 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:131.53,137.3 2 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:139.2,146.89 3 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:146.89,148.3 1 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:150.2,150.18 1 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:153.88,156.12 2 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:156.12,158.3 1 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:160.2,160.16 1 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:161.14,162.38 1 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:162.38,164.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:165.3,166.47 2 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:166.47,168.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:169.23,171.17 2 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:171.17,173.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:174.3,174.19 1 1 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:174.19,176.4 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:177.10,178.15 1 0 +github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:181.2,181.13 1 1 diff --git a/internal/controller/well_known_controller_test.go b/internal/controller/well_known_controller_test.go index 4098c152..b090ced3 100644 --- a/internal/controller/well_known_controller_test.go +++ b/internal/controller/well_known_controller_test.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "net/http/httptest" + "net/url" "testing" "github.com/gin-gonic/gin" @@ -25,12 +26,14 @@ func TestWellKnownController(t *testing.T) { type testCase struct { description string + oidcEnabled bool run func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) } tests := []testCase{ { description: "Ensure well-known endpoint returns correct OIDC configuration", + oidcEnabled: true, run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { req := httptest.NewRequest("GET", "/.well-known/openid-configuration", nil) router.ServeHTTP(recorder, req) @@ -39,7 +42,7 @@ func TestWellKnownController(t *testing.T) { res := OpenIDConnectConfiguration{} err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) expected := OpenIDConnectConfiguration{ Issuer: runtime.AppURL, @@ -55,8 +58,8 @@ func TestWellKnownController(t *testing.T) { TokenEndpointAuthMethodsSupported: []string{"client_secret_basic", "client_secret_post"}, ClaimsSupported: []string{"sub", "updated_at", "name", "preferred_username", "email", "email_verified", "groups", "phone_number", "phone_number_verified", "address", "given_name", "family_name", "middle_name", "nickname", "profile", "picture", "website", "gender", "birthdate", "zoneinfo", "locale"}, ServiceDocumentation: "https://tinyauth.app/docs/guides/oidc", - RequestParameterSupported: true, RequestObjectSigningAlgValuesSupported: []string{"none"}, + RequestParameterSupported: true, } assert.Equal(t, expected, res) @@ -64,6 +67,7 @@ func TestWellKnownController(t *testing.T) { }, { description: "Ensure well-known endpoint returns correct JWKS", + oidcEnabled: true, run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { req := httptest.NewRequest("GET", "/.well-known/jwks.json", nil) router.ServeHTTP(recorder, req) @@ -72,19 +76,204 @@ func TestWellKnownController(t *testing.T) { decodedBody := make(map[string]any) err := json.Unmarshal(recorder.Body.Bytes(), &decodedBody) - assert.NoError(t, err) + require.NoError(t, err) keys, ok := decodedBody["keys"].([]any) - assert.True(t, ok) + require.True(t, ok) assert.Len(t, keys, 1) keyData, ok := keys[0].(map[string]any) - assert.True(t, ok) + require.True(t, ok) assert.Equal(t, "RSA", keyData["kty"]) assert.Equal(t, "sig", keyData["use"]) assert.Equal(t, "RS256", keyData["alg"]) }, }, + { + description: "Ensure openid configuration returns 500 on nil oidc service", + oidcEnabled: false, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/.well-known/openid-configuration", nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 500, recorder.Code) + + decodedBody := make(map[string]any) + err := json.Unmarshal(recorder.Body.Bytes(), &decodedBody) + require.NoError(t, err) + + assert.Equal(t, "OIDC service not configured", decodedBody["message"]) + }, + }, + { + description: "Ensure jwks endpoint returns 500 on nil oidc service", + oidcEnabled: false, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/.well-known/jwks.json", nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 500, recorder.Code) + + decodedBody := make(map[string]any) + err := json.Unmarshal(recorder.Body.Bytes(), &decodedBody) + require.NoError(t, err) + + assert.Equal(t, "OIDC service not configured", decodedBody["message"]) + }, + }, + { + description: "Ensure webfinger returns 400 on invalid resource", + oidcEnabled: true, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/.well-known/webfinger?resource=invalid-resource", nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 400, recorder.Code) + assert.Equal(t, "application/jrd+json", recorder.Header().Get("content-type")) + assert.Equal(t, "*", recorder.Header().Get("access-control-allow-origin")) + + decodedBody := make(map[string]any) + err := json.Unmarshal(recorder.Body.Bytes(), &decodedBody) + require.NoError(t, err) + + assert.Equal(t, "invalid resource", decodedBody["message"]) + }, + }, + { + description: "Ensure webfinger resource validator allows acct", + oidcEnabled: true, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + resource := "acct:testuser@example.com" + req := httptest.NewRequest("GET", fmt.Sprintf("/.well-known/webfinger?resource=%s", url.QueryEscape(resource)), nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 200, recorder.Code) + assert.Equal(t, "application/jrd+json", recorder.Header().Get("content-type")) + assert.Equal(t, "*", recorder.Header().Get("access-control-allow-origin")) + }, + }, + { + description: "Ensure webfinger resource validator allows https", + oidcEnabled: true, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + resource := "https://example.com/testuser" + req := httptest.NewRequest("GET", fmt.Sprintf("/.well-known/webfinger?resource=%s", url.QueryEscape(resource)), nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 200, recorder.Code) + assert.Equal(t, "application/jrd+json", recorder.Header().Get("content-type")) + assert.Equal(t, "*", recorder.Header().Get("access-control-allow-origin")) + }, + }, + { + description: "Ensure webfinger resource validator allows http", + oidcEnabled: true, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + resource := "https://example.com/testuser" + req := httptest.NewRequest("GET", fmt.Sprintf("/.well-known/webfinger?resource=%s", url.QueryEscape(resource)), nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 200, recorder.Code) + assert.Equal(t, "application/jrd+json", recorder.Header().Get("content-type")) + assert.Equal(t, "*", recorder.Header().Get("access-control-allow-origin")) + }, + }, + { + description: "Webfinger should return no links when oidc is nil", + oidcEnabled: false, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + resource := "acct:testuser@example.com" + req := httptest.NewRequest("GET", fmt.Sprintf("/.well-known/webfinger?resource=%s", url.QueryEscape(resource)), nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 200, recorder.Code) + assert.Equal(t, "application/jrd+json", recorder.Header().Get("content-type")) + assert.Equal(t, "*", recorder.Header().Get("access-control-allow-origin")) + + decodedBody := make(map[string]any) + err := json.Unmarshal(recorder.Body.Bytes(), &decodedBody) + require.NoError(t, err) + + links, ok := decodedBody["links"].([]any) + require.True(t, ok) + assert.Len(t, links, 0) + }, + }, + { + description: "Webfinger should return links when oidc is configured and no rel is provided", + oidcEnabled: true, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + resource := "acct:testuser@example.com" + req := httptest.NewRequest("GET", fmt.Sprintf("/.well-known/webfinger?resource=%s", url.QueryEscape(resource)), nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 200, recorder.Code) + assert.Equal(t, "application/jrd+json", recorder.Header().Get("content-type")) + assert.Equal(t, "*", recorder.Header().Get("access-control-allow-origin")) + + decodedBody := make(map[string]any) + err := json.Unmarshal(recorder.Body.Bytes(), &decodedBody) + require.NoError(t, err) + + links, ok := decodedBody["links"].([]any) + require.True(t, ok) + assert.Len(t, links, 1) + + linkData, ok := links[0].(map[string]any) + require.True(t, ok) + assert.Equal(t, "http://openid.net/specs/connect/1.0/issuer", linkData["rel"]) + assert.Equal(t, runtime.AppURL, linkData["href"]) + }, + }, + { + description: "Webfinger should return links when oidc is configured and rel is provided", + oidcEnabled: true, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + resource := fmt.Sprintf("acct:%s@%s", "testuser", runtime.AppURL) + rel := "http://openid.net/specs/connect/1.0/issuer" + req := httptest.NewRequest("GET", fmt.Sprintf("/.well-known/webfinger?resource=%s&rel=%s", url.QueryEscape(resource), url.QueryEscape(rel)), nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 200, recorder.Code) + assert.Equal(t, "application/jrd+json", recorder.Header().Get("content-type")) + assert.Equal(t, "*", recorder.Header().Get("access-control-allow-origin")) + + decodedBody := make(map[string]any) + err := json.Unmarshal(recorder.Body.Bytes(), &decodedBody) + require.NoError(t, err) + + links, ok := decodedBody["links"].([]any) + require.True(t, ok) + assert.Len(t, links, 1) + + linkData, ok := links[0].(map[string]any) + require.True(t, ok) + assert.Equal(t, rel, linkData["rel"]) + assert.Equal(t, runtime.AppURL, linkData["href"]) + }, + }, + { + description: "Webfinger should return no links when oidc is configured and rel is provided but does not match", + oidcEnabled: true, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + resource := "acct:testuser@example.com" + rel := "http://example.com/does-not-exist" + req := httptest.NewRequest("GET", fmt.Sprintf("/.well-known/webfinger?resource=%s&rel=%s", url.QueryEscape(resource), url.QueryEscape(rel)), nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 200, recorder.Code) + assert.Equal(t, "application/jrd+json", recorder.Header().Get("content-type")) + assert.Equal(t, "*", recorder.Header().Get("access-control-allow-origin")) + + decodedBody := make(map[string]any) + err := json.Unmarshal(recorder.Body.Bytes(), &decodedBody) + require.NoError(t, err) + + links, ok := decodedBody["links"].([]any) + require.True(t, ok) + assert.Len(t, links, 0) + }, + }, } ctx := context.TODO() @@ -108,10 +297,15 @@ func TestWellKnownController(t *testing.T) { recorder := httptest.NewRecorder() - NewWellKnownController(WellKnownControllerInput{ - OIDCService: oidcService, + wellKnownControllerInput := WellKnownControllerInput{ RouterGroup: &router.RouterGroup, - }) + } + + if test.oidcEnabled { + wellKnownControllerInput.OIDCService = oidcService + } + + NewWellKnownController(wellKnownControllerInput) test.run(t, router, recorder) }) From e48f9d251771e2bfb5c3af5e1db1bf0f83d7ee20 Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 17 Jun 2026 17:47:07 +0300 Subject: [PATCH 3/8] tests: improve test coverage for user controller --- internal/controller/user_controller_test.go | 114 ++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/internal/controller/user_controller_test.go b/internal/controller/user_controller_test.go index 0ee63dfc..4df7efe2 100644 --- a/internal/controller/user_controller_test.go +++ b/internal/controller/user_controller_test.go @@ -81,6 +81,40 @@ func TestUserController(t *testing.T) { } tests := []testCase{ + { + description: "Login should fail gracefully on invalid json", + middlewares: []gin.HandlerFunc{}, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("POST", "/api/user/login", strings.NewReader(`{"username": "testuser", "password":`)) + req.Header.Set("Content-Type", "application/json") + + router.ServeHTTP(recorder, req) + + assert.Equal(t, 400, recorder.Code) + assert.Contains(t, recorder.Body.String(), "Bad Request") + }, + }, + { + description: "Should fail on missing user", + middlewares: []gin.HandlerFunc{}, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + loginReq := LoginRequest{ + Username: "nonexistentuser", + Password: "password", + } + loginReqBody, err := json.Marshal(loginReq) + require.NoError(t, err) + + req := httptest.NewRequest("POST", "/api/user/login", strings.NewReader(string(loginReqBody))) + req.Header.Set("Content-Type", "application/json") + + router.ServeHTTP(recorder, req) + + assert.Equal(t, 401, recorder.Code) + assert.Len(t, recorder.Result().Cookies(), 0) + assert.Contains(t, recorder.Body.String(), "Unauthorized") + }, + }, { description: "Should be able to login with valid credentials", middlewares: []gin.HandlerFunc{}, @@ -242,6 +276,86 @@ func TestUserController(t *testing.T) { assert.Equal(t, -1, cookie.MaxAge) // MaxAge -1 means delete cookie }, }, + { + description: "Logout should be treated as valid without a session cookie", + middlewares: []gin.HandlerFunc{}, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("POST", "/api/user/logout", nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, 200, recorder.Code) + }, + }, + { + description: "TOTP should gracefuly reject invalid json", + middlewares: []gin.HandlerFunc{}, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("POST", "/api/user/totp", strings.NewReader(`{"code":`)) + req.Header.Set("Content-Type", "application/json") + + router.ServeHTTP(recorder, req) + + assert.Equal(t, 400, recorder.Code) + assert.Contains(t, recorder.Body.String(), "Bad Request") + }, + }, + { + description: "TOTP should fail on non-totp context", + middlewares: []gin.HandlerFunc{ + simpleCtx, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + totpReq := TotpRequest{ + Code: "123456", + } + + totpReqBody, err := json.Marshal(totpReq) + require.NoError(t, err) + + recorder = httptest.NewRecorder() + req := httptest.NewRequest("POST", "/api/user/totp", strings.NewReader(string(totpReqBody))) + req.Header.Set("Content-Type", "application/json") + router.ServeHTTP(recorder, req) + + assert.Equal(t, 401, recorder.Code) + assert.Contains(t, recorder.Body.String(), "Unauthorized") + }, + }, + { + description: "TOTP should fail when user in context doesn't exist", + middlewares: []gin.HandlerFunc{ + func(ctx *gin.Context) { + ctx.Set("context", &model.UserContext{ + Authenticated: false, + Provider: model.ProviderLocal, + Local: &model.LocalContext{ + BaseContext: model.BaseContext{ + Username: "idontexist", + Name: "Totpuser", + Email: "totpuser@example.com", + }, + TOTPPending: true, + }, + }) + }, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + totpReq := TotpRequest{ + Code: "123456", + } + + totpReqBody, err := json.Marshal(totpReq) + require.NoError(t, err) + + recorder = httptest.NewRecorder() + req := httptest.NewRequest("POST", "/api/user/totp", strings.NewReader(string(totpReqBody))) + req.Header.Set("Content-Type", "application/json") + router.ServeHTTP(recorder, req) + + assert.Equal(t, 401, recorder.Code) + assert.Contains(t, recorder.Body.String(), "Unauthorized") + }, + }, { description: "Should be able to login with totp", middlewares: []gin.HandlerFunc{ From 4387ebcf5ac244aede6ddd1e9861f599f580f96f Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 17 Jun 2026 18:40:30 +0300 Subject: [PATCH 4/8] tests: improve proxy controller tests --- internal/controller/proxy_controller.go | 10 +- internal/controller/proxy_controller_test.go | 343 +++++++++++++++++-- internal/controller/user_controller_test.go | 4 + internal/test/test.go | 44 +++ 4 files changed, 376 insertions(+), 25 deletions(-) diff --git a/internal/controller/proxy_controller.go b/internal/controller/proxy_controller.go index 891ff59b..ffafaffd 100644 --- a/internal/controller/proxy_controller.go +++ b/internal/controller/proxy_controller.go @@ -158,7 +158,7 @@ func (controller *ProxyController) proxyHandler(c *gin.Context) { return } - c.Redirect(http.StatusTemporaryRedirect, redirectURL) + c.Redirect(http.StatusFound, redirectURL) return } @@ -207,7 +207,7 @@ func (controller *ProxyController) proxyHandler(c *gin.Context) { return } - c.Redirect(http.StatusTemporaryRedirect, redirectURL) + c.Redirect(http.StatusFound, redirectURL) return } @@ -251,7 +251,7 @@ func (controller *ProxyController) proxyHandler(c *gin.Context) { return } - c.Redirect(http.StatusTemporaryRedirect, redirectURL) + c.Redirect(http.StatusFound, redirectURL) return } } @@ -300,7 +300,7 @@ func (controller *ProxyController) proxyHandler(c *gin.Context) { return } - c.Redirect(http.StatusTemporaryRedirect, redirectURL) + c.Redirect(http.StatusFound, redirectURL) } func (controller *ProxyController) setHeaders(c *gin.Context, acls *model.App) { @@ -336,7 +336,7 @@ func (controller *ProxyController) handleError(c *gin.Context, proxyCtx ProxyCon return } - c.Redirect(http.StatusTemporaryRedirect, redirectURL) + c.Redirect(http.StatusFound, redirectURL) } func (controller *ProxyController) getHeader(c *gin.Context, header string) (string, bool) { diff --git a/internal/controller/proxy_controller_test.go b/internal/controller/proxy_controller_test.go index 1b2eb5c6..faa9934b 100644 --- a/internal/controller/proxy_controller_test.go +++ b/internal/controller/proxy_controller_test.go @@ -2,6 +2,9 @@ package controller import ( "context" + "encoding/base64" + "fmt" + "net/http" "net/http/httptest" "net/url" "testing" @@ -63,6 +66,17 @@ func TestProxyController(t *testing.T) { } tests := []testCase{ + { + description: "Should get bad request on invalid proxy", + middlewares: []gin.HandlerFunc{}, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/invalid", nil) + router.ServeHTTP(recorder, req) + + assert.Equal(t, http.StatusBadRequest, recorder.Code) + assert.Contains(t, recorder.Body.String(), "Bad request") + }, + }, { description: "Default forward auth should be detected and used for traefik", middlewares: []gin.HandlerFunc{}, @@ -74,7 +88,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("user-agent", browserUserAgent) router.ServeHTTP(recorder, req) - assert.Equal(t, 307, recorder.Code) + assert.Equal(t, http.StatusFound, recorder.Code) location := recorder.Header().Get("Location") assert.Contains(t, location, url.QueryEscape("https://test.example.com/")) assert.Contains(t, location, "login_for=app") @@ -89,7 +103,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-original-url", "https://test.example.com/") req.Header.Set("user-agent", browserUserAgent) router.ServeHTTP(recorder, req) - assert.Equal(t, 401, recorder.Code) + assert.Equal(t, http.StatusUnauthorized, recorder.Code) location := recorder.Header().Get("x-tinyauth-location") assert.Contains(t, location, url.QueryEscape("https://test.example.com/")) assert.Contains(t, location, "login_for=app") @@ -105,7 +119,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-proto", "https") req.Header.Set("user-agent", browserUserAgent) router.ServeHTTP(recorder, req) - assert.Equal(t, 307, recorder.Code) + assert.Equal(t, http.StatusFound, recorder.Code) location := recorder.Header().Get("Location") assert.Contains(t, location, url.QueryEscape("https://test.example.com/hello")) assert.Contains(t, location, "login_for=app") @@ -123,7 +137,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("user-agent", browserUserAgent) router.ServeHTTP(recorder, req) - assert.Equal(t, 307, recorder.Code) + assert.Equal(t, http.StatusFound, recorder.Code) location := recorder.Header().Get("Location") assert.Contains(t, location, url.QueryEscape("https://test.example.com/")) assert.Contains(t, location, "login_for=app") @@ -140,7 +154,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-uri", "/") req.Header.Set("user-agent", browserUserAgent) router.ServeHTTP(recorder, req) - assert.Equal(t, 401, recorder.Code) + assert.Equal(t, http.StatusUnauthorized, recorder.Code) location := recorder.Header().Get("x-tinyauth-location") assert.Contains(t, location, url.QueryEscape("https://test.example.com/")) assert.Contains(t, location, "login_for=app") @@ -158,7 +172,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-uri", "/hello") req.Header.Set("user-agent", browserUserAgent) router.ServeHTTP(recorder, req) - assert.Equal(t, 307, recorder.Code) + assert.Equal(t, http.StatusFound, recorder.Code) location := recorder.Header().Get("Location") assert.Contains(t, location, url.QueryEscape("https://test.example.com/")) assert.Contains(t, location, "login_for=app") @@ -175,7 +189,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-uri", "/") router.ServeHTTP(recorder, req) - assert.Equal(t, 401, recorder.Code) + assert.Equal(t, http.StatusUnauthorized, recorder.Code) assert.Contains(t, recorder.Body.String(), `"status":401`) assert.Contains(t, recorder.Body.String(), `"message":"Unauthorized"`) }, @@ -190,7 +204,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-uri", "/") router.ServeHTTP(recorder, req) - assert.Equal(t, 401, recorder.Code) + assert.Equal(t, http.StatusUnauthorized, recorder.Code) assert.Contains(t, recorder.Body.String(), `"status":401`) assert.Contains(t, recorder.Body.String(), `"message":"Unauthorized"`) }, @@ -205,7 +219,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-uri", "/hello") router.ServeHTTP(recorder, req) - assert.Equal(t, 401, recorder.Code) + assert.Equal(t, http.StatusUnauthorized, recorder.Code) assert.Contains(t, recorder.Body.String(), `"status":401`) assert.Contains(t, recorder.Body.String(), `"message":"Unauthorized"`) }, @@ -222,7 +236,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-uri", "/") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) assert.Equal(t, "testuser", recorder.Header().Get("remote-user")) assert.Equal(t, "Testuser", recorder.Header().Get("remote-name")) assert.Equal(t, "testuser@example.com", recorder.Header().Get("remote-email")) @@ -238,7 +252,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-original-url", "https://test.example.com/") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) assert.Equal(t, "testuser", recorder.Header().Get("remote-user")) assert.Equal(t, "Testuser", recorder.Header().Get("remote-name")) assert.Equal(t, "testuser@example.com", recorder.Header().Get("remote-email")) @@ -255,7 +269,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-proto", "https") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) assert.Equal(t, "testuser", recorder.Header().Get("remote-user")) assert.Equal(t, "Testuser", recorder.Header().Get("remote-name")) assert.Equal(t, "testuser@example.com", recorder.Header().Get("remote-email")) @@ -270,7 +284,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-proto", "https") req.Header.Set("x-forwarded-uri", "/allowed") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) }, }, { @@ -280,7 +294,7 @@ func TestProxyController(t *testing.T) { req := httptest.NewRequest("GET", "/api/auth/nginx", nil) req.Header.Set("x-original-url", "https://path-allow.example.com/allowed") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) }, }, { @@ -291,7 +305,7 @@ func TestProxyController(t *testing.T) { req.Host = "path-allow.example.com" req.Header.Set("x-forwarded-proto", "https") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) }, }, { @@ -304,7 +318,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-uri", "/") req.Header.Set("x-forwarded-for", "10.10.10.10") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) }, }, { @@ -315,7 +329,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-original-url", "https://ip-bypass.example.com/") req.Header.Set("x-forwarded-for", "10.10.10.10") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) }, }, { @@ -327,7 +341,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-proto", "https") req.Header.Set("x-forwarded-for", "10.10.10.10") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) }, }, { @@ -341,7 +355,7 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-proto", "https") req.Header.Set("x-forwarded-uri", "/") router.ServeHTTP(recorder, req) - assert.Equal(t, 200, recorder.Code) + assert.Equal(t, http.StatusOK, recorder.Code) }, }, { @@ -355,12 +369,301 @@ func TestProxyController(t *testing.T) { req.Header.Set("x-forwarded-proto", "https") req.Header.Set("x-forwarded-uri", "/") router.ServeHTTP(recorder, req) - assert.Equal(t, 403, recorder.Code) + assert.Equal(t, http.StatusForbidden, recorder.Code) assert.Equal(t, "", recorder.Header().Get("remote-user")) assert.Equal(t, "", recorder.Header().Get("remote-name")) assert.Equal(t, "", recorder.Header().Get("remote-email")) }, }, + { + description: "Test IP block rule, with non browser user agent", + middlewares: []gin.HandlerFunc{}, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "ip-block.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + req.Header.Set("x-forwarded-for", "10.10.10.10") + router.ServeHTTP(recorder, req) + assert.Equal(t, http.StatusForbidden, recorder.Code) + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), runtime.AppURL) + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), "ip=10.10.10.10") + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), "ip-block") + + }, + }, + { + description: "Test IP block rule, with browser user agent", + middlewares: []gin.HandlerFunc{}, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "ip-block.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + req.Header.Set("x-forwarded-for", "10.10.10.10") + req.Header.Set("user-agent", browserUserAgent) + router.ServeHTTP(recorder, req) + assert.Equal(t, http.StatusFound, recorder.Code) + location := recorder.Header().Get("Location") + assert.Contains(t, location, url.QueryEscape("10.10.10.10")) + assert.Contains(t, location, url.QueryEscape("ip-block")) + assert.Contains(t, location, runtime.AppURL) + }, + }, + { + description: "OAuth allowed group", + middlewares: []gin.HandlerFunc{ + func(ctx *gin.Context) { + ctx.Set("context", &model.UserContext{ + Authenticated: true, + Provider: model.ProviderOAuth, + OAuth: &model.OAuthContext{ + BaseContext: model.BaseContext{ + Username: "testuser", + Name: "Testuser", + Email: "testuser@example.com", + }, + Groups: []string{"group1"}, + }, + }) + ctx.Next() + }, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "oauth-group.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + router.ServeHTTP(recorder, req) + assert.Equal(t, http.StatusOK, recorder.Code) + assert.Equal(t, "testuser", recorder.Header().Get("remote-user")) + assert.Equal(t, "Testuser", recorder.Header().Get("remote-name")) + assert.Equal(t, "testuser@example.com", recorder.Header().Get("remote-email")) + assert.Equal(t, "group1", recorder.Header().Get("remote-groups")) + }, + }, + { + description: "OAuth not in required groups and non browser", + middlewares: []gin.HandlerFunc{ + func(ctx *gin.Context) { + ctx.Set("context", &model.UserContext{ + Authenticated: true, + Provider: model.ProviderOAuth, + OAuth: &model.OAuthContext{ + BaseContext: model.BaseContext{ + Username: "testuser", + Name: "Testuser", + Email: "testuser@example.com", + }, + Groups: []string{"group3"}, + }, + }) + ctx.Next() + }, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "oauth-group.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + router.ServeHTTP(recorder, req) + assert.Equal(t, http.StatusForbidden, recorder.Code) + assert.Equal(t, "", recorder.Header().Get("remote-user")) + assert.Equal(t, "", recorder.Header().Get("remote-name")) + assert.Equal(t, "", recorder.Header().Get("remote-email")) + assert.Equal(t, "", recorder.Header().Get("remote-groups")) + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), runtime.AppURL) + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), "groupErr=true") + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), "oauth-group") + }, + }, + { + description: "OAuth not in required groups and browser", + middlewares: []gin.HandlerFunc{ + func(ctx *gin.Context) { + ctx.Set("context", &model.UserContext{ + Authenticated: true, + Provider: model.ProviderOAuth, + OAuth: &model.OAuthContext{ + BaseContext: model.BaseContext{ + Username: "testuser", + Name: "Testuser", + Email: "testuser@example.com", + }, + Groups: []string{"group3"}, + }, + }) + ctx.Next() + }, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "oauth-group.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + req.Header.Set("user-agent", browserUserAgent) + router.ServeHTTP(recorder, req) + assert.Equal(t, http.StatusFound, recorder.Code) + location := recorder.Header().Get("Location") + assert.Contains(t, location, "groupErr=true") + assert.Contains(t, location, "oauth-group") + assert.Contains(t, location, runtime.AppURL) + }, + }, + { + description: "LDAP allowed group", + middlewares: []gin.HandlerFunc{ + func(ctx *gin.Context) { + ctx.Set("context", &model.UserContext{ + Authenticated: true, + Provider: model.ProviderLDAP, + LDAP: &model.LDAPContext{ + BaseContext: model.BaseContext{ + Username: "testuser", + Name: "Testuser", + Email: "testuser@example.com", + }, + Groups: []string{"group1"}, + }, + }) + ctx.Next() + }, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "ldap-group.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + router.ServeHTTP(recorder, req) + assert.Equal(t, http.StatusOK, recorder.Code) + assert.Equal(t, "testuser", recorder.Header().Get("remote-user")) + assert.Equal(t, "Testuser", recorder.Header().Get("remote-name")) + assert.Equal(t, "testuser@example.com", recorder.Header().Get("remote-email")) + assert.Equal(t, "group1", recorder.Header().Get("remote-groups")) + }, + }, + { + description: "LDAP not in required groups and non browser", + middlewares: []gin.HandlerFunc{ + func(ctx *gin.Context) { + ctx.Set("context", &model.UserContext{ + Authenticated: true, + Provider: model.ProviderLDAP, + LDAP: &model.LDAPContext{ + BaseContext: model.BaseContext{ + Username: "testuser", + Name: "Testuser", + Email: "testuser@example.com", + }, + Groups: []string{"group3"}, + }, + }) + ctx.Next() + }, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "ldap-group.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + router.ServeHTTP(recorder, req) + assert.Equal(t, http.StatusForbidden, recorder.Code) + assert.Equal(t, "", recorder.Header().Get("remote-user")) + assert.Equal(t, "", recorder.Header().Get("remote-name")) + assert.Equal(t, "", recorder.Header().Get("remote-email")) + assert.Equal(t, "", recorder.Header().Get("remote-groups")) + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), runtime.AppURL) + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), "groupErr=true") + assert.Contains(t, recorder.Header().Get("x-tinyauth-location"), "ldap-group") + }, + }, + { + description: "LDAP not in required groups and browser", + middlewares: []gin.HandlerFunc{ + func(ctx *gin.Context) { + ctx.Set("context", &model.UserContext{ + Authenticated: true, + Provider: model.ProviderLDAP, + LDAP: &model.LDAPContext{ + BaseContext: model.BaseContext{ + Username: "testuser", + Name: "Testuser", + Email: "testuser@example.com", + }, + Groups: []string{"group3"}, + }, + }) + ctx.Next() + }, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "ldap-group.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + req.Header.Set("user-agent", browserUserAgent) + router.ServeHTTP(recorder, req) + assert.Equal(t, http.StatusFound, recorder.Code) + location := recorder.Header().Get("Location") + assert.Contains(t, location, "groupErr=true") + assert.Contains(t, location, "ldap-group") + assert.Contains(t, location, runtime.AppURL) + }, + }, + { + description: "Should add basic auth if it's in ACLs", + middlewares: []gin.HandlerFunc{ + simpleCtx, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "basic-auth.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + req.Header.Set("authorization", "foo") // should be overridden by basic auth + router.ServeHTTP(recorder, req) + + assert.Equal(t, http.StatusOK, recorder.Code) + authorizationHeader := recorder.Header().Get("Authorization") + assert.NotEmpty(t, authorizationHeader) + assert.Equal(t, fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte("test:password"))), authorizationHeader) + }, + }, + { + description: "Authorization header should be preserved when not basic auth acls", + middlewares: []gin.HandlerFunc{ + simpleCtx, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "test.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + req.Header.Set("authorization", "Bearer mytoken") + router.ServeHTTP(recorder, req) + + assert.Equal(t, http.StatusOK, recorder.Code) + authorizationHeader := recorder.Header().Get("Authorization") + assert.NotEmpty(t, authorizationHeader) + assert.Equal(t, "Bearer mytoken", authorizationHeader) + }, + }, + { + description: "Should add response headers if present", + middlewares: []gin.HandlerFunc{ + simpleCtx, + }, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + req := httptest.NewRequest("GET", "/api/auth/traefik", nil) + req.Header.Set("x-forwarded-host", "response-headers.example.com") + req.Header.Set("x-forwarded-proto", "https") + req.Header.Set("x-forwarded-uri", "/") + router.ServeHTTP(recorder, req) + + assert.Equal(t, http.StatusOK, recorder.Code) + assert.Equal(t, "bar", recorder.Header().Get("x-foo")) + }, + }, } store := memory.New() diff --git a/internal/controller/user_controller_test.go b/internal/controller/user_controller_test.go index 4df7efe2..d4cb2c0c 100644 --- a/internal/controller/user_controller_test.go +++ b/internal/controller/user_controller_test.go @@ -41,6 +41,7 @@ func TestUserController(t *testing.T) { TOTPPending: true, }, }) + c.Next() } totpAttrCtx := func(c *gin.Context) { @@ -56,6 +57,7 @@ func TestUserController(t *testing.T) { TOTPPending: true, }, }) + c.Next() } simpleCtx := func(c *gin.Context) { @@ -70,6 +72,7 @@ func TestUserController(t *testing.T) { }, }, }) + c.Next() } store := memory.New() @@ -337,6 +340,7 @@ func TestUserController(t *testing.T) { TOTPPending: true, }, }) + ctx.Next() }, }, run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { diff --git a/internal/test/test.go b/internal/test/test.go index df10f2b4..676501a4 100644 --- a/internal/test/test.go +++ b/internal/test/test.go @@ -76,6 +76,50 @@ func CreateTestConfigs(t *testing.T) (model.Config, model.RuntimeConfig) { Bypass: []string{"10.10.10.10"}, }, }, + "ip_block": { + Config: model.AppConfig{ + Domain: "ip-block.example.com", + }, + IP: model.AppIP{ + Block: []string{"10.10.10.10"}, + }, + }, + "oauth_group": { + Config: model.AppConfig{ + Domain: "oauth-group.example.com", + }, + OAuth: model.AppOAuth{ + Whitelist: "testuser@example.com", + Groups: "group1,group2", + }, + }, + "ldap_group": { + Config: model.AppConfig{ + Domain: "ldap-group.example.com", + }, + LDAP: model.AppLDAP{ + Groups: "group1,group2", + }, + }, + "basic_auth": { + Config: model.AppConfig{ + Domain: "basic-auth.example.com", + }, + Response: model.AppResponse{ + BasicAuth: model.AppBasicAuth{ + Username: "test", + Password: "password", + }, + }, + }, + "response_headers": { + Config: model.AppConfig{ + Domain: "response-headers.example.com", + }, + Response: model.AppResponse{ + Headers: []string{"x-foo=bar"}, + }, + }, }, } From ce1ed6207d811d4102cf53d05f7bce1d97b5f969 Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 17 Jun 2026 18:44:10 +0300 Subject: [PATCH 5/8] tests: check for nil oidc service in authorize complete --- internal/controller/oidc_controller_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/internal/controller/oidc_controller_test.go b/internal/controller/oidc_controller_test.go index 78796c49..8c049727 100644 --- a/internal/controller/oidc_controller_test.go +++ b/internal/controller/oidc_controller_test.go @@ -209,6 +209,26 @@ func TestOIDCController(t *testing.T) { }, // --- authorize-complete --- + { + description: "Shoud fail if oidc is disabled", + oidcDisabled: true, + run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { + body, err := json.Marshal(AuthorizeCompleteRequest{Ticket: "some-ticket"}) + require.NoError(t, err) + + req := httptest.NewRequest("POST", "/api/oidc/authorize-complete", strings.NewReader(string(body))) + req.Header.Set("Content-Type", "application/json") + router.ServeHTTP(recorder, req) + + assert.Equal(t, http.StatusOK, recorder.Code) + + var res map[string]any + require.NoError(t, json.Unmarshal(recorder.Body.Bytes(), &res)) + redirectURI, ok := res["redirect_uri"].(string) + require.True(t, ok) + assert.Contains(t, redirectURI, oidcService.GetIssuer()+"/error") + }, + }, { description: "Authorize complete returns a JSON error when the user context is missing", run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { From 274069c790f98752316d83a9f78099e18b191c14 Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 17 Jun 2026 18:51:30 +0300 Subject: [PATCH 6/8] chore: remove accidental cover.out file --- cover.out | 447 ------------------------------------------------------ 1 file changed, 447 deletions(-) delete mode 100644 cover.out diff --git a/cover.out b/cover.out deleted file mode 100644 index c2c7d51b..00000000 --- a/cover.out +++ /dev/null @@ -1,447 +0,0 @@ -mode: set -github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:90.72,97.34 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:97.34,99.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:101.2,105.19 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:108.73,111.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:111.16,119.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:121.2,143.26 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/context_controller.go:146.72,168.2 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/health_controller.go:17.69,24.2 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/health_controller.go:26.67,31.2 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:43.66,56.2 5 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:58.68,62.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:62.16,69.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:71.2,75.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:75.16,82.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:84.2,84.42 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:84.42,85.56 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:85.56,88.4 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:91.2,93.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:93.16,100.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:102.2,104.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:104.16,111.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:113.2,119.4 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:122.73,126.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:126.16,133.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:135.2,137.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:137.16,141.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:143.2,147.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:147.16,151.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:153.2,156.40 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:156.40,160.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:162.2,165.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:165.16,169.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:171.2,173.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:173.16,177.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:179.2,179.17 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:179.17,183.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:185.2,185.22 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:185.22,189.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:191.2,193.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:193.16,197.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:199.2,199.30 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:199.30,203.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:205.2,205.63 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:205.63,213.17 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:213.17,217.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:219.3,220.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:223.2,225.40 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:225.40,228.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:228.8,231.22 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:231.22,233.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:233.9,235.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:238.2,240.53 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:240.53,243.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:243.8,246.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:248.2,262.16 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:262.16,266.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:268.2,272.66 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:272.66,275.17 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:275.17,279.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:280.3,281.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:284.2,284.58 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:284.58,290.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:290.17,294.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:296.3,297.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:300.2,300.69 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:303.91,305.2 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:307.61,308.46 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:308.46,310.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:311.2,311.40 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:314.76,317.50 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:317.50,319.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:321.2,321.60 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:321.60,323.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:323.17,325.12 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:328.3,328.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:328.28,329.12 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:333.3,333.41 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:333.41,335.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:338.3,338.48 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:338.48,339.12 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:344.3,345.10 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:345.10,346.12 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:349.3,354.17 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:354.17,355.12 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:359.3,359.59 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:359.59,361.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oauth_controller.go:364.2,364.14 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:92.63,109.2 9 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:114.61,115.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:115.28,122.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:124.2,126.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:126.16,134.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:136.2,138.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:138.9,145.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:147.2,149.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:149.16,151.43 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:151.43,161.4 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:162.3,167.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:170.2,179.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:179.16,186.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:188.2,189.43 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:194.69,195.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:195.28,206.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:208.2,210.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:210.16,218.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:220.2,220.32 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:220.32,228.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:230.2,234.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:234.16,242.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:244.2,246.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:246.9,254.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:257.2,264.16 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:264.16,275.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:278.2,285.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:285.16,296.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:298.2,301.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:304.57,305.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:305.28,311.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:313.2,316.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:316.16,322.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:324.2,325.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:325.16,331.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:334.2,340.54 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:340.54,345.10 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:345.10,352.4 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:354.3,355.36 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:360.2,362.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:362.9,368.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:370.2,370.47 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:370.47,376.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:378.2,380.23 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:381.28,384.10 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:384.10,388.10 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:388.10,391.19 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:391.19,393.6 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:394.5,397.11 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:400.4,404.10 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:408.3,410.43 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:410.43,416.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:418.3,420.10 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:420.10,426.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:428.3,430.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:430.17,436.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:438.3,438.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:439.23,442.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:442.17,443.47 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:443.47,449.5 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:451.4,451.48 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:451.48,457.5 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:459.4,463.10 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:466.3,466.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:469.2,472.28 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:475.60,476.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:476.28,482.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:484.2,487.25 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:487.25,489.10 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:489.10,495.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:497.3,497.45 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:497.45,503.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:505.3,505.22 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:506.8,506.48 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:506.48,507.61 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:507.61,513.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:514.3,515.18 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:515.18,521.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:522.8,528.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:530.2,532.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:532.16,533.47 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:533.47,539.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:541.3,545.9 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:549.2,549.65 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:549.65,555.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:557.2,561.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:561.16,567.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:569.2,569.69 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:572.95,575.27 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:575.27,580.32 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:580.32,582.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:584.3,584.25 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:584.25,586.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:588.3,590.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:590.17,594.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:596.3,598.18 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:598.18,604.4 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:606.3,607.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:610.2,616.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:616.16,620.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:622.2,624.28 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:624.28,626.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:626.8,628.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:630.2,630.17 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:630.17,636.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:638.2,638.43 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:641.110,646.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:646.16,648.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:650.2,650.26 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:650.26,652.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:656.2,656.42 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:659.107,662.54 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:662.54,664.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:666.2,666.15 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:666.15,668.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:670.2,670.48 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:673.106,678.41 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:678.41,680.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:682.2,682.53 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:682.53,684.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/oidc_controller.go:686.2,686.18 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:74.66,87.2 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:89.65,93.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:93.16,100.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:103.2,105.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:105.16,109.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:111.2,119.71 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:119.71,126.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:128.2,128.72 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:128.72,136.3 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:138.2,138.71 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:138.71,144.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:144.17,148.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:150.3,152.47 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:152.47,159.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:161.3,162.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:165.2,167.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:167.16,169.52 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:169.52,171.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:172.3,174.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:177.2,179.31 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:179.31,180.74 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:180.74,187.18 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:187.18,191.5 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:193.4,193.29 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:193.29,195.5 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:195.10,197.5 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:199.4,201.48 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:201.48,208.5 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:210.4,211.10 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:214.3,214.52 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:214.52,217.29 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:217.29,219.5 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:219.10,221.5 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:223.4,223.16 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:223.16,231.19 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:231.19,235.6 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:237.5,237.30 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:237.30,239.6 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:239.11,241.6 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:243.5,245.49 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:245.49,252.6 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:254.5,255.11 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:259.3,263.27 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:263.27,265.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:267.3,267.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:267.28,270.4 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:272.3,278.9 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:281.2,286.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:286.16,290.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:292.2,294.46 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:294.46,301.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:303.2,303.55 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:306.80,309.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:309.17,311.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:313.2,315.34 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:315.34,317.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:319.2,321.67 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:321.67,324.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:327.87,330.46 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:330.46,337.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:339.2,339.55 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:342.92,345.2 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:347.83,349.33 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:349.33,351.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:355.2,355.24 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:355.24,357.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:359.2,359.14 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:362.82,363.15 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:364.17,365.22 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:366.15,367.20 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:368.15,369.20 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:370.15,371.20 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:372.10,373.60 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:379.96,382.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:382.9,384.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:386.2,388.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:388.9,390.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:392.2,394.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:394.9,396.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:400.2,408.8 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:411.96,414.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:414.9,416.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:418.2,420.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:420.16,422.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:424.2,426.35 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:426.35,428.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:430.2,432.36 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:432.36,434.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:436.2,445.8 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:448.93,452.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:452.9,454.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:457.2,459.35 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:459.35,461.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:464.2,475.8 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:478.91,479.15 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:480.22,481.39 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:482.13,483.49 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:484.13,485.52 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:486.10,487.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:491.122,492.16 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:493.19,495.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:495.17,497.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:498.3,498.18 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:499.16,501.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:501.17,503.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:504.3,504.18 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:505.19,507.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:507.17,509.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:510.3,510.18 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:512.2,512.74 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:515.90,519.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:519.16,521.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:523.2,525.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:525.16,527.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:529.2,533.27 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:533.27,535.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:537.2,539.37 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:539.37,542.17 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:542.17,544.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:546.3,546.96 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:549.2,549.16 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:549.16,551.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:554.2,557.15 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:557.15,559.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:559.8,561.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/proxy_controller.go:563.2,565.17 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:23.78,34.2 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:36.73,37.44 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:37.44,43.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:44.2,44.42 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:44.42,50.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/resources_controller.go:51.2,51.54 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:44.63,58.2 7 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:60.64,64.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:64.16,71.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:73.2,77.14 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:77.14,87.3 6 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:89.2,91.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:91.16,92.46 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:92.46,101.4 5 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:102.3,107.9 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:110.2,110.81 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:110.81,113.37 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:113.37,115.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:115.9,117.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:118.3,122.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:125.2,127.36 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:127.36,130.23 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:130.23,137.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:139.3,139.33 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:139.33,143.18 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:143.18,145.5 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:147.4,148.19 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:148.19,150.5 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:152.4,160.18 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:160.18,167.5 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:169.4,176.10 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:180.2,187.36 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:187.36,188.38 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:188.38,190.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:191.3,191.39 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:191.39,193.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:196.2,196.35 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:196.35,198.25 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:198.25,200.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:203.2,205.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:205.16,212.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:214.2,218.36 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:218.36,220.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:220.8,222.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:224.2,229.4 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:232.65,237.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:237.16,238.39 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:238.39,245.4 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:246.3,251.9 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:254.2,256.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:256.16,263.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:265.2,267.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:267.16,269.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:269.8,272.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:274.2,279.4 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:282.63,286.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:286.16,293.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:295.2,297.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:297.16,304.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:306.2,306.28 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:306.28,313.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:315.2,319.14 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:319.14,329.3 6 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:331.2,333.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:333.17,340.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:342.2,344.9 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:344.9,353.3 5 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:355.2,357.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:357.16,359.17 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:359.17,361.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:362.8,364.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:366.2,375.32 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:375.32,377.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:378.2,378.33 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:378.33,380.3 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:382.2,384.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:384.16,391.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:393.2,401.4 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:404.68,407.16 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:407.16,414.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:416.2,416.30 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:416.30,423.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:425.2,434.16 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:434.16,441.3 3 0 -github.com/tinyauthapp/tinyauth/internal/controller/user_controller.go:443.2,451.4 4 0 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:56.78,66.2 5 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:68.83,69.28 1 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:69.28,75.3 2 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:77.2,94.4 2 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:97.61,98.28 1 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:98.28,104.3 2 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:106.2,108.16 2 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:108.16,114.3 2 0 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:116.2,122.25 5 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:125.66,131.53 4 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:131.53,137.3 2 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:139.2,146.89 3 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:146.89,148.3 1 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:150.2,150.18 1 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:153.88,156.12 2 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:156.12,158.3 1 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:160.2,160.16 1 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:161.14,162.38 1 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:162.38,164.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:165.3,166.47 2 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:166.47,168.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:169.23,171.17 2 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:171.17,173.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:174.3,174.19 1 1 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:174.19,176.4 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:177.10,178.15 1 0 -github.com/tinyauthapp/tinyauth/internal/controller/well_known_controller.go:181.2,181.13 1 1 From 2cec88799ea14d0e16754eb2550ca5c5abb9320d Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 17 Jun 2026 18:54:46 +0300 Subject: [PATCH 7/8] chore: fix typo in well known controller tests --- internal/controller/well_known_controller_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/controller/well_known_controller_test.go b/internal/controller/well_known_controller_test.go index b090ced3..8a969667 100644 --- a/internal/controller/well_known_controller_test.go +++ b/internal/controller/well_known_controller_test.go @@ -169,7 +169,7 @@ func TestWellKnownController(t *testing.T) { description: "Ensure webfinger resource validator allows http", oidcEnabled: true, run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { - resource := "https://example.com/testuser" + resource := "http://example.com/testuser" req := httptest.NewRequest("GET", fmt.Sprintf("/.well-known/webfinger?resource=%s", url.QueryEscape(resource)), nil) router.ServeHTTP(recorder, req) From c3801236023425f8f437857857ed262cf35e8516 Mon Sep 17 00:00:00 2001 From: Stavros Date: Wed, 17 Jun 2026 18:56:34 +0300 Subject: [PATCH 8/8] chore: fix typos in test descriptions --- internal/controller/oidc_controller_test.go | 2 +- internal/controller/user_controller_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/controller/oidc_controller_test.go b/internal/controller/oidc_controller_test.go index 8c049727..b22ddc54 100644 --- a/internal/controller/oidc_controller_test.go +++ b/internal/controller/oidc_controller_test.go @@ -210,7 +210,7 @@ func TestOIDCController(t *testing.T) { // --- authorize-complete --- { - description: "Shoud fail if oidc is disabled", + description: "Should fail if oidc is disabled", oidcDisabled: true, run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { body, err := json.Marshal(AuthorizeCompleteRequest{Ticket: "some-ticket"}) diff --git a/internal/controller/user_controller_test.go b/internal/controller/user_controller_test.go index d4cb2c0c..4f081b9b 100644 --- a/internal/controller/user_controller_test.go +++ b/internal/controller/user_controller_test.go @@ -290,7 +290,7 @@ func TestUserController(t *testing.T) { }, }, { - description: "TOTP should gracefuly reject invalid json", + description: "TOTP should gracefully reject invalid json", middlewares: []gin.HandlerFunc{}, run: func(t *testing.T, router *gin.Engine, recorder *httptest.ResponseRecorder) { req := httptest.NewRequest("POST", "/api/user/totp", strings.NewReader(`{"code":`))