Another bunch of refactoring and test
All checks were successful
ci/woodpecker/push/build Pipeline was successful
All checks were successful
ci/woodpecker/push/build Pipeline was successful
Signed-off-by: Nikolai Rodionov <iam@allanger.xyz>
This commit is contained in:
176
cover.cov
176
cover.cov
@@ -9,6 +9,9 @@ gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/hash/has
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/hash/hash.go:10.53,12.2 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/main.go:7.13,8.34 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/main.go:8.34,9.13 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:15.42,17.2 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:19.88,21.2 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:23.112,25.2 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:19.19,24.2 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:32.99,34.16 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:34.16,36.3 1 0
|
||||
@@ -164,13 +167,13 @@ gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:23.52,28.1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:28.16,31.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:33.2,34.16 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:34.16,37.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:39.2,43.16 3 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:43.16,46.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:48.2,50.16 3 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:50.16,51.42 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:51.42,53.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:53.9,56.4 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:59.2,59.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:39.2,44.16 3 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:44.16,47.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:49.2,51.16 3 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:51.16,52.42 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:52.42,54.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:54.9,57.4 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:60.2,60.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:20.18,24.27 3 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:25.16,26.45 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:26.45,28.4 1 0
|
||||
@@ -196,9 +199,6 @@ gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:147.55,149.
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:151.2,151.64 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:151.64,153.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:155.2,155.13 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:15.42,17.2 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:19.88,21.2 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:23.112,25.2 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:13.47,15.16 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:15.16,17.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:18.2,26.11 5 0
|
||||
@@ -236,11 +236,17 @@ gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/token
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:82.36,84.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:85.3,85.18 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:87.2,93.20 6 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:12.61,14.16 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:14.16,16.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:18.2,18.41 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:18.41,20.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:22.2,23.16 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:97.94,99.63 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:99.63,101.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:102.2,102.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:106.106,114.71 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:114.71,116.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:117.2,117.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:11.61,13.16 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:13.16,15.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:17.2,17.41 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:17.41,19.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:21.2,22.16 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:47.92,53.16 5 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:53.16,56.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:58.2,64.71 2 1
|
||||
@@ -311,73 +317,73 @@ gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/auth
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:222.2,222.21 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:58.76,60.2 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:62.41,69.2 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:73.98,79.22 4 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:79.22,83.17 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:83.17,86.4 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:89.2,89.26 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:89.26,91.3 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:92.2,92.115 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:92.115,94.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:95.2,95.12 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:99.99,105.16 5 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:105.16,108.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:111.2,111.17 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:111.17,113.3 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:115.2,116.16 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:116.16,119.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:121.2,124.16 3 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:124.16,127.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:129.2,140.72 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:140.72,143.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:145.2,145.28 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:149.81,154.16 4 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:154.16,157.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:159.2,165.72 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:165.72,168.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:170.2,170.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:174.84,179.64 4 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:179.64,182.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:184.2,184.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:188.89,193.16 4 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:193.16,196.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:198.2,208.75 3 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:208.75,211.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:213.2,213.16 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:217.94,222.16 4 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:222.16,223.45 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:223.45,225.4 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:226.3,227.29 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:230.2,231.74 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:231.74,235.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:237.2,248.20 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:252.92,264.16 6 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:264.16,267.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:269.2,271.35 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:271.35,274.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:276.2,276.18 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:276.18,301.17 13 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:301.17,304.4 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:306.3,306.29 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:309.2,309.20 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:313.96,315.41 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:315.41,316.34 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:316.34,317.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:319.3,320.35 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:320.35,322.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:323.3,323.25 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:325.2,325.8 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:332.46,333.26 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:333.26,334.26 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:334.26,336.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:338.2,338.14 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:346.113,364.16 8 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:364.16,365.36 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:365.36,367.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:368.3,369.29 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:372.2,372.21 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:372.21,374.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:376.2,376.39 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:376.39,378.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:380.2,385.20 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:388.34,391.2 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:393.44,398.2 4 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:72.98,78.22 4 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:78.22,82.17 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:82.17,85.4 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:88.2,88.26 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:88.26,90.3 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:91.2,91.115 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:91.115,93.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:94.2,94.12 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:98.99,104.16 5 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:104.16,107.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:110.2,110.17 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:110.17,112.3 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:114.2,115.16 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:115.16,118.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:120.2,123.16 3 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:123.16,126.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:128.2,139.72 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:139.72,142.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:144.2,144.28 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:148.81,153.16 4 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:153.16,156.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:158.2,164.72 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:164.72,167.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:169.2,169.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:173.89,177.82 3 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:177.82,180.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:181.2,181.12 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:185.94,190.16 4 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:190.16,193.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:195.2,197.97 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:197.97,200.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:202.2,202.24 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:206.94,211.16 4 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:211.16,212.45 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:212.45,214.4 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:215.3,216.29 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:219.2,220.74 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:220.74,224.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:226.2,237.20 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:241.92,253.16 6 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:253.16,256.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:258.2,260.35 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:260.35,263.3 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:265.2,265.18 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:265.18,290.17 13 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:290.17,293.4 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:295.3,295.29 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:298.2,298.20 1 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:302.96,304.41 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:304.41,305.34 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:305.34,306.12 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:308.3,309.35 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:309.35,311.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:312.3,312.25 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:314.2,314.8 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:321.46,322.26 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:322.26,323.26 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:323.26,325.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:327.2,327.14 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:335.113,353.16 8 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:353.16,354.36 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:354.36,356.4 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:357.3,358.29 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:361.2,361.21 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:361.21,363.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:365.2,365.39 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:365.39,367.3 1 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:369.2,374.20 2 0
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:377.34,380.2 2 1
|
||||
gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:382.44,387.2 4 0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// package controllers for token management
|
||||
// Package controllers for token management
|
||||
// This a token controller, that implements the logic around tokens
|
||||
package controllers
|
||||
|
||||
@@ -170,22 +170,20 @@ func (ctrl *TokenController) Update(ctx context.Context, data *TokenData) error
|
||||
}
|
||||
|
||||
// ForceExpiration of a token, so it can no longer be used
|
||||
func (ctrl *TokenController) ForceExpiration(ctx context.Context, id string) error {
|
||||
log := logger.FromContext(ctx).WithValues("uuid", id)
|
||||
func (ctrl *TokenController) ForceExpiration(ctx context.Context, tokenID string) error {
|
||||
log := logger.FromContext(ctx).WithValues("uuid", tokenID)
|
||||
log.V(2).Info("Forcing a token expiration")
|
||||
|
||||
query := "UPDATE tokens SET revoked_at = $1 WHERE uuid = $2;"
|
||||
if _, err := ctrl.DB.Query(query, time.Now(), id); err != nil {
|
||||
log.Error(err, "Couldn't update a token in the database")
|
||||
if err := repository.RevokeToken(ctx, ctrl.DB, tokenID, time.Now()); err != nil {
|
||||
log.Error(err, "Couldn't revoke a token")
|
||||
return ErrServerError
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Regenerate a token and get a new value
|
||||
func (ctrl *TokenController) Regenerate(ctx context.Context, id string) (string, error) {
|
||||
log := logger.FromContext(ctx).WithValues("uuid", id)
|
||||
func (ctrl *TokenController) Regenerate(ctx context.Context, tokenID string) (string, error) {
|
||||
log := logger.FromContext(ctx).WithValues("uuid", tokenID)
|
||||
log.V(2).Info("Regenerating a token")
|
||||
|
||||
tokenValue, err := token.GenerateToken()
|
||||
@@ -196,20 +194,12 @@ func (ctrl *TokenController) Regenerate(ctx context.Context, id string) (string,
|
||||
|
||||
tokenHash := hashSHA256(tokenValue)
|
||||
|
||||
query := `
|
||||
UPDATE tokens
|
||||
SET
|
||||
token_hash = $1,
|
||||
generated_at = $2,
|
||||
expires_at = NOW() + (expires_at - generated_at),
|
||||
WHERE uuid = $3;`
|
||||
|
||||
if _, err := ctrl.DB.Query(query, tokenHash, time.Now(), id); err != nil {
|
||||
log.Error(err, "Couldn't insert a token in the database")
|
||||
return "", ErrServerError
|
||||
if err := repository.RegenerateToken(ctx, ctrl.DB, tokenID, tokenHash, time.Now()); err != nil {
|
||||
log.Error(err, "Couldn't regenerate a token")
|
||||
return "", err
|
||||
}
|
||||
|
||||
return "", nil
|
||||
return tokenValue, nil
|
||||
}
|
||||
|
||||
// Get an existing token data
|
||||
@@ -254,61 +244,40 @@ func (ctrl *TokenController) List(ctx context.Context, userID string) ([]TokenDa
|
||||
|
||||
result := []TokenData{}
|
||||
|
||||
query := `
|
||||
SELECT uuid, description, generated_at, expires_at, revoked_at, last_used_at, created_at
|
||||
FROM tokens
|
||||
WHERE user_id = $1`
|
||||
|
||||
rows, err := ctrl.DB.QueryContext(ctx, query, userID)
|
||||
queryResult, err := repository.ListTokensByUserID(ctx, ctrl.DB, userID)
|
||||
if err != nil {
|
||||
if errors.Is(err, repository.ErrNotFound) {
|
||||
return nil, ErrTokenNotFound
|
||||
}
|
||||
log.Error(err, "Couldn't list tokens")
|
||||
return nil, ErrServerError
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
for _, tokenResult := range queryResult {
|
||||
scope := map[string][]string{}
|
||||
if err := json.Unmarshal([]byte(tokenResult.Scope), &scope); err != nil {
|
||||
log.Error(err, "Couldn't unmarshal scope into json")
|
||||
return nil, ErrServerError
|
||||
|
||||
if err := rows.Err(); err != nil {
|
||||
log.Error(err, "Couldn't list tokens")
|
||||
return nil, ErrServerError
|
||||
}
|
||||
|
||||
for rows.Next() {
|
||||
var t TokenData
|
||||
|
||||
var generatedAt sql.NullTime
|
||||
var expiresAt sql.NullTime
|
||||
var revokedAt sql.NullTime
|
||||
var lastUsedAt sql.NullTime
|
||||
var createdAt sql.NullTime
|
||||
|
||||
err := rows.Scan(
|
||||
&t.UUID,
|
||||
&t.Name,
|
||||
&generatedAt,
|
||||
&expiresAt,
|
||||
&revokedAt,
|
||||
&lastUsedAt,
|
||||
&createdAt,
|
||||
)
|
||||
|
||||
t.GeneratedAt = generatedAt.Time
|
||||
t.ExpiresAt = expiresAt.Time
|
||||
t.RevokedAt = revokedAt.Time
|
||||
t.LastUsedAt = lastUsedAt.Time
|
||||
t.CreatedAt = createdAt.Time
|
||||
|
||||
if err != nil {
|
||||
log.Error(err, "Couldn't write token into a struct")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
t := TokenData{
|
||||
UUID: tokenResult.UUID,
|
||||
Name: tokenResult.Decsription,
|
||||
CreatedAt: tokenResult.CreatedAt,
|
||||
LastUsedAt: tokenResult.LastUsedAt,
|
||||
RevokedAt: tokenResult.RevokedAt,
|
||||
ExpiresAt: tokenResult.ExpiresAt,
|
||||
GeneratedAt: tokenResult.GeneratedAt,
|
||||
Scopes: scope,
|
||||
}
|
||||
result = append(result, t)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// Lis all available permissions
|
||||
// ListPermissions returnes all available permissions
|
||||
func (ctrl *TokenController) ListPermissions(ctx context.Context) (result map[string][]string) {
|
||||
result = map[string][]string{}
|
||||
for key, val := range ctrl.ServiceInfo {
|
||||
|
||||
@@ -170,3 +170,122 @@ func TestIntegrationVerifyTokenOwner_WrongOwner(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
assert.ErrorIs(t, ctrl.VerifyTokenOwner(t.Context(), secondUserID, tokenID), controllers.ErrUserTokenMismatch)
|
||||
}
|
||||
|
||||
func TestIntegrationForceExpiration_Success(t *testing.T) {
|
||||
// Create a user for the token
|
||||
ctrlAccount := newTestAccountController(t.Context())
|
||||
accountData := &controllers.AccountData{
|
||||
Password: "qwertyu9",
|
||||
Email: newTestUniqueEmail("accounts"),
|
||||
}
|
||||
|
||||
userID, err := ctrlAccount.Create(t.Context(), accountData)
|
||||
assert.NoError(t, err)
|
||||
|
||||
tokenData := &controllers.TokenData{
|
||||
Name: "Test Token",
|
||||
UserID: userID,
|
||||
ExpiresAt: time.Now().Add(time.Second * 5),
|
||||
Scopes: map[string][]string{
|
||||
"Test": {"test", "test2"},
|
||||
},
|
||||
}
|
||||
|
||||
ctrl := newTestTokensController(t.Context())
|
||||
_, tokenID, err := ctrl.Create(t.Context(), tokenData)
|
||||
assert.NoError(t, err)
|
||||
now := time.Now()
|
||||
assert.NoError(t, ctrl.ForceExpiration(t.Context(), tokenID))
|
||||
token, err := ctrl.Get(t.Context(), tokenID, userID)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, now.Truncate(time.Second), token.RevokedAt.Truncate(time.Second))
|
||||
}
|
||||
|
||||
func TestIntegrationRegenerateToken_Success(t *testing.T) {
|
||||
// Create a user for the token
|
||||
ctrlAccount := newTestAccountController(t.Context())
|
||||
accountData := &controllers.AccountData{
|
||||
Password: "qwertyu9",
|
||||
Email: newTestUniqueEmail("accounts"),
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
userID, err := ctrlAccount.Create(t.Context(), accountData)
|
||||
assert.NoError(t, err)
|
||||
|
||||
tokenData := &controllers.TokenData{
|
||||
Name: "Test Token",
|
||||
UserID: userID,
|
||||
ExpiresAt: time.Now().Add(time.Second * 5),
|
||||
Scopes: map[string][]string{
|
||||
"Test": {"test", "test2"},
|
||||
},
|
||||
}
|
||||
|
||||
ctrl := newTestTokensController(t.Context())
|
||||
_, tokenID, err := ctrl.Create(t.Context(), tokenData)
|
||||
assert.NoError(t, err)
|
||||
|
||||
token, err := ctrl.Get(t.Context(), tokenID, userID)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, now.Truncate(time.Second), token.GeneratedAt.Truncate(time.Second))
|
||||
assert.Equal(t, now.Truncate(time.Second), token.CreatedAt.Truncate(time.Second))
|
||||
assert.Equal(t, tokenData.Scopes, token.Scopes)
|
||||
assert.Equal(t, tokenData.Name, token.Name)
|
||||
assert.Equal(t, tokenData.ExpiresAt.Truncate(time.Second), token.ExpiresAt.Truncate(time.Second))
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
newNow := time.Now()
|
||||
newToken, err := ctrl.Regenerate(t.Context(), tokenID)
|
||||
assert.NotEmpty(t, newToken)
|
||||
assert.NoError(t, err)
|
||||
|
||||
newExpiresAt := tokenData.ExpiresAt.Add(5 * time.Second)
|
||||
|
||||
updatedToken, err := ctrl.Get(t.Context(), tokenID, userID)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, newNow.Truncate(time.Second), updatedToken.GeneratedAt.Truncate(time.Second))
|
||||
assert.Equal(t, now.Truncate(time.Second), updatedToken.CreatedAt.Truncate(time.Second))
|
||||
assert.Equal(t, tokenData.Scopes, updatedToken.Scopes)
|
||||
assert.Equal(t, tokenData.Name, updatedToken.Name)
|
||||
assert.Equal(t, newExpiresAt.Truncate(time.Second), updatedToken.ExpiresAt.Truncate(time.Second))
|
||||
}
|
||||
|
||||
func TestIntegrationListTokens_Success(t *testing.T) {
|
||||
// Create a user for the token
|
||||
ctrlAccount := newTestAccountController(t.Context())
|
||||
accountData := &controllers.AccountData{
|
||||
Password: "qwertyu9",
|
||||
Email: newTestUniqueEmail("accounts"),
|
||||
}
|
||||
|
||||
userID, err := ctrlAccount.Create(t.Context(), accountData)
|
||||
assert.NoError(t, err)
|
||||
|
||||
tokenDataOne := &controllers.TokenData{
|
||||
Name: "Test Token",
|
||||
UserID: userID,
|
||||
ExpiresAt: time.Now().Add(time.Second * 5),
|
||||
Scopes: map[string][]string{
|
||||
"Test": {"test", "test2"},
|
||||
},
|
||||
}
|
||||
tokenDataTwo := &controllers.TokenData{
|
||||
Name: "Test Token again",
|
||||
UserID: userID,
|
||||
ExpiresAt: time.Now().Add(time.Second * 5),
|
||||
Scopes: map[string][]string{
|
||||
"Test": {"test", "test2"},
|
||||
},
|
||||
}
|
||||
|
||||
ctrl := newTestTokensController(t.Context())
|
||||
_, _, err = ctrl.Create(t.Context(), tokenDataOne)
|
||||
assert.NoError(t, err)
|
||||
_, _, err = ctrl.Create(t.Context(), tokenDataTwo)
|
||||
assert.NoError(t, err)
|
||||
|
||||
tokens, err := ctrl.List(t.Context(), userID)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, tokens, 2)
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ type TokenData struct {
|
||||
Scope string
|
||||
}
|
||||
|
||||
// CreateTokens adds a new token to a database
|
||||
// CreateToken adds a new token to a database
|
||||
func CreateToken(ctx context.Context, db *sql.DB, data *TokenData) error {
|
||||
query := `
|
||||
INSERT INTO tokens
|
||||
@@ -92,3 +92,83 @@ func GetToken(ctx context.Context, db *sql.DB, tokenID, userID string) (*TokenDa
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// RevokeToken sets revoked_at for a token by id
|
||||
func RevokeToken(ctx context.Context, db *sql.DB, tokenID string, revokedAt time.Time) error {
|
||||
query := "UPDATE tokens SET revoked_at = $1 WHERE uuid = $2;"
|
||||
if _, err := db.Query(query, revokedAt, tokenID); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// RegenerateToken sets a new token hash and updates the generated at
|
||||
func RegenerateToken(ctx context.Context, db *sql.DB, tokenID, hash string, generatedAt time.Time) error {
|
||||
query := `
|
||||
UPDATE tokens
|
||||
SET
|
||||
token_hash = $1,
|
||||
generated_at = $2,
|
||||
expires_at = NOW() + (expires_at - generated_at)
|
||||
WHERE uuid = $3;`
|
||||
if _, err := db.Query(query, hash, generatedAt, tokenID); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ListTokensByUserID(ctx context.Context, db *sql.DB, userID string) ([]TokenData, error) {
|
||||
query := `
|
||||
SELECT uuid, description, generated_at, expires_at, revoked_at, last_used_at, created_at, scopes
|
||||
FROM tokens
|
||||
WHERE user_id = $1`
|
||||
rows, err := db.QueryContext(ctx, query, userID)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, ErrNotFound
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defer rows.Close()
|
||||
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := []TokenData{}
|
||||
for rows.Next() {
|
||||
var t TokenData
|
||||
|
||||
var generatedAt sql.NullTime
|
||||
var expiresAt sql.NullTime
|
||||
var revokedAt sql.NullTime
|
||||
var lastUsedAt sql.NullTime
|
||||
var createdAt sql.NullTime
|
||||
|
||||
err := rows.Scan(
|
||||
&t.UUID,
|
||||
&t.Decsription,
|
||||
&generatedAt,
|
||||
&expiresAt,
|
||||
&revokedAt,
|
||||
&lastUsedAt,
|
||||
&createdAt,
|
||||
&t.Scope,
|
||||
)
|
||||
|
||||
t.GeneratedAt = generatedAt.Time
|
||||
t.ExpiresAt = expiresAt.Time
|
||||
t.RevokedAt = revokedAt.Time
|
||||
t.LastUsedAt = lastUsedAt.Time
|
||||
t.CreatedAt = createdAt.Time
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result = append(result, t)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user