From 9d384e5d1cb1d4afee23d036fbb9dfe7502fccf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Tue, 17 Jan 2023 10:39:41 +0100 Subject: [PATCH] fix: respect requested user in summary compat endpoint (resolve #455) --- coverage/coverage.out | 1520 +++++++++++++----------- go.mod | 65 +- go.sum | 85 ++ routes/compat/wakatime/v1/summaries.go | 7 +- routes/utils/user_utils.go | 46 +- routes/utils/user_utils_test.go | 83 ++ 6 files changed, 1024 insertions(+), 782 deletions(-) create mode 100644 routes/utils/user_utils_test.go diff --git a/coverage/coverage.out b/coverage/coverage.out index 4f0c832..45c5aea 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,4 +1,28 @@ mode: set +github.com/muety/wakapi/utils/strings.go:8.34,10.2 1 0 +github.com/muety/wakapi/utils/strings.go:12.58,13.49 1 0 +github.com/muety/wakapi/utils/strings.go:13.49,14.32 1 0 +github.com/muety/wakapi/utils/strings.go:19.3,19.15 1 0 +github.com/muety/wakapi/utils/strings.go:14.32,15.22 1 0 +github.com/muety/wakapi/utils/strings.go:15.22,17.5 1 0 +github.com/muety/wakapi/utils/strings.go:23.77,24.29 1 0 +github.com/muety/wakapi/utils/strings.go:29.2,29.19 1 0 +github.com/muety/wakapi/utils/strings.go:24.29,25.18 1 0 +github.com/muety/wakapi/utils/strings.go:25.18,27.4 1 0 +github.com/muety/wakapi/utils/auth.go:14.79,16.54 2 0 +github.com/muety/wakapi/utils/auth.go:20.2,22.16 3 0 +github.com/muety/wakapi/utils/auth.go:26.2,28.45 3 0 +github.com/muety/wakapi/utils/auth.go:31.2,32.32 2 0 +github.com/muety/wakapi/utils/auth.go:16.54,18.3 1 0 +github.com/muety/wakapi/utils/auth.go:22.16,24.3 1 0 +github.com/muety/wakapi/utils/auth.go:28.45,30.3 1 0 +github.com/muety/wakapi/utils/auth.go:35.65,37.85 2 0 +github.com/muety/wakapi/utils/auth.go:41.2,42.30 2 0 +github.com/muety/wakapi/utils/auth.go:37.85,39.3 1 0 +github.com/muety/wakapi/utils/auth.go:45.56,49.2 3 0 +github.com/muety/wakapi/utils/auth.go:51.55,54.16 3 0 +github.com/muety/wakapi/utils/auth.go:57.2,57.16 1 0 +github.com/muety/wakapi/utils/auth.go:54.16,56.3 1 0 github.com/muety/wakapi/utils/cron.go:5.44,7.21 2 0 github.com/muety/wakapi/utils/cron.go:10.2,10.20 1 0 github.com/muety/wakapi/utils/cron.go:7.21,9.3 1 0 @@ -24,6 +48,35 @@ github.com/muety/wakapi/utils/date.go:64.54,65.23 1 0 github.com/muety/wakapi/utils/date.go:66.52,67.21 1 0 github.com/muety/wakapi/utils/date.go:68.54,69.23 1 0 github.com/muety/wakapi/utils/date.go:70.52,71.21 1 0 +github.com/muety/wakapi/utils/db.go:10.34,11.37 1 0 +github.com/muety/wakapi/utils/db.go:19.2,20.14 2 0 +github.com/muety/wakapi/utils/db.go:11.37,13.110 2 0 +github.com/muety/wakapi/utils/db.go:17.3,17.20 1 0 +github.com/muety/wakapi/utils/db.go:13.110,16.4 2 0 +github.com/muety/wakapi/utils/db.go:23.39,24.37 1 0 +github.com/muety/wakapi/utils/db.go:32.2,33.14 2 0 +github.com/muety/wakapi/utils/db.go:24.37,26.119 2 0 +github.com/muety/wakapi/utils/db.go:30.3,30.20 1 0 +github.com/muety/wakapi/utils/db.go:26.119,29.4 2 0 +github.com/muety/wakapi/utils/db.go:36.66,37.48 1 0 +github.com/muety/wakapi/utils/db.go:40.2,40.53 1 0 +github.com/muety/wakapi/utils/db.go:37.48,39.3 1 0 +github.com/muety/wakapi/utils/db.go:43.59,44.16 1 0 +github.com/muety/wakapi/utils/db.go:47.2,47.15 1 0 +github.com/muety/wakapi/utils/db.go:50.2,50.14 1 0 +github.com/muety/wakapi/utils/db.go:44.16,46.3 1 0 +github.com/muety/wakapi/utils/db.go:47.15,49.3 1 0 +github.com/muety/wakapi/utils/dns.go:9.38,11.21 2 0 +github.com/muety/wakapi/utils/dns.go:14.2,15.39 2 0 +github.com/muety/wakapi/utils/dns.go:11.21,13.3 1 0 +github.com/muety/wakapi/utils/collection.go:5.52,6.26 1 0 +github.com/muety/wakapi/utils/collection.go:9.2,9.28 1 0 +github.com/muety/wakapi/utils/collection.go:6.26,8.3 1 0 +github.com/muety/wakapi/utils/collection.go:12.78,14.22 2 0 +github.com/muety/wakapi/utils/collection.go:20.2,20.11 1 0 +github.com/muety/wakapi/utils/collection.go:14.22,15.18 1 0 +github.com/muety/wakapi/utils/collection.go:18.3,18.12 1 0 +github.com/muety/wakapi/utils/collection.go:15.18,17.4 1 0 github.com/muety/wakapi/utils/http.go:20.13,22.2 1 1 github.com/muety/wakapi/utils/http.go:29.34,30.20 1 0 github.com/muety/wakapi/utils/http.go:33.2,33.19 1 0 @@ -50,54 +103,6 @@ github.com/muety/wakapi/utils/http.go:74.30,76.3 1 0 github.com/muety/wakapi/utils/http.go:80.56,83.45 3 1 github.com/muety/wakapi/utils/http.go:86.2,86.40 1 1 github.com/muety/wakapi/utils/http.go:83.45,85.3 1 1 -github.com/muety/wakapi/utils/sync.go:11.66,13.12 2 0 -github.com/muety/wakapi/utils/sync.go:17.2,17.9 1 0 -github.com/muety/wakapi/utils/sync.go:13.12,16.3 2 0 -github.com/muety/wakapi/utils/sync.go:18.11,19.15 1 0 -github.com/muety/wakapi/utils/sync.go:20.29,21.14 1 0 -github.com/muety/wakapi/utils/auth.go:14.79,16.54 2 0 -github.com/muety/wakapi/utils/auth.go:20.2,22.16 3 0 -github.com/muety/wakapi/utils/auth.go:26.2,28.45 3 0 -github.com/muety/wakapi/utils/auth.go:31.2,32.32 2 0 -github.com/muety/wakapi/utils/auth.go:16.54,18.3 1 0 -github.com/muety/wakapi/utils/auth.go:22.16,24.3 1 0 -github.com/muety/wakapi/utils/auth.go:28.45,30.3 1 0 -github.com/muety/wakapi/utils/auth.go:35.65,37.85 2 0 -github.com/muety/wakapi/utils/auth.go:41.2,42.30 2 0 -github.com/muety/wakapi/utils/auth.go:37.85,39.3 1 0 -github.com/muety/wakapi/utils/auth.go:45.56,49.2 3 0 -github.com/muety/wakapi/utils/auth.go:51.55,54.16 3 0 -github.com/muety/wakapi/utils/auth.go:57.2,57.16 1 0 -github.com/muety/wakapi/utils/auth.go:54.16,56.3 1 0 -github.com/muety/wakapi/utils/collection.go:5.52,6.26 1 0 -github.com/muety/wakapi/utils/collection.go:9.2,9.28 1 0 -github.com/muety/wakapi/utils/collection.go:6.26,8.3 1 0 -github.com/muety/wakapi/utils/collection.go:12.78,14.22 2 0 -github.com/muety/wakapi/utils/collection.go:20.2,20.11 1 0 -github.com/muety/wakapi/utils/collection.go:14.22,15.18 1 0 -github.com/muety/wakapi/utils/collection.go:18.3,18.12 1 0 -github.com/muety/wakapi/utils/collection.go:15.18,17.4 1 0 -github.com/muety/wakapi/utils/db.go:10.34,11.37 1 0 -github.com/muety/wakapi/utils/db.go:19.2,20.14 2 0 -github.com/muety/wakapi/utils/db.go:11.37,13.110 2 0 -github.com/muety/wakapi/utils/db.go:17.3,17.20 1 0 -github.com/muety/wakapi/utils/db.go:13.110,16.4 2 0 -github.com/muety/wakapi/utils/db.go:23.39,24.37 1 0 -github.com/muety/wakapi/utils/db.go:32.2,33.14 2 0 -github.com/muety/wakapi/utils/db.go:24.37,26.119 2 0 -github.com/muety/wakapi/utils/db.go:30.3,30.20 1 0 -github.com/muety/wakapi/utils/db.go:26.119,29.4 2 0 -github.com/muety/wakapi/utils/db.go:36.66,37.48 1 0 -github.com/muety/wakapi/utils/db.go:40.2,40.53 1 0 -github.com/muety/wakapi/utils/db.go:37.48,39.3 1 0 -github.com/muety/wakapi/utils/db.go:43.59,44.16 1 0 -github.com/muety/wakapi/utils/db.go:47.2,47.15 1 0 -github.com/muety/wakapi/utils/db.go:50.2,50.14 1 0 -github.com/muety/wakapi/utils/db.go:44.16,46.3 1 0 -github.com/muety/wakapi/utils/db.go:47.15,49.3 1 0 -github.com/muety/wakapi/utils/dns.go:9.38,11.21 2 0 -github.com/muety/wakapi/utils/dns.go:14.2,15.39 2 0 -github.com/muety/wakapi/utils/dns.go:11.21,13.3 1 0 github.com/muety/wakapi/utils/json.go:12.75,18.62 2 0 github.com/muety/wakapi/utils/json.go:22.2,22.29 1 0 github.com/muety/wakapi/utils/json.go:26.2,26.72 1 0 @@ -107,16 +112,11 @@ github.com/muety/wakapi/utils/json.go:18.62,20.3 1 0 github.com/muety/wakapi/utils/json.go:22.29,24.3 1 0 github.com/muety/wakapi/utils/json.go:26.72,28.3 1 0 github.com/muety/wakapi/utils/json.go:29.70,31.3 1 0 -github.com/muety/wakapi/utils/strings.go:8.34,10.2 1 0 -github.com/muety/wakapi/utils/strings.go:12.58,13.49 1 0 -github.com/muety/wakapi/utils/strings.go:13.49,14.32 1 0 -github.com/muety/wakapi/utils/strings.go:19.3,19.15 1 0 -github.com/muety/wakapi/utils/strings.go:14.32,15.22 1 0 -github.com/muety/wakapi/utils/strings.go:15.22,17.5 1 0 -github.com/muety/wakapi/utils/strings.go:23.77,24.29 1 0 -github.com/muety/wakapi/utils/strings.go:29.2,29.19 1 0 -github.com/muety/wakapi/utils/strings.go:24.29,25.18 1 0 -github.com/muety/wakapi/utils/strings.go:25.18,27.4 1 0 +github.com/muety/wakapi/utils/sync.go:11.66,13.12 2 0 +github.com/muety/wakapi/utils/sync.go:17.2,17.9 1 0 +github.com/muety/wakapi/utils/sync.go:13.12,16.3 2 0 +github.com/muety/wakapi/utils/sync.go:18.11,19.15 1 0 +github.com/muety/wakapi/utils/sync.go:20.29,21.14 1 0 github.com/muety/wakapi/utils/template.go:13.41,15.16 2 0 github.com/muety/wakapi/utils/template.go:18.2,18.23 1 0 github.com/muety/wakapi/utils/template.go:15.16,17.3 1 0 @@ -136,24 +136,26 @@ github.com/muety/wakapi/utils/template.go:39.51,40.12 1 0 github.com/muety/wakapi/utils/template.go:44.17,46.4 1 0 github.com/muety/wakapi/utils/template.go:48.17,50.4 1 0 github.com/muety/wakapi/utils/template.go:55.17,57.4 1 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:25.112,32.2 1 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:34.59,38.2 2 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:50.68,52.16 2 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:57.2,58.16 2 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:64.2,65.50 2 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:70.2,78.16 3 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:84.2,86.46 3 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:52.16,55.3 2 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:58.16,62.3 3 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:65.50,68.3 2 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:78.16,82.3 3 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:89.144,91.16 2 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:95.2,102.29 3 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:106.2,114.16 2 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:118.2,118.36 1 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:91.16,93.3 1 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:102.29,104.3 1 0 -github.com/muety/wakapi/routes/compat/shields/v1/badge.go:114.16,116.3 1 0 +github.com/muety/wakapi/config/session.go:9.46,10.25 1 0 +github.com/muety/wakapi/config/session.go:13.2,13.21 1 0 +github.com/muety/wakapi/config/session.go:10.25,12.3 1 0 +github.com/muety/wakapi/config/eventbus.go:26.13,28.2 1 1 +github.com/muety/wakapi/config/eventbus.go:30.26,32.2 1 0 +github.com/muety/wakapi/config/jobqueue.go:29.13,38.2 7 1 +github.com/muety/wakapi/config/jobqueue.go:40.48,41.34 1 1 +github.com/muety/wakapi/config/jobqueue.go:44.2,47.12 4 1 +github.com/muety/wakapi/config/jobqueue.go:41.34,43.3 1 0 +github.com/muety/wakapi/config/jobqueue.go:50.44,52.2 1 0 +github.com/muety/wakapi/config/jobqueue.go:54.48,55.35 1 0 +github.com/muety/wakapi/config/jobqueue.go:58.2,58.24 1 0 +github.com/muety/wakapi/config/jobqueue.go:55.35,57.3 1 0 +github.com/muety/wakapi/config/jobqueue.go:61.43,63.37 2 0 +github.com/muety/wakapi/config/jobqueue.go:70.2,70.16 1 0 +github.com/muety/wakapi/config/jobqueue.go:63.37,69.3 1 0 +github.com/muety/wakapi/config/jobqueue.go:73.20,74.30 1 0 +github.com/muety/wakapi/config/jobqueue.go:74.30,76.3 1 0 +github.com/muety/wakapi/config/jobqueue.go:79.20,81.2 1 0 +github.com/muety/wakapi/config/jobqueue.go:83.21,85.2 1 1 github.com/muety/wakapi/config/db_opts.go:11.56,13.2 1 0 github.com/muety/wakapi/config/db_opts.go:15.59,17.2 1 0 github.com/muety/wakapi/config/db_opts.go:19.61,21.39 1 0 @@ -166,9 +168,6 @@ github.com/muety/wakapi/config/db_opts.go:29.68,31.4 1 0 github.com/muety/wakapi/config/fs.go:9.56,10.19 1 0 github.com/muety/wakapi/config/fs.go:13.2,13.19 1 0 github.com/muety/wakapi/config/fs.go:10.19,12.3 1 0 -github.com/muety/wakapi/config/session.go:9.46,10.25 1 0 -github.com/muety/wakapi/config/session.go:13.2,13.21 1 0 -github.com/muety/wakapi/config/session.go:10.25,12.3 1 0 github.com/muety/wakapi/config/sentry.go:21.35,23.2 1 0 github.com/muety/wakapi/config/sentry.go:25.62,28.2 2 0 github.com/muety/wakapi/config/sentry.go:38.33,45.2 2 0 @@ -202,102 +201,102 @@ github.com/muety/wakapi/config/sentry.go:142.17,144.3 1 0 github.com/muety/wakapi/config/sentry.go:148.43,153.51 2 0 github.com/muety/wakapi/config/sentry.go:156.2,156.11 1 0 github.com/muety/wakapi/config/sentry.go:153.51,155.3 1 0 -github.com/muety/wakapi/config/config.go:182.64,184.2 1 0 -github.com/muety/wakapi/config/config.go:186.59,188.2 1 0 -github.com/muety/wakapi/config/config.go:190.82,200.2 1 0 -github.com/muety/wakapi/config/config.go:202.31,204.2 1 0 -github.com/muety/wakapi/config/config.go:206.32,208.2 1 0 -github.com/muety/wakapi/config/config.go:210.60,212.2 1 0 -github.com/muety/wakapi/config/config.go:214.59,216.2 1 0 -github.com/muety/wakapi/config/config.go:218.57,220.2 1 0 -github.com/muety/wakapi/config/config.go:222.53,224.2 1 0 -github.com/muety/wakapi/config/config.go:226.53,227.46 1 0 -github.com/muety/wakapi/config/config.go:243.2,243.51 1 0 -github.com/muety/wakapi/config/config.go:227.46,231.17 3 0 -github.com/muety/wakapi/config/config.go:235.3,236.17 2 0 -github.com/muety/wakapi/config/config.go:240.3,240.44 1 0 -github.com/muety/wakapi/config/config.go:231.17,233.4 1 0 -github.com/muety/wakapi/config/config.go:236.17,238.4 1 0 -github.com/muety/wakapi/config/config.go:246.50,247.47 1 0 -github.com/muety/wakapi/config/config.go:266.2,266.52 1 0 -github.com/muety/wakapi/config/config.go:247.47,254.17 5 0 -github.com/muety/wakapi/config/config.go:258.3,259.17 2 0 -github.com/muety/wakapi/config/config.go:263.3,263.54 1 0 -github.com/muety/wakapi/config/config.go:254.17,256.4 1 0 -github.com/muety/wakapi/config/config.go:259.17,261.4 1 0 -github.com/muety/wakapi/config/config.go:269.65,274.56 3 0 -github.com/muety/wakapi/config/config.go:296.2,296.76 1 0 -github.com/muety/wakapi/config/config.go:300.2,300.14 1 0 -github.com/muety/wakapi/config/config.go:274.56,276.33 1 0 -github.com/muety/wakapi/config/config.go:276.33,279.18 3 0 -github.com/muety/wakapi/config/config.go:283.4,284.18 2 0 -github.com/muety/wakapi/config/config.go:288.4,288.45 1 0 -github.com/muety/wakapi/config/config.go:279.18,281.5 1 0 -github.com/muety/wakapi/config/config.go:284.18,286.5 1 0 -github.com/muety/wakapi/config/config.go:290.8,291.33 1 0 -github.com/muety/wakapi/config/config.go:291.33,293.4 1 0 -github.com/muety/wakapi/config/config.go:296.76,298.3 1 0 -github.com/muety/wakapi/config/config.go:303.54,306.2 2 0 -github.com/muety/wakapi/config/config.go:308.36,310.2 1 0 -github.com/muety/wakapi/config/config.go:312.35,314.2 1 0 -github.com/muety/wakapi/config/config.go:316.38,318.2 1 0 -github.com/muety/wakapi/config/config.go:320.46,322.2 1 0 -github.com/muety/wakapi/config/config.go:324.43,326.2 1 0 -github.com/muety/wakapi/config/config.go:328.29,330.2 1 1 -github.com/muety/wakapi/config/config.go:332.48,343.16 2 0 -github.com/muety/wakapi/config/config.go:347.2,348.53 2 0 -github.com/muety/wakapi/config/config.go:352.2,352.15 1 0 -github.com/muety/wakapi/config/config.go:343.16,345.3 1 0 -github.com/muety/wakapi/config/config.go:348.53,350.3 1 0 -github.com/muety/wakapi/config/config.go:355.45,356.27 1 0 -github.com/muety/wakapi/config/config.go:359.2,359.24 1 0 -github.com/muety/wakapi/config/config.go:362.2,362.25 1 0 -github.com/muety/wakapi/config/config.go:365.2,365.15 1 0 -github.com/muety/wakapi/config/config.go:356.27,358.3 1 0 -github.com/muety/wakapi/config/config.go:359.24,361.3 1 0 -github.com/muety/wakapi/config/config.go:362.25,364.3 1 0 -github.com/muety/wakapi/config/config.go:368.26,370.2 1 0 -github.com/muety/wakapi/config/config.go:372.20,374.2 1 0 -github.com/muety/wakapi/config/config.go:376.35,381.78 3 0 -github.com/muety/wakapi/config/config.go:385.2,389.21 4 0 -github.com/muety/wakapi/config/config.go:393.2,402.52 6 0 -github.com/muety/wakapi/config/config.go:406.2,406.47 1 0 -github.com/muety/wakapi/config/config.go:412.2,412.29 1 0 -github.com/muety/wakapi/config/config.go:417.2,417.41 1 0 -github.com/muety/wakapi/config/config.go:428.2,428.108 1 0 -github.com/muety/wakapi/config/config.go:431.2,431.28 1 0 -github.com/muety/wakapi/config/config.go:434.2,434.51 1 0 -github.com/muety/wakapi/config/config.go:438.2,438.100 1 0 -github.com/muety/wakapi/config/config.go:441.2,441.74 1 0 -github.com/muety/wakapi/config/config.go:445.2,447.78 2 0 -github.com/muety/wakapi/config/config.go:450.2,450.81 1 0 -github.com/muety/wakapi/config/config.go:453.2,453.66 1 0 -github.com/muety/wakapi/config/config.go:460.2,460.55 1 0 -github.com/muety/wakapi/config/config.go:463.2,463.56 1 0 -github.com/muety/wakapi/config/config.go:466.2,466.65 1 0 -github.com/muety/wakapi/config/config.go:470.2,471.14 2 0 -github.com/muety/wakapi/config/config.go:381.78,383.3 1 0 -github.com/muety/wakapi/config/config.go:389.21,391.3 1 0 -github.com/muety/wakapi/config/config.go:402.52,404.3 1 0 -github.com/muety/wakapi/config/config.go:406.47,407.14 1 0 -github.com/muety/wakapi/config/config.go:407.14,409.4 1 0 -github.com/muety/wakapi/config/config.go:412.29,415.3 2 0 -github.com/muety/wakapi/config/config.go:417.41,419.3 1 0 -github.com/muety/wakapi/config/config.go:419.8,421.35 2 0 -github.com/muety/wakapi/config/config.go:424.3,424.37 1 0 -github.com/muety/wakapi/config/config.go:421.35,423.4 1 0 -github.com/muety/wakapi/config/config.go:428.108,430.3 1 0 -github.com/muety/wakapi/config/config.go:431.28,433.3 1 0 -github.com/muety/wakapi/config/config.go:434.51,437.3 2 0 -github.com/muety/wakapi/config/config.go:438.100,440.3 1 0 -github.com/muety/wakapi/config/config.go:441.74,443.3 1 0 -github.com/muety/wakapi/config/config.go:447.78,449.3 1 0 -github.com/muety/wakapi/config/config.go:450.81,452.3 1 0 -github.com/muety/wakapi/config/config.go:453.66,454.48 1 0 -github.com/muety/wakapi/config/config.go:454.48,456.4 1 0 -github.com/muety/wakapi/config/config.go:460.55,462.3 1 0 -github.com/muety/wakapi/config/config.go:463.56,465.3 1 0 -github.com/muety/wakapi/config/config.go:466.65,468.3 1 0 +github.com/muety/wakapi/config/config.go:183.64,185.2 1 0 +github.com/muety/wakapi/config/config.go:187.59,189.2 1 0 +github.com/muety/wakapi/config/config.go:191.82,201.2 1 0 +github.com/muety/wakapi/config/config.go:203.31,205.2 1 0 +github.com/muety/wakapi/config/config.go:207.32,209.2 1 0 +github.com/muety/wakapi/config/config.go:211.60,213.2 1 0 +github.com/muety/wakapi/config/config.go:215.59,217.2 1 0 +github.com/muety/wakapi/config/config.go:219.57,221.2 1 0 +github.com/muety/wakapi/config/config.go:223.53,225.2 1 0 +github.com/muety/wakapi/config/config.go:227.53,228.46 1 0 +github.com/muety/wakapi/config/config.go:244.2,244.51 1 0 +github.com/muety/wakapi/config/config.go:228.46,232.17 3 0 +github.com/muety/wakapi/config/config.go:236.3,237.17 2 0 +github.com/muety/wakapi/config/config.go:241.3,241.44 1 0 +github.com/muety/wakapi/config/config.go:232.17,234.4 1 0 +github.com/muety/wakapi/config/config.go:237.17,239.4 1 0 +github.com/muety/wakapi/config/config.go:247.50,248.47 1 0 +github.com/muety/wakapi/config/config.go:267.2,267.52 1 0 +github.com/muety/wakapi/config/config.go:248.47,255.17 5 0 +github.com/muety/wakapi/config/config.go:259.3,260.17 2 0 +github.com/muety/wakapi/config/config.go:264.3,264.54 1 0 +github.com/muety/wakapi/config/config.go:255.17,257.4 1 0 +github.com/muety/wakapi/config/config.go:260.17,262.4 1 0 +github.com/muety/wakapi/config/config.go:270.65,275.56 3 0 +github.com/muety/wakapi/config/config.go:297.2,297.76 1 0 +github.com/muety/wakapi/config/config.go:301.2,301.14 1 0 +github.com/muety/wakapi/config/config.go:275.56,277.33 1 0 +github.com/muety/wakapi/config/config.go:277.33,280.18 3 0 +github.com/muety/wakapi/config/config.go:284.4,285.18 2 0 +github.com/muety/wakapi/config/config.go:289.4,289.45 1 0 +github.com/muety/wakapi/config/config.go:280.18,282.5 1 0 +github.com/muety/wakapi/config/config.go:285.18,287.5 1 0 +github.com/muety/wakapi/config/config.go:291.8,292.33 1 0 +github.com/muety/wakapi/config/config.go:292.33,294.4 1 0 +github.com/muety/wakapi/config/config.go:297.76,299.3 1 0 +github.com/muety/wakapi/config/config.go:304.54,307.2 2 0 +github.com/muety/wakapi/config/config.go:309.36,311.2 1 0 +github.com/muety/wakapi/config/config.go:313.35,315.2 1 0 +github.com/muety/wakapi/config/config.go:317.38,319.2 1 0 +github.com/muety/wakapi/config/config.go:321.46,323.2 1 0 +github.com/muety/wakapi/config/config.go:325.43,327.2 1 0 +github.com/muety/wakapi/config/config.go:329.29,331.2 1 1 +github.com/muety/wakapi/config/config.go:333.48,344.16 2 0 +github.com/muety/wakapi/config/config.go:348.2,349.53 2 0 +github.com/muety/wakapi/config/config.go:353.2,353.15 1 0 +github.com/muety/wakapi/config/config.go:344.16,346.3 1 0 +github.com/muety/wakapi/config/config.go:349.53,351.3 1 0 +github.com/muety/wakapi/config/config.go:356.45,357.27 1 0 +github.com/muety/wakapi/config/config.go:360.2,360.24 1 0 +github.com/muety/wakapi/config/config.go:363.2,363.25 1 0 +github.com/muety/wakapi/config/config.go:366.2,366.15 1 0 +github.com/muety/wakapi/config/config.go:357.27,359.3 1 0 +github.com/muety/wakapi/config/config.go:360.24,362.3 1 0 +github.com/muety/wakapi/config/config.go:363.25,365.3 1 0 +github.com/muety/wakapi/config/config.go:369.26,371.2 1 0 +github.com/muety/wakapi/config/config.go:373.20,375.2 1 0 +github.com/muety/wakapi/config/config.go:377.35,382.78 3 0 +github.com/muety/wakapi/config/config.go:386.2,390.21 4 0 +github.com/muety/wakapi/config/config.go:394.2,403.52 6 0 +github.com/muety/wakapi/config/config.go:407.2,407.47 1 0 +github.com/muety/wakapi/config/config.go:413.2,413.29 1 0 +github.com/muety/wakapi/config/config.go:418.2,418.41 1 0 +github.com/muety/wakapi/config/config.go:429.2,429.108 1 0 +github.com/muety/wakapi/config/config.go:432.2,432.28 1 0 +github.com/muety/wakapi/config/config.go:435.2,435.51 1 0 +github.com/muety/wakapi/config/config.go:439.2,439.100 1 0 +github.com/muety/wakapi/config/config.go:442.2,442.74 1 0 +github.com/muety/wakapi/config/config.go:446.2,448.78 2 0 +github.com/muety/wakapi/config/config.go:451.2,451.81 1 0 +github.com/muety/wakapi/config/config.go:454.2,454.66 1 0 +github.com/muety/wakapi/config/config.go:461.2,461.55 1 0 +github.com/muety/wakapi/config/config.go:464.2,464.56 1 0 +github.com/muety/wakapi/config/config.go:467.2,467.65 1 0 +github.com/muety/wakapi/config/config.go:471.2,472.14 2 0 +github.com/muety/wakapi/config/config.go:382.78,384.3 1 0 +github.com/muety/wakapi/config/config.go:390.21,392.3 1 0 +github.com/muety/wakapi/config/config.go:403.52,405.3 1 0 +github.com/muety/wakapi/config/config.go:407.47,408.14 1 0 +github.com/muety/wakapi/config/config.go:408.14,410.4 1 0 +github.com/muety/wakapi/config/config.go:413.29,416.3 2 0 +github.com/muety/wakapi/config/config.go:418.41,420.3 1 0 +github.com/muety/wakapi/config/config.go:420.8,422.35 2 0 +github.com/muety/wakapi/config/config.go:425.3,425.37 1 0 +github.com/muety/wakapi/config/config.go:422.35,424.4 1 0 +github.com/muety/wakapi/config/config.go:429.108,431.3 1 0 +github.com/muety/wakapi/config/config.go:432.28,434.3 1 0 +github.com/muety/wakapi/config/config.go:435.51,438.3 2 0 +github.com/muety/wakapi/config/config.go:439.100,441.3 1 0 +github.com/muety/wakapi/config/config.go:442.74,444.3 1 0 +github.com/muety/wakapi/config/config.go:448.78,450.3 1 0 +github.com/muety/wakapi/config/config.go:451.81,453.3 1 0 +github.com/muety/wakapi/config/config.go:454.66,455.48 1 0 +github.com/muety/wakapi/config/config.go:455.48,457.4 1 0 +github.com/muety/wakapi/config/config.go:461.55,463.3 1 0 +github.com/muety/wakapi/config/config.go:464.56,466.3 1 0 +github.com/muety/wakapi/config/config.go:467.65,469.3 1 0 github.com/muety/wakapi/config/db.go:40.50,41.19 1 0 github.com/muety/wakapi/config/db.go:54.2,54.12 1 0 github.com/muety/wakapi/config/db.go:42.23,46.5 1 0 @@ -312,23 +311,6 @@ github.com/muety/wakapi/config/db.go:84.2,91.3 1 1 github.com/muety/wakapi/config/db.go:75.25,77.3 1 0 github.com/muety/wakapi/config/db.go:80.16,82.3 1 0 github.com/muety/wakapi/config/db.go:94.54,96.2 1 1 -github.com/muety/wakapi/config/eventbus.go:26.13,28.2 1 1 -github.com/muety/wakapi/config/eventbus.go:30.26,32.2 1 0 -github.com/muety/wakapi/config/jobqueue.go:29.13,38.2 7 1 -github.com/muety/wakapi/config/jobqueue.go:40.48,41.34 1 1 -github.com/muety/wakapi/config/jobqueue.go:44.2,47.12 4 1 -github.com/muety/wakapi/config/jobqueue.go:41.34,43.3 1 0 -github.com/muety/wakapi/config/jobqueue.go:50.44,52.2 1 0 -github.com/muety/wakapi/config/jobqueue.go:54.48,55.35 1 0 -github.com/muety/wakapi/config/jobqueue.go:58.2,58.24 1 0 -github.com/muety/wakapi/config/jobqueue.go:55.35,57.3 1 0 -github.com/muety/wakapi/config/jobqueue.go:61.43,63.37 2 0 -github.com/muety/wakapi/config/jobqueue.go:70.2,70.16 1 0 -github.com/muety/wakapi/config/jobqueue.go:63.37,69.3 1 0 -github.com/muety/wakapi/config/jobqueue.go:73.20,74.30 1 0 -github.com/muety/wakapi/config/jobqueue.go:74.30,76.3 1 0 -github.com/muety/wakapi/config/jobqueue.go:79.20,81.2 1 0 -github.com/muety/wakapi/config/jobqueue.go:83.21,85.2 1 1 github.com/muety/wakapi/middlewares/logging.go:20.102,21.43 1 0 github.com/muety/wakapi/middlewares/logging.go:21.43,27.3 1 0 github.com/muety/wakapi/middlewares/logging.go:30.80,39.44 7 0 @@ -358,15 +340,17 @@ github.com/muety/wakapi/middlewares/logging.go:148.40,150.2 1 0 github.com/muety/wakapi/middlewares/logging.go:151.52,153.2 1 0 github.com/muety/wakapi/middlewares/principal.go:15.62,17.2 1 0 github.com/muety/wakapi/middlewares/principal.go:19.58,21.2 1 0 -github.com/muety/wakapi/middlewares/principal.go:23.60,25.2 1 0 -github.com/muety/wakapi/middlewares/principal.go:46.71,47.43 1 0 -github.com/muety/wakapi/middlewares/principal.go:47.43,49.3 1 0 -github.com/muety/wakapi/middlewares/principal.go:52.81,55.2 2 0 -github.com/muety/wakapi/middlewares/principal.go:57.55,58.52 1 0 -github.com/muety/wakapi/middlewares/principal.go:58.52,60.3 1 0 -github.com/muety/wakapi/middlewares/principal.go:63.49,64.52 1 0 -github.com/muety/wakapi/middlewares/principal.go:67.2,67.12 1 0 -github.com/muety/wakapi/middlewares/principal.go:64.52,66.3 1 0 +github.com/muety/wakapi/middlewares/principal.go:23.60,24.24 1 0 +github.com/muety/wakapi/middlewares/principal.go:27.2,27.31 1 0 +github.com/muety/wakapi/middlewares/principal.go:24.24,26.3 1 0 +github.com/muety/wakapi/middlewares/principal.go:49.71,50.43 1 0 +github.com/muety/wakapi/middlewares/principal.go:50.43,52.3 1 0 +github.com/muety/wakapi/middlewares/principal.go:55.81,58.2 2 0 +github.com/muety/wakapi/middlewares/principal.go:60.55,61.52 1 0 +github.com/muety/wakapi/middlewares/principal.go:61.52,63.3 1 0 +github.com/muety/wakapi/middlewares/principal.go:66.49,67.52 1 0 +github.com/muety/wakapi/middlewares/principal.go:70.2,70.12 1 0 +github.com/muety/wakapi/middlewares/principal.go:67.52,69.3 1 0 github.com/muety/wakapi/middlewares/security.go:19.62,20.43 1 0 github.com/muety/wakapi/middlewares/security.go:20.43,22.3 1 0 github.com/muety/wakapi/middlewares/security.go:25.80,26.36 1 0 @@ -423,6 +407,104 @@ github.com/muety/wakapi/middlewares/filetype.go:22.84,24.34 2 0 github.com/muety/wakapi/middlewares/filetype.go:31.2,31.27 1 0 github.com/muety/wakapi/middlewares/filetype.go:24.34,25.50 1 0 github.com/muety/wakapi/middlewares/filetype.go:25.50,29.4 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:25.112,32.2 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:34.59,38.2 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:50.68,52.16 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:57.2,58.16 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:64.2,65.50 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:70.2,78.16 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:84.2,86.46 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:52.16,55.3 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:58.16,62.3 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:65.50,68.3 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:78.16,82.3 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:89.144,91.16 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:95.2,102.29 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:106.2,114.16 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:118.2,118.36 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:91.16,93.3 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:102.29,104.3 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:114.16,116.3 1 0 +github.com/muety/wakapi/routes/utils/project_utils.go:15.144,18.16 2 0 +github.com/muety/wakapi/routes/utils/project_utils.go:23.2,24.16 2 0 +github.com/muety/wakapi/routes/utils/project_utils.go:28.2,32.35 2 0 +github.com/muety/wakapi/routes/utils/project_utils.go:37.2,39.20 3 0 +github.com/muety/wakapi/routes/utils/project_utils.go:18.16,20.3 1 0 +github.com/muety/wakapi/routes/utils/project_utils.go:24.16,26.3 1 0 +github.com/muety/wakapi/routes/utils/project_utils.go:32.35,35.3 2 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:11.98,13.16 2 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:16.2,16.51 1 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:13.16,15.3 1 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:19.119,21.22 2 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:25.2,33.16 2 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:37.2,40.36 3 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:21.22,23.3 1 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:33.16,35.3 1 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:43.90,45.32 2 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:50.2,50.15 1 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:45.32,46.50 1 0 +github.com/muety/wakapi/routes/utils/summary_utils.go:46.50,48.4 1 0 +github.com/muety/wakapi/routes/utils/user_utils.go:15.139,16.68 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:23.2,25.24 2 1 +github.com/muety/wakapi/routes/utils/user_utils.go:29.2,30.27 2 1 +github.com/muety/wakapi/routes/utils/user_utils.go:36.2,36.66 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:40.2,41.16 2 1 +github.com/muety/wakapi/routes/utils/user_utils.go:45.2,45.27 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:16.68,21.3 4 1 +github.com/muety/wakapi/routes/utils/user_utils.go:25.24,27.3 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:30.27,32.3 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:32.8,32.38 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:32.38,34.3 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:36.66,38.3 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:41.16,43.3 1 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:21.13,24.2 2 1 +github.com/muety/wakapi/routes/utils/badge_utils.go:26.114,28.79 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:32.2,33.75 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:39.2,47.71 4 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:51.2,53.22 3 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:79.2,79.19 1 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:83.2,83.31 1 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:28.79,30.3 1 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:33.75,34.61 1 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:34.61,36.4 1 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:47.71,49.3 1 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:54.17,56.68 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:57.12,59.63 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:60.16,62.67 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:63.18,65.69 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:66.17,68.68 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:69.15,71.66 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:73.10,76.30 2 0 +github.com/muety/wakapi/routes/utils/badge_utils.go:79.19,81.3 1 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:11.68,13.16 2 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:17.2,18.16 2 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:22.2,22.35 1 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:13.16,15.3 1 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:18.16,20.3 1 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:25.65,33.48 6 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:37.2,37.24 1 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:33.48,35.3 1 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:40.67,48.47 6 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:52.2,52.45 1 0 +github.com/muety/wakapi/routes/utils/heartbeat_utils.go:48.47,50.3 1 0 +github.com/muety/wakapi/routes/utils/messages.go:9.71,11.2 1 0 +github.com/muety/wakapi/routes/utils/messages.go:13.73,15.2 1 0 +github.com/muety/wakapi/routes/utils/messages.go:17.97,19.57 2 0 +github.com/muety/wakapi/routes/utils/messages.go:22.2,22.65 1 0 +github.com/muety/wakapi/routes/utils/messages.go:25.2,26.11 2 0 +github.com/muety/wakapi/routes/utils/messages.go:19.57,21.3 1 0 +github.com/muety/wakapi/routes/utils/messages.go:22.65,24.3 1 0 +github.com/muety/wakapi/routes/utils/messages.go:29.78,33.2 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:23.123,29.2 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:31.62,37.2 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:49.71,51.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:55.2,56.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:63.2,66.28 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:72.2,73.46 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:51.16,53.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:56.16,61.3 4 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:66.28,67.30 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:67.30,69.4 1 0 github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:22.112,28.2 1 0 github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:30.59,41.2 6 0 github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:61.68,66.56 4 0 @@ -474,24 +556,24 @@ github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:72.2,73.16 2 0 github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:79.2,80.46 2 0 github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:68.16,70.3 1 0 github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:73.16,77.3 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:83.95,89.19 5 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:95.2,96.22 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:125.2,139.37 6 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:150.2,150.38 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:89.19,90.56 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:90.56,92.4 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:96.22,98.98 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:98.98,100.4 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:100.9,102.4 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:103.8,103.130 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:103.130,106.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:106.8,111.17 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:115.3,116.17 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:111.17,113.4 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:116.17,118.4 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:139.37,141.17 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:145.3,147.25 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:141.17,143.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:83.114,88.19 4 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:94.2,95.22 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:124.2,138.37 6 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:149.2,149.38 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:88.19,89.56 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:89.56,91.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:95.22,97.98 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:97.98,99.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:99.9,101.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:102.8,102.130 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:102.130,105.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:105.8,110.17 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:114.3,115.17 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:110.17,112.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:115.17,117.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:138.37,140.17 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:144.3,146.25 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:140.17,142.4 1 0 github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:21.116,27.2 1 1 github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:29.59,35.2 3 1 github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:46.68,48.16 2 1 @@ -521,36 +603,20 @@ github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:79.2,85.47 2 0 github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:55.16,57.3 1 0 github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:62.16,66.3 3 0 github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:72.16,77.3 4 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:23.123,29.2 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:31.62,37.2 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:49.71,51.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:55.2,56.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:63.2,66.28 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:72.2,73.46 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:51.16,53.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:56.16,61.3 4 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:66.28,67.30 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:67.30,69.4 1 0 -github.com/muety/wakapi/models/heartbeat.go:33.34,35.2 1 1 -github.com/muety/wakapi/models/heartbeat.go:37.55,40.2 2 0 -github.com/muety/wakapi/models/heartbeat.go:42.65,44.46 2 1 -github.com/muety/wakapi/models/heartbeat.go:44.46,45.108 1 1 -github.com/muety/wakapi/models/heartbeat.go:45.108,48.4 2 1 -github.com/muety/wakapi/models/heartbeat.go:52.50,53.11 1 1 -github.com/muety/wakapi/models/heartbeat.go:68.2,68.15 1 1 -github.com/muety/wakapi/models/heartbeat.go:72.2,72.12 1 1 -github.com/muety/wakapi/models/heartbeat.go:54.22,55.18 1 1 -github.com/muety/wakapi/models/heartbeat.go:56.21,57.17 1 1 -github.com/muety/wakapi/models/heartbeat.go:58.23,59.19 1 1 -github.com/muety/wakapi/models/heartbeat.go:60.17,61.26 1 1 -github.com/muety/wakapi/models/heartbeat.go:62.22,63.18 1 1 -github.com/muety/wakapi/models/heartbeat.go:64.21,65.17 1 0 -github.com/muety/wakapi/models/heartbeat.go:68.15,70.3 1 1 -github.com/muety/wakapi/models/heartbeat.go:75.37,91.2 1 0 -github.com/muety/wakapi/models/heartbeat.go:99.41,101.16 2 0 -github.com/muety/wakapi/models/heartbeat.go:104.2,105.10 2 0 -github.com/muety/wakapi/models/heartbeat.go:101.16,103.3 1 0 -github.com/muety/wakapi/models/heartbeat.go:108.38,118.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:7.31,9.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:11.41,13.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:15.36,17.2 1 0 +github.com/muety/wakapi/models/heartbeats.go:19.43,22.2 2 0 +github.com/muety/wakapi/models/heartbeats.go:24.41,26.18 1 0 +github.com/muety/wakapi/models/heartbeats.go:29.2,29.16 1 0 +github.com/muety/wakapi/models/heartbeats.go:26.18,28.3 1 0 +github.com/muety/wakapi/models/heartbeats.go:32.40,34.18 1 0 +github.com/muety/wakapi/models/heartbeats.go:37.2,37.24 1 0 +github.com/muety/wakapi/models/heartbeats.go:34.18,36.3 1 0 +github.com/muety/wakapi/models/mail.go:19.44,23.2 3 0 +github.com/muety/wakapi/models/mail.go:25.44,29.2 3 0 +github.com/muety/wakapi/models/mail.go:31.32,44.2 1 0 +github.com/muety/wakapi/models/mail.go:46.41,48.2 1 0 github.com/muety/wakapi/models/mail_address.go:15.13,18.2 2 1 github.com/muety/wakapi/models/mail_address.go:24.38,26.2 1 0 github.com/muety/wakapi/models/mail_address.go:28.35,30.21 2 1 @@ -569,20 +635,40 @@ github.com/muety/wakapi/models/mail_address.go:59.40,60.22 1 1 github.com/muety/wakapi/models/mail_address.go:65.2,65.13 1 1 github.com/muety/wakapi/models/mail_address.go:60.22,61.17 1 1 github.com/muety/wakapi/models/mail_address.go:61.17,63.4 1 1 -github.com/muety/wakapi/models/durations.go:7.30,9.2 1 0 -github.com/muety/wakapi/models/durations.go:11.40,13.2 1 0 -github.com/muety/wakapi/models/durations.go:15.35,17.2 1 0 -github.com/muety/wakapi/models/durations.go:19.45,21.22 2 0 -github.com/muety/wakapi/models/durations.go:24.2,24.14 1 0 -github.com/muety/wakapi/models/durations.go:21.22,23.3 1 0 -github.com/muety/wakapi/models/durations.go:27.39,30.2 2 0 -github.com/muety/wakapi/models/durations.go:32.39,34.18 1 0 -github.com/muety/wakapi/models/durations.go:37.2,37.16 1 0 -github.com/muety/wakapi/models/durations.go:34.18,36.3 1 0 -github.com/muety/wakapi/models/durations.go:40.38,42.18 1 0 -github.com/muety/wakapi/models/durations.go:45.2,45.24 1 0 -github.com/muety/wakapi/models/durations.go:42.18,44.3 1 0 github.com/muety/wakapi/models/project_label.go:14.39,16.2 1 0 +github.com/muety/wakapi/models/shared.go:38.52,40.2 1 0 +github.com/muety/wakapi/models/shared.go:42.52,45.16 3 0 +github.com/muety/wakapi/models/shared.go:48.2,50.12 3 0 +github.com/muety/wakapi/models/shared.go:45.16,47.3 1 0 +github.com/muety/wakapi/models/shared.go:53.52,59.22 2 0 +github.com/muety/wakapi/models/shared.go:74.2,77.12 3 0 +github.com/muety/wakapi/models/shared.go:60.14,64.17 2 0 +github.com/muety/wakapi/models/shared.go:67.17,69.8 2 0 +github.com/muety/wakapi/models/shared.go:70.10,71.64 1 0 +github.com/muety/wakapi/models/shared.go:64.17,66.4 1 0 +github.com/muety/wakapi/models/shared.go:80.51,83.2 2 0 +github.com/muety/wakapi/models/shared.go:85.45,87.2 1 1 +github.com/muety/wakapi/models/shared.go:89.37,91.2 1 0 +github.com/muety/wakapi/models/shared.go:93.35,95.2 1 1 +github.com/muety/wakapi/models/shared.go:97.34,99.2 1 0 +github.com/muety/wakapi/models/duration.go:24.55,38.2 2 0 +github.com/muety/wakapi/models/duration.go:40.39,42.16 2 0 +github.com/muety/wakapi/models/duration.go:45.2,46.10 2 0 +github.com/muety/wakapi/models/duration.go:42.16,44.3 1 0 +github.com/muety/wakapi/models/duration.go:49.49,50.11 1 0 +github.com/muety/wakapi/models/duration.go:65.2,65.15 1 0 +github.com/muety/wakapi/models/duration.go:69.2,69.12 1 0 +github.com/muety/wakapi/models/duration.go:51.22,52.18 1 0 +github.com/muety/wakapi/models/duration.go:53.21,54.17 1 0 +github.com/muety/wakapi/models/duration.go:55.23,56.19 1 0 +github.com/muety/wakapi/models/duration.go:57.17,58.26 1 0 +github.com/muety/wakapi/models/duration.go:59.22,60.18 1 0 +github.com/muety/wakapi/models/duration.go:61.21,62.17 1 0 +github.com/muety/wakapi/models/duration.go:65.15,67.3 1 0 +github.com/muety/wakapi/models/interval.go:41.47,42.23 1 0 +github.com/muety/wakapi/models/interval.go:47.2,47.14 1 0 +github.com/muety/wakapi/models/interval.go:42.23,43.13 1 0 +github.com/muety/wakapi/models/interval.go:43.13,45.4 1 0 github.com/muety/wakapi/models/user.go:13.13,15.2 1 1 github.com/muety/wakapi/models/user.go:89.34,91.2 1 0 github.com/muety/wakapi/models/user.go:93.36,94.22 1 1 @@ -617,20 +703,6 @@ github.com/muety/wakapi/models/user.go:186.45,188.2 1 0 github.com/muety/wakapi/models/user.go:190.45,192.2 1 0 github.com/muety/wakapi/models/user.go:195.39,197.2 1 0 github.com/muety/wakapi/models/user.go:199.39,202.2 2 0 -github.com/muety/wakapi/models/duration.go:24.55,38.2 2 0 -github.com/muety/wakapi/models/duration.go:40.39,42.16 2 0 -github.com/muety/wakapi/models/duration.go:45.2,46.10 2 0 -github.com/muety/wakapi/models/duration.go:42.16,44.3 1 0 -github.com/muety/wakapi/models/duration.go:49.49,50.11 1 0 -github.com/muety/wakapi/models/duration.go:65.2,65.15 1 0 -github.com/muety/wakapi/models/duration.go:69.2,69.12 1 0 -github.com/muety/wakapi/models/duration.go:51.22,52.18 1 0 -github.com/muety/wakapi/models/duration.go:53.21,54.17 1 0 -github.com/muety/wakapi/models/duration.go:55.23,56.19 1 0 -github.com/muety/wakapi/models/duration.go:57.17,58.26 1 0 -github.com/muety/wakapi/models/duration.go:59.22,60.18 1 0 -github.com/muety/wakapi/models/duration.go:61.21,62.17 1 0 -github.com/muety/wakapi/models/duration.go:65.15,67.3 1 0 github.com/muety/wakapi/models/leaderboard.go:28.73,30.2 1 0 github.com/muety/wakapi/models/leaderboard.go:34.56,35.103 1 0 github.com/muety/wakapi/models/leaderboard.go:35.103,37.3 1 0 @@ -660,6 +732,134 @@ github.com/muety/wakapi/models/leaderboard.go:101.45,103.25 2 0 github.com/muety/wakapi/models/leaderboard.go:108.2,108.19 1 0 github.com/muety/wakapi/models/leaderboard.go:103.25,104.43 1 0 github.com/muety/wakapi/models/leaderboard.go:104.43,106.4 1 0 +github.com/muety/wakapi/models/alias.go:18.32,20.2 1 0 +github.com/muety/wakapi/models/alias.go:22.37,23.35 1 0 +github.com/muety/wakapi/models/alias.go:28.2,28.14 1 0 +github.com/muety/wakapi/models/alias.go:23.35,24.18 1 0 +github.com/muety/wakapi/models/alias.go:24.18,26.4 1 0 +github.com/muety/wakapi/models/durations.go:7.30,9.2 1 0 +github.com/muety/wakapi/models/durations.go:11.40,13.2 1 0 +github.com/muety/wakapi/models/durations.go:15.35,17.2 1 0 +github.com/muety/wakapi/models/durations.go:19.45,21.22 2 0 +github.com/muety/wakapi/models/durations.go:24.2,24.14 1 0 +github.com/muety/wakapi/models/durations.go:21.22,23.3 1 0 +github.com/muety/wakapi/models/durations.go:27.39,30.2 2 0 +github.com/muety/wakapi/models/durations.go:32.39,34.18 1 0 +github.com/muety/wakapi/models/durations.go:37.2,37.16 1 0 +github.com/muety/wakapi/models/durations.go:34.18,36.3 1 0 +github.com/muety/wakapi/models/durations.go:40.38,42.18 1 0 +github.com/muety/wakapi/models/durations.go:45.2,45.24 1 0 +github.com/muety/wakapi/models/durations.go:42.18,44.3 1 0 +github.com/muety/wakapi/models/filters.go:21.33,23.2 1 1 +github.com/muety/wakapi/models/filters.go:25.48,26.22 1 1 +github.com/muety/wakapi/models/filters.go:31.2,31.14 1 1 +github.com/muety/wakapi/models/filters.go:26.22,27.18 1 1 +github.com/muety/wakapi/models/filters.go:27.18,29.4 1 1 +github.com/muety/wakapi/models/filters.go:39.56,41.2 1 1 +github.com/muety/wakapi/models/filters.go:43.66,46.2 2 1 +github.com/muety/wakapi/models/filters.go:48.59,50.2 1 1 +github.com/muety/wakapi/models/filters.go:52.70,53.16 1 1 +github.com/muety/wakapi/models/filters.go:69.2,69.10 1 1 +github.com/muety/wakapi/models/filters.go:54.22,55.41 1 1 +github.com/muety/wakapi/models/filters.go:56.17,57.31 1 0 +github.com/muety/wakapi/models/filters.go:58.23,59.43 1 1 +github.com/muety/wakapi/models/filters.go:60.21,61.39 1 0 +github.com/muety/wakapi/models/filters.go:62.22,63.41 1 0 +github.com/muety/wakapi/models/filters.go:64.20,65.37 1 1 +github.com/muety/wakapi/models/filters.go:66.21,67.39 1 0 +github.com/muety/wakapi/models/filters.go:72.49,73.44 1 1 +github.com/muety/wakapi/models/filters.go:88.2,88.29 1 1 +github.com/muety/wakapi/models/filters.go:73.44,75.3 1 1 +github.com/muety/wakapi/models/filters.go:75.8,75.41 1 1 +github.com/muety/wakapi/models/filters.go:75.41,77.3 1 0 +github.com/muety/wakapi/models/filters.go:77.8,77.53 1 1 +github.com/muety/wakapi/models/filters.go:77.53,79.3 1 1 +github.com/muety/wakapi/models/filters.go:79.8,79.49 1 1 +github.com/muety/wakapi/models/filters.go:79.49,81.3 1 0 +github.com/muety/wakapi/models/filters.go:81.8,81.51 1 1 +github.com/muety/wakapi/models/filters.go:81.51,83.3 1 0 +github.com/muety/wakapi/models/filters.go:83.8,83.47 1 1 +github.com/muety/wakapi/models/filters.go:83.47,85.3 1 0 +github.com/muety/wakapi/models/filters.go:85.8,85.49 1 1 +github.com/muety/wakapi/models/filters.go:85.49,87.3 1 0 +github.com/muety/wakapi/models/filters.go:91.46,92.30 1 1 +github.com/muety/wakapi/models/filters.go:95.2,95.66 1 0 +github.com/muety/wakapi/models/filters.go:92.30,94.3 1 1 +github.com/muety/wakapi/models/filters.go:98.34,101.2 2 1 +github.com/muety/wakapi/models/filters.go:103.31,105.51 2 0 +github.com/muety/wakapi/models/filters.go:108.2,108.14 1 0 +github.com/muety/wakapi/models/filters.go:105.51,107.3 1 0 +github.com/muety/wakapi/models/filters.go:111.51,113.2 1 0 +github.com/muety/wakapi/models/filters.go:115.37,117.51 2 0 +github.com/muety/wakapi/models/filters.go:122.2,122.14 1 0 +github.com/muety/wakapi/models/filters.go:117.51,118.37 1 0 +github.com/muety/wakapi/models/filters.go:118.37,120.4 1 0 +github.com/muety/wakapi/models/filters.go:125.59,126.18 1 0 +github.com/muety/wakapi/models/filters.go:127.22,128.20 1 0 +github.com/muety/wakapi/models/filters.go:129.23,130.21 1 0 +github.com/muety/wakapi/models/filters.go:131.21,132.19 1 0 +github.com/muety/wakapi/models/filters.go:133.17,134.15 1 0 +github.com/muety/wakapi/models/filters.go:135.22,136.20 1 0 +github.com/muety/wakapi/models/filters.go:137.20,138.18 1 0 +github.com/muety/wakapi/models/filters.go:139.21,140.19 1 0 +github.com/muety/wakapi/models/filters.go:141.10,142.21 1 0 +github.com/muety/wakapi/models/filters.go:146.33,148.16 2 0 +github.com/muety/wakapi/models/filters.go:151.2,151.32 1 0 +github.com/muety/wakapi/models/filters.go:148.16,150.3 1 0 +github.com/muety/wakapi/models/filters.go:154.44,160.2 1 1 +github.com/muety/wakapi/models/filters.go:163.70,164.22 1 1 +github.com/muety/wakapi/models/filters.go:172.2,172.17 1 1 +github.com/muety/wakapi/models/filters.go:180.2,180.23 1 1 +github.com/muety/wakapi/models/filters.go:188.2,188.21 1 1 +github.com/muety/wakapi/models/filters.go:196.2,196.22 1 1 +github.com/muety/wakapi/models/filters.go:204.2,204.21 1 1 +github.com/muety/wakapi/models/filters.go:212.2,212.10 1 1 +github.com/muety/wakapi/models/filters.go:164.22,166.31 2 1 +github.com/muety/wakapi/models/filters.go:170.3,170.22 1 1 +github.com/muety/wakapi/models/filters.go:166.31,169.4 2 1 +github.com/muety/wakapi/models/filters.go:172.17,174.26 2 0 +github.com/muety/wakapi/models/filters.go:178.3,178.17 1 0 +github.com/muety/wakapi/models/filters.go:174.26,177.4 2 0 +github.com/muety/wakapi/models/filters.go:180.23,182.32 2 1 +github.com/muety/wakapi/models/filters.go:186.3,186.23 1 1 +github.com/muety/wakapi/models/filters.go:182.32,185.4 2 1 +github.com/muety/wakapi/models/filters.go:188.21,190.30 2 0 +github.com/muety/wakapi/models/filters.go:194.3,194.21 1 0 +github.com/muety/wakapi/models/filters.go:190.30,193.4 2 0 +github.com/muety/wakapi/models/filters.go:196.22,198.31 2 0 +github.com/muety/wakapi/models/filters.go:202.3,202.22 1 0 +github.com/muety/wakapi/models/filters.go:198.31,201.4 2 0 +github.com/muety/wakapi/models/filters.go:204.21,206.30 2 0 +github.com/muety/wakapi/models/filters.go:210.3,210.21 1 0 +github.com/muety/wakapi/models/filters.go:206.30,209.4 2 0 +github.com/muety/wakapi/models/filters.go:215.83,216.41 1 1 +github.com/muety/wakapi/models/filters.go:219.2,219.28 1 1 +github.com/muety/wakapi/models/filters.go:222.2,222.10 1 1 +github.com/muety/wakapi/models/filters.go:216.41,218.3 1 0 +github.com/muety/wakapi/models/filters.go:219.28,221.3 1 1 +github.com/muety/wakapi/models/language_mapping.go:11.42,13.2 1 0 +github.com/muety/wakapi/models/language_mapping.go:15.51,17.2 1 0 +github.com/muety/wakapi/models/language_mapping.go:19.52,21.2 1 0 +github.com/muety/wakapi/models/heartbeat.go:33.34,35.2 1 1 +github.com/muety/wakapi/models/heartbeat.go:37.55,40.2 2 0 +github.com/muety/wakapi/models/heartbeat.go:42.65,44.46 2 1 +github.com/muety/wakapi/models/heartbeat.go:44.46,45.108 1 1 +github.com/muety/wakapi/models/heartbeat.go:45.108,48.4 2 1 +github.com/muety/wakapi/models/heartbeat.go:52.50,53.11 1 1 +github.com/muety/wakapi/models/heartbeat.go:68.2,68.15 1 1 +github.com/muety/wakapi/models/heartbeat.go:72.2,72.12 1 1 +github.com/muety/wakapi/models/heartbeat.go:54.22,55.18 1 1 +github.com/muety/wakapi/models/heartbeat.go:56.21,57.17 1 1 +github.com/muety/wakapi/models/heartbeat.go:58.23,59.19 1 1 +github.com/muety/wakapi/models/heartbeat.go:60.17,61.26 1 1 +github.com/muety/wakapi/models/heartbeat.go:62.22,63.18 1 1 +github.com/muety/wakapi/models/heartbeat.go:64.21,65.17 1 0 +github.com/muety/wakapi/models/heartbeat.go:68.15,70.3 1 1 +github.com/muety/wakapi/models/heartbeat.go:75.37,91.2 1 0 +github.com/muety/wakapi/models/heartbeat.go:99.41,101.16 2 1 +github.com/muety/wakapi/models/heartbeat.go:104.2,105.10 2 1 +github.com/muety/wakapi/models/heartbeat.go:101.16,103.3 1 0 +github.com/muety/wakapi/models/heartbeat.go:108.38,118.2 1 0 github.com/muety/wakapi/models/models.go:3.14,5.2 0 1 github.com/muety/wakapi/models/summary.go:64.29,66.2 1 1 github.com/muety/wakapi/models/summary.go:68.35,70.2 1 0 @@ -759,197 +959,104 @@ github.com/muety/wakapi/models/summary.go:361.50,365.2 1 1 github.com/muety/wakapi/models/summary.go:367.33,369.2 1 1 github.com/muety/wakapi/models/summary.go:371.43,373.2 1 1 github.com/muety/wakapi/models/summary.go:375.38,377.2 1 1 -github.com/muety/wakapi/models/alias.go:18.32,20.2 1 0 -github.com/muety/wakapi/models/alias.go:22.37,23.35 1 0 -github.com/muety/wakapi/models/alias.go:28.2,28.14 1 0 -github.com/muety/wakapi/models/alias.go:23.35,24.18 1 0 -github.com/muety/wakapi/models/alias.go:24.18,26.4 1 0 -github.com/muety/wakapi/models/filters.go:21.33,23.2 1 1 -github.com/muety/wakapi/models/filters.go:25.48,26.22 1 1 -github.com/muety/wakapi/models/filters.go:31.2,31.14 1 1 -github.com/muety/wakapi/models/filters.go:26.22,27.18 1 1 -github.com/muety/wakapi/models/filters.go:27.18,29.4 1 1 -github.com/muety/wakapi/models/filters.go:39.56,41.2 1 1 -github.com/muety/wakapi/models/filters.go:43.66,46.2 2 1 -github.com/muety/wakapi/models/filters.go:48.59,50.2 1 1 -github.com/muety/wakapi/models/filters.go:52.70,53.16 1 1 -github.com/muety/wakapi/models/filters.go:69.2,69.10 1 1 -github.com/muety/wakapi/models/filters.go:54.22,55.41 1 1 -github.com/muety/wakapi/models/filters.go:56.17,57.31 1 0 -github.com/muety/wakapi/models/filters.go:58.23,59.43 1 1 -github.com/muety/wakapi/models/filters.go:60.21,61.39 1 0 -github.com/muety/wakapi/models/filters.go:62.22,63.41 1 0 -github.com/muety/wakapi/models/filters.go:64.20,65.37 1 1 -github.com/muety/wakapi/models/filters.go:66.21,67.39 1 0 -github.com/muety/wakapi/models/filters.go:72.49,73.44 1 1 -github.com/muety/wakapi/models/filters.go:88.2,88.29 1 1 -github.com/muety/wakapi/models/filters.go:73.44,75.3 1 1 -github.com/muety/wakapi/models/filters.go:75.8,75.41 1 1 -github.com/muety/wakapi/models/filters.go:75.41,77.3 1 0 -github.com/muety/wakapi/models/filters.go:77.8,77.53 1 1 -github.com/muety/wakapi/models/filters.go:77.53,79.3 1 1 -github.com/muety/wakapi/models/filters.go:79.8,79.49 1 1 -github.com/muety/wakapi/models/filters.go:79.49,81.3 1 0 -github.com/muety/wakapi/models/filters.go:81.8,81.51 1 1 -github.com/muety/wakapi/models/filters.go:81.51,83.3 1 0 -github.com/muety/wakapi/models/filters.go:83.8,83.47 1 1 -github.com/muety/wakapi/models/filters.go:83.47,85.3 1 0 -github.com/muety/wakapi/models/filters.go:85.8,85.49 1 1 -github.com/muety/wakapi/models/filters.go:85.49,87.3 1 0 -github.com/muety/wakapi/models/filters.go:91.46,92.30 1 1 -github.com/muety/wakapi/models/filters.go:95.2,95.66 1 0 -github.com/muety/wakapi/models/filters.go:92.30,94.3 1 1 -github.com/muety/wakapi/models/filters.go:98.34,101.2 2 1 -github.com/muety/wakapi/models/filters.go:103.31,105.51 2 0 -github.com/muety/wakapi/models/filters.go:108.2,108.14 1 0 -github.com/muety/wakapi/models/filters.go:105.51,107.3 1 0 -github.com/muety/wakapi/models/filters.go:111.51,113.2 1 0 -github.com/muety/wakapi/models/filters.go:115.37,117.51 2 0 -github.com/muety/wakapi/models/filters.go:122.2,122.14 1 0 -github.com/muety/wakapi/models/filters.go:117.51,118.37 1 0 -github.com/muety/wakapi/models/filters.go:118.37,120.4 1 0 -github.com/muety/wakapi/models/filters.go:125.59,126.18 1 0 -github.com/muety/wakapi/models/filters.go:127.22,128.20 1 0 -github.com/muety/wakapi/models/filters.go:129.23,130.21 1 0 -github.com/muety/wakapi/models/filters.go:131.21,132.19 1 0 -github.com/muety/wakapi/models/filters.go:133.17,134.15 1 0 -github.com/muety/wakapi/models/filters.go:135.22,136.20 1 0 -github.com/muety/wakapi/models/filters.go:137.20,138.18 1 0 -github.com/muety/wakapi/models/filters.go:139.21,140.19 1 0 -github.com/muety/wakapi/models/filters.go:141.10,142.21 1 0 -github.com/muety/wakapi/models/filters.go:146.33,148.16 2 0 -github.com/muety/wakapi/models/filters.go:151.2,151.32 1 0 -github.com/muety/wakapi/models/filters.go:148.16,150.3 1 0 -github.com/muety/wakapi/models/filters.go:154.44,160.2 1 1 -github.com/muety/wakapi/models/filters.go:163.70,164.22 1 1 -github.com/muety/wakapi/models/filters.go:172.2,172.17 1 1 -github.com/muety/wakapi/models/filters.go:180.2,180.23 1 1 -github.com/muety/wakapi/models/filters.go:188.2,188.21 1 1 -github.com/muety/wakapi/models/filters.go:196.2,196.22 1 1 -github.com/muety/wakapi/models/filters.go:204.2,204.21 1 1 -github.com/muety/wakapi/models/filters.go:212.2,212.10 1 1 -github.com/muety/wakapi/models/filters.go:164.22,166.31 2 1 -github.com/muety/wakapi/models/filters.go:170.3,170.22 1 1 -github.com/muety/wakapi/models/filters.go:166.31,169.4 2 1 -github.com/muety/wakapi/models/filters.go:172.17,174.26 2 0 -github.com/muety/wakapi/models/filters.go:178.3,178.17 1 0 -github.com/muety/wakapi/models/filters.go:174.26,177.4 2 0 -github.com/muety/wakapi/models/filters.go:180.23,182.32 2 1 -github.com/muety/wakapi/models/filters.go:186.3,186.23 1 1 -github.com/muety/wakapi/models/filters.go:182.32,185.4 2 1 -github.com/muety/wakapi/models/filters.go:188.21,190.30 2 0 -github.com/muety/wakapi/models/filters.go:194.3,194.21 1 0 -github.com/muety/wakapi/models/filters.go:190.30,193.4 2 0 -github.com/muety/wakapi/models/filters.go:196.22,198.31 2 0 -github.com/muety/wakapi/models/filters.go:202.3,202.22 1 0 -github.com/muety/wakapi/models/filters.go:198.31,201.4 2 0 -github.com/muety/wakapi/models/filters.go:204.21,206.30 2 0 -github.com/muety/wakapi/models/filters.go:210.3,210.21 1 0 -github.com/muety/wakapi/models/filters.go:206.30,209.4 2 0 -github.com/muety/wakapi/models/filters.go:215.83,216.41 1 1 -github.com/muety/wakapi/models/filters.go:219.2,219.28 1 1 -github.com/muety/wakapi/models/filters.go:222.2,222.10 1 1 -github.com/muety/wakapi/models/filters.go:216.41,218.3 1 0 -github.com/muety/wakapi/models/filters.go:219.28,221.3 1 1 -github.com/muety/wakapi/models/heartbeats.go:7.31,9.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:11.41,13.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:15.36,17.2 1 0 -github.com/muety/wakapi/models/heartbeats.go:19.43,22.2 2 0 -github.com/muety/wakapi/models/heartbeats.go:24.41,26.18 1 0 -github.com/muety/wakapi/models/heartbeats.go:29.2,29.16 1 0 -github.com/muety/wakapi/models/heartbeats.go:26.18,28.3 1 0 -github.com/muety/wakapi/models/heartbeats.go:32.40,34.18 1 0 -github.com/muety/wakapi/models/heartbeats.go:37.2,37.24 1 0 -github.com/muety/wakapi/models/heartbeats.go:34.18,36.3 1 0 -github.com/muety/wakapi/models/interval.go:41.47,42.23 1 0 -github.com/muety/wakapi/models/interval.go:47.2,47.14 1 0 -github.com/muety/wakapi/models/interval.go:42.23,43.13 1 0 -github.com/muety/wakapi/models/interval.go:43.13,45.4 1 0 -github.com/muety/wakapi/models/language_mapping.go:11.42,13.2 1 0 -github.com/muety/wakapi/models/language_mapping.go:15.51,17.2 1 0 -github.com/muety/wakapi/models/language_mapping.go:19.52,21.2 1 0 -github.com/muety/wakapi/models/mail.go:19.44,23.2 3 0 -github.com/muety/wakapi/models/mail.go:25.44,29.2 3 0 -github.com/muety/wakapi/models/mail.go:31.32,44.2 1 0 -github.com/muety/wakapi/models/mail.go:46.41,48.2 1 0 -github.com/muety/wakapi/models/shared.go:38.52,40.2 1 0 -github.com/muety/wakapi/models/shared.go:42.52,45.16 3 0 -github.com/muety/wakapi/models/shared.go:48.2,50.12 3 0 -github.com/muety/wakapi/models/shared.go:45.16,47.3 1 0 -github.com/muety/wakapi/models/shared.go:53.52,59.22 2 0 -github.com/muety/wakapi/models/shared.go:74.2,77.12 3 0 -github.com/muety/wakapi/models/shared.go:60.14,64.17 2 0 -github.com/muety/wakapi/models/shared.go:67.17,69.8 2 0 -github.com/muety/wakapi/models/shared.go:70.10,71.64 1 0 -github.com/muety/wakapi/models/shared.go:64.17,66.4 1 0 -github.com/muety/wakapi/models/shared.go:80.51,83.2 2 0 -github.com/muety/wakapi/models/shared.go:85.45,87.2 1 0 -github.com/muety/wakapi/models/shared.go:89.37,91.2 1 0 -github.com/muety/wakapi/models/shared.go:93.35,95.2 1 1 -github.com/muety/wakapi/models/shared.go:97.34,99.2 1 0 -github.com/muety/wakapi/services/alias.go:19.77,24.2 1 1 -github.com/muety/wakapi/services/alias.go:28.60,29.43 1 1 -github.com/muety/wakapi/services/alias.go:32.2,32.14 1 1 -github.com/muety/wakapi/services/alias.go:29.43,31.3 1 1 -github.com/muety/wakapi/services/alias.go:35.62,37.16 2 1 -github.com/muety/wakapi/services/alias.go:40.2,40.12 1 1 -github.com/muety/wakapi/services/alias.go:37.16,39.3 1 1 -github.com/muety/wakapi/services/alias.go:43.59,44.51 1 1 -github.com/muety/wakapi/services/alias.go:44.51,46.3 1 0 -github.com/muety/wakapi/services/alias.go:49.76,50.32 1 0 -github.com/muety/wakapi/services/alias.go:53.2,53.49 1 0 -github.com/muety/wakapi/services/alias.go:50.32,52.3 1 0 -github.com/muety/wakapi/services/alias.go:53.49,55.3 1 0 -github.com/muety/wakapi/services/alias.go:55.8,57.3 1 0 -github.com/muety/wakapi/services/alias.go:60.102,61.38 1 0 -github.com/muety/wakapi/services/alias.go:64.2,64.39 1 0 -github.com/muety/wakapi/services/alias.go:61.38,63.3 1 0 -github.com/muety/wakapi/services/alias.go:67.113,68.38 1 0 -github.com/muety/wakapi/services/alias.go:71.2,71.39 1 0 -github.com/muety/wakapi/services/alias.go:68.38,70.3 1 0 -github.com/muety/wakapi/services/alias.go:74.108,75.32 1 1 -github.com/muety/wakapi/services/alias.go:79.2,79.49 1 1 -github.com/muety/wakapi/services/alias.go:87.2,87.19 1 1 -github.com/muety/wakapi/services/alias.go:75.32,77.3 1 1 -github.com/muety/wakapi/services/alias.go:79.49,80.47 1 1 -github.com/muety/wakapi/services/alias.go:80.47,81.49 1 1 -github.com/muety/wakapi/services/alias.go:81.49,83.5 1 1 -github.com/muety/wakapi/services/alias.go:90.77,92.16 2 0 -github.com/muety/wakapi/services/alias.go:96.2,100.20 3 0 -github.com/muety/wakapi/services/alias.go:92.16,94.3 1 0 -github.com/muety/wakapi/services/alias.go:103.60,104.24 1 0 -github.com/muety/wakapi/services/alias.go:107.2,110.16 2 0 -github.com/muety/wakapi/services/alias.go:114.2,116.12 2 0 -github.com/muety/wakapi/services/alias.go:104.24,106.3 1 0 -github.com/muety/wakapi/services/alias.go:110.16,112.3 1 0 -github.com/muety/wakapi/services/alias.go:119.69,123.28 3 0 -github.com/muety/wakapi/services/alias.go:131.2,134.16 2 0 -github.com/muety/wakapi/services/alias.go:140.2,140.31 1 0 -github.com/muety/wakapi/services/alias.go:144.2,144.12 1 0 -github.com/muety/wakapi/services/alias.go:123.28,124.21 1 0 -github.com/muety/wakapi/services/alias.go:127.3,128.16 2 0 -github.com/muety/wakapi/services/alias.go:124.21,126.4 1 0 -github.com/muety/wakapi/services/alias.go:134.16,135.29 1 0 -github.com/muety/wakapi/services/alias.go:135.29,137.4 1 0 -github.com/muety/wakapi/services/alias.go:140.31,142.3 1 0 -github.com/muety/wakapi/services/alias.go:147.74,148.14 1 0 -github.com/muety/wakapi/services/alias.go:148.14,149.57 1 0 -github.com/muety/wakapi/services/alias.go:149.57,153.4 3 0 -github.com/muety/wakapi/services/alias.go:154.8,155.57 1 0 -github.com/muety/wakapi/services/alias.go:155.57,157.48 2 0 -github.com/muety/wakapi/services/alias.go:162.4,162.52 1 0 -github.com/muety/wakapi/services/alias.go:157.48,158.26 1 0 -github.com/muety/wakapi/services/alias.go:158.26,160.6 1 0 -github.com/muety/wakapi/services/alias.go:167.116,168.32 1 0 -github.com/muety/wakapi/services/alias.go:171.2,171.49 1 0 -github.com/muety/wakapi/services/alias.go:168.32,170.3 1 0 -github.com/muety/wakapi/services/alias.go:171.49,173.47 2 0 -github.com/muety/wakapi/services/alias.go:178.3,178.30 1 0 -github.com/muety/wakapi/services/alias.go:173.47,174.16 1 0 -github.com/muety/wakapi/services/alias.go:174.16,176.5 1 0 -github.com/muety/wakapi/services/alias.go:179.8,181.3 1 0 -github.com/muety/wakapi/services/diagnostics.go:14.101,19.2 1 0 -github.com/muety/wakapi/services/diagnostics.go:21.101,24.2 2 0 +github.com/muety/wakapi/services/language_mapping.go:18.118,24.2 1 0 +github.com/muety/wakapi/services/language_mapping.go:26.86,28.2 1 0 +github.com/muety/wakapi/services/language_mapping.go:30.96,31.53 1 0 +github.com/muety/wakapi/services/language_mapping.go:35.2,36.16 2 0 +github.com/muety/wakapi/services/language_mapping.go:39.2,40.22 2 0 +github.com/muety/wakapi/services/language_mapping.go:31.53,33.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:36.16,38.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:43.92,46.16 3 0 +github.com/muety/wakapi/services/language_mapping.go:50.2,50.33 1 0 +github.com/muety/wakapi/services/language_mapping.go:53.2,53.22 1 0 +github.com/muety/wakapi/services/language_mapping.go:46.16,48.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:50.33,52.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:56.109,58.16 2 0 +github.com/muety/wakapi/services/language_mapping.go:62.2,63.20 2 0 +github.com/muety/wakapi/services/language_mapping.go:58.16,60.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:66.82,67.26 1 0 +github.com/muety/wakapi/services/language_mapping.go:70.2,72.12 3 0 +github.com/muety/wakapi/services/language_mapping.go:67.26,69.3 1 0 +github.com/muety/wakapi/services/language_mapping.go:75.74,78.2 1 0 +github.com/muety/wakapi/services/leaderboard.go:30.159,43.33 3 0 +github.com/muety/wakapi/services/leaderboard.go:67.2,67.12 1 0 +github.com/muety/wakapi/services/leaderboard.go:43.33,44.31 1 0 +github.com/muety/wakapi/services/leaderboard.go:44.31,50.18 3 0 +github.com/muety/wakapi/services/leaderboard.go:54.4,54.41 1 0 +github.com/muety/wakapi/services/leaderboard.go:50.18,52.5 1 0 +github.com/muety/wakapi/services/leaderboard.go:54.41,57.5 2 0 +github.com/muety/wakapi/services/leaderboard.go:57.10,57.48 1 0 +github.com/muety/wakapi/services/leaderboard.go:57.48,59.64 2 0 +github.com/muety/wakapi/services/leaderboard.go:62.5,62.22 1 0 +github.com/muety/wakapi/services/leaderboard.go:59.64,61.6 1 0 +github.com/muety/wakapi/services/leaderboard.go:70.43,73.21 2 0 +github.com/muety/wakapi/services/leaderboard.go:82.2,82.76 1 0 +github.com/muety/wakapi/services/leaderboard.go:73.21,75.17 2 0 +github.com/muety/wakapi/services/leaderboard.go:79.3,79.91 1 0 +github.com/muety/wakapi/services/leaderboard.go:75.17,78.4 2 0 +github.com/muety/wakapi/services/leaderboard.go:82.76,83.77 1 0 +github.com/muety/wakapi/services/leaderboard.go:83.77,85.4 1 0 +github.com/muety/wakapi/services/leaderboard.go:89.121,92.29 2 0 +github.com/muety/wakapi/services/leaderboard.go:127.2,129.12 3 0 +github.com/muety/wakapi/services/leaderboard.go:92.29,93.83 1 0 +github.com/muety/wakapi/services/leaderboard.go:98.3,99.17 2 0 +github.com/muety/wakapi/services/leaderboard.go:104.3,104.85 1 0 +github.com/muety/wakapi/services/leaderboard.go:109.3,109.25 1 0 +github.com/muety/wakapi/services/leaderboard.go:93.83,95.12 2 0 +github.com/muety/wakapi/services/leaderboard.go:99.17,101.12 2 0 +github.com/muety/wakapi/services/leaderboard.go:104.85,106.12 2 0 +github.com/muety/wakapi/services/leaderboard.go:109.25,111.18 2 0 +github.com/muety/wakapi/services/leaderboard.go:116.4,116.23 1 0 +github.com/muety/wakapi/services/leaderboard.go:120.4,120.60 1 0 +github.com/muety/wakapi/services/leaderboard.go:111.18,113.13 2 0 +github.com/muety/wakapi/services/leaderboard.go:116.23,117.13 1 0 +github.com/muety/wakapi/services/leaderboard.go:120.60,122.13 2 0 +github.com/muety/wakapi/services/leaderboard.go:132.77,135.2 2 0 +github.com/muety/wakapi/services/leaderboard.go:137.60,140.52 2 0 +github.com/muety/wakapi/services/leaderboard.go:144.2,145.16 2 0 +github.com/muety/wakapi/services/leaderboard.go:148.2,148.19 1 0 +github.com/muety/wakapi/services/leaderboard.go:140.52,142.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:145.16,147.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:151.153,153.2 1 0 +github.com/muety/wakapi/services/leaderboard.go:155.144,157.2 1 0 +github.com/muety/wakapi/services/leaderboard.go:159.174,162.52 2 0 +github.com/muety/wakapi/services/leaderboard.go:166.2,167.16 2 0 +github.com/muety/wakapi/services/leaderboard.go:171.2,171.18 1 0 +github.com/muety/wakapi/services/leaderboard.go:184.2,185.19 2 0 +github.com/muety/wakapi/services/leaderboard.go:162.52,164.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:167.16,169.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:171.18,173.17 2 0 +github.com/muety/wakapi/services/leaderboard.go:173.17,175.4 1 0 +github.com/muety/wakapi/services/leaderboard.go:175.9,176.31 1 0 +github.com/muety/wakapi/services/leaderboard.go:176.31,177.40 1 0 +github.com/muety/wakapi/services/leaderboard.go:177.40,179.6 1 0 +github.com/muety/wakapi/services/leaderboard.go:188.165,191.52 2 0 +github.com/muety/wakapi/services/leaderboard.go:195.2,196.16 2 0 +github.com/muety/wakapi/services/leaderboard.go:200.2,200.17 1 0 +github.com/muety/wakapi/services/leaderboard.go:211.2,212.19 2 0 +github.com/muety/wakapi/services/leaderboard.go:191.52,193.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:196.16,198.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:200.17,202.17 2 0 +github.com/muety/wakapi/services/leaderboard.go:202.17,204.4 1 0 +github.com/muety/wakapi/services/leaderboard.go:204.9,205.31 1 0 +github.com/muety/wakapi/services/leaderboard.go:205.31,207.5 1 0 +github.com/muety/wakapi/services/leaderboard.go:215.129,217.16 2 0 +github.com/muety/wakapi/services/leaderboard.go:221.2,222.16 2 0 +github.com/muety/wakapi/services/leaderboard.go:226.2,231.8 1 0 +github.com/muety/wakapi/services/leaderboard.go:217.16,219.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:222.16,224.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:234.151,236.16 2 0 +github.com/muety/wakapi/services/leaderboard.go:240.2,241.16 2 0 +github.com/muety/wakapi/services/leaderboard.go:245.2,248.42 3 0 +github.com/muety/wakapi/services/leaderboard.go:260.2,260.19 1 0 +github.com/muety/wakapi/services/leaderboard.go:236.16,238.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:241.16,243.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:248.42,258.3 2 0 +github.com/muety/wakapi/services/leaderboard.go:263.131,265.47 2 0 +github.com/muety/wakapi/services/leaderboard.go:268.2,268.23 1 0 +github.com/muety/wakapi/services/leaderboard.go:271.2,271.10 1 0 +github.com/muety/wakapi/services/leaderboard.go:265.47,267.3 1 0 +github.com/muety/wakapi/services/leaderboard.go:268.23,270.3 1 0 github.com/muety/wakapi/services/misc.go:44.188,56.2 1 0 github.com/muety/wakapi/services/misc.go:58.36,60.95 2 0 github.com/muety/wakapi/services/misc.go:64.2,65.111 2 0 @@ -1019,6 +1126,65 @@ github.com/muety/wakapi/services/misc.go:250.18,252.4 1 0 github.com/muety/wakapi/services/misc.go:256.53,259.2 2 0 github.com/muety/wakapi/services/misc.go:261.53,264.2 2 0 github.com/muety/wakapi/services/misc.go:266.64,269.2 2 0 +github.com/muety/wakapi/services/user.go:26.99,36.33 3 0 +github.com/muety/wakapi/services/user.go:57.2,57.12 1 0 +github.com/muety/wakapi/services/user.go:36.33,37.31 1 0 +github.com/muety/wakapi/services/user.go:37.31,43.73 4 0 +github.com/muety/wakapi/services/user.go:47.4,47.24 1 0 +github.com/muety/wakapi/services/user.go:43.73,45.5 1 0 +github.com/muety/wakapi/services/user.go:47.24,48.80 1 0 +github.com/muety/wakapi/services/user.go:48.80,50.6 1 0 +github.com/muety/wakapi/services/user.go:50.11,52.6 1 0 +github.com/muety/wakapi/services/user.go:60.74,61.40 1 0 +github.com/muety/wakapi/services/user.go:65.2,66.16 2 0 +github.com/muety/wakapi/services/user.go:70.2,71.15 2 0 +github.com/muety/wakapi/services/user.go:61.40,63.3 1 0 +github.com/muety/wakapi/services/user.go:66.16,68.3 1 0 +github.com/muety/wakapi/services/user.go:74.72,75.37 1 0 +github.com/muety/wakapi/services/user.go:79.2,80.16 2 0 +github.com/muety/wakapi/services/user.go:84.2,85.15 2 0 +github.com/muety/wakapi/services/user.go:75.37,77.3 1 0 +github.com/muety/wakapi/services/user.go:80.16,82.3 1 0 +github.com/muety/wakapi/services/user.go:88.76,90.2 1 0 +github.com/muety/wakapi/services/user.go:92.86,94.2 1 0 +github.com/muety/wakapi/services/user.go:96.92,98.2 1 0 +github.com/muety/wakapi/services/user.go:100.58,102.2 1 0 +github.com/muety/wakapi/services/user.go:104.71,106.2 1 0 +github.com/muety/wakapi/services/user.go:108.86,110.16 2 0 +github.com/muety/wakapi/services/user.go:113.2,113.112 1 0 +github.com/muety/wakapi/services/user.go:110.16,112.3 1 0 +github.com/muety/wakapi/services/user.go:113.112,115.3 1 0 +github.com/muety/wakapi/services/user.go:118.86,120.2 1 0 +github.com/muety/wakapi/services/user.go:122.94,124.2 1 0 +github.com/muety/wakapi/services/user.go:126.71,128.12 2 0 +github.com/muety/wakapi/services/user.go:132.2,133.42 2 0 +github.com/muety/wakapi/services/user.go:137.2,138.16 2 0 +github.com/muety/wakapi/services/user.go:142.2,143.21 2 0 +github.com/muety/wakapi/services/user.go:128.12,130.3 1 0 +github.com/muety/wakapi/services/user.go:133.42,135.3 1 0 +github.com/muety/wakapi/services/user.go:138.16,140.3 1 0 +github.com/muety/wakapi/services/user.go:146.48,148.2 1 0 +github.com/muety/wakapi/services/user.go:150.102,160.93 2 0 +github.com/muety/wakapi/services/user.go:166.2,166.38 1 0 +github.com/muety/wakapi/services/user.go:160.93,162.3 1 0 +github.com/muety/wakapi/services/user.go:162.8,164.3 1 0 +github.com/muety/wakapi/services/user.go:169.73,173.2 3 0 +github.com/muety/wakapi/services/user.go:175.78,179.2 3 0 +github.com/muety/wakapi/services/user.go:181.122,184.35 2 0 +github.com/muety/wakapi/services/user.go:190.2,190.35 1 0 +github.com/muety/wakapi/services/user.go:194.2,194.18 1 0 +github.com/muety/wakapi/services/user.go:184.35,185.89 1 0 +github.com/muety/wakapi/services/user.go:185.89,187.4 1 0 +github.com/muety/wakapi/services/user.go:190.35,192.3 1 0 +github.com/muety/wakapi/services/user.go:197.106,200.96 3 0 +github.com/muety/wakapi/services/user.go:205.2,205.68 1 0 +github.com/muety/wakapi/services/user.go:200.96,202.3 1 0 +github.com/muety/wakapi/services/user.go:202.8,204.3 1 0 +github.com/muety/wakapi/services/user.go:208.85,210.2 1 0 +github.com/muety/wakapi/services/user.go:212.57,219.2 4 0 +github.com/muety/wakapi/services/user.go:221.38,223.2 1 0 +github.com/muety/wakapi/services/user.go:225.55,227.2 1 0 +github.com/muety/wakapi/services/user.go:229.57,234.2 1 0 github.com/muety/wakapi/services/project_label.go:21.111,28.2 1 0 github.com/muety/wakapi/services/project_label.go:30.80,32.2 1 0 github.com/muety/wakapi/services/project_label.go:34.90,35.51 1 0 @@ -1045,6 +1211,169 @@ github.com/muety/wakapi/services/project_label.go:83.24,85.3 1 0 github.com/muety/wakapi/services/project_label.go:92.89,94.14 2 0 github.com/muety/wakapi/services/project_label.go:97.2,100.4 1 0 github.com/muety/wakapi/services/project_label.go:94.14,96.3 1 0 +github.com/muety/wakapi/services/aggregation.go:31.142,41.2 1 0 +github.com/muety/wakapi/services/aggregation.go:50.43,53.52 2 0 +github.com/muety/wakapi/services/aggregation.go:53.52,54.80 1 0 +github.com/muety/wakapi/services/aggregation.go:54.80,56.4 1 0 +github.com/muety/wakapi/services/aggregation.go:57.58,59.3 1 0 +github.com/muety/wakapi/services/aggregation.go:62.92,63.47 1 0 +github.com/muety/wakapi/services/aggregation.go:66.2,72.16 4 0 +github.com/muety/wakapi/services/aggregation.go:78.2,79.16 2 0 +github.com/muety/wakapi/services/aggregation.go:85.2,86.44 2 0 +github.com/muety/wakapi/services/aggregation.go:91.2,93.12 3 0 +github.com/muety/wakapi/services/aggregation.go:105.2,105.41 1 0 +github.com/muety/wakapi/services/aggregation.go:123.2,123.12 1 0 +github.com/muety/wakapi/services/aggregation.go:63.47,65.3 1 0 +github.com/muety/wakapi/services/aggregation.go:72.16,75.3 2 0 +github.com/muety/wakapi/services/aggregation.go:79.16,82.3 2 0 +github.com/muety/wakapi/services/aggregation.go:86.44,88.3 1 0 +github.com/muety/wakapi/services/aggregation.go:93.12,94.28 1 0 +github.com/muety/wakapi/services/aggregation.go:94.28,96.47 2 0 +github.com/muety/wakapi/services/aggregation.go:96.47,98.5 1 0 +github.com/muety/wakapi/services/aggregation.go:98.19,100.5 1 0 +github.com/muety/wakapi/services/aggregation.go:105.41,106.71 1 0 +github.com/muety/wakapi/services/aggregation.go:110.3,110.21 1 0 +github.com/muety/wakapi/services/aggregation.go:106.71,107.12 1 0 +github.com/muety/wakapi/services/aggregation.go:110.21,114.4 1 0 +github.com/muety/wakapi/services/aggregation.go:114.9,114.62 1 0 +github.com/muety/wakapi/services/aggregation.go:114.62,118.4 1 0 +github.com/muety/wakapi/services/aggregation.go:126.60,127.115 1 0 +github.com/muety/wakapi/services/aggregation.go:127.115,129.3 1 0 +github.com/muety/wakapi/services/aggregation.go:129.8,131.60 2 0 +github.com/muety/wakapi/services/aggregation.go:131.60,133.4 1 0 +github.com/muety/wakapi/services/aggregation.go:137.83,152.41 5 0 +github.com/muety/wakapi/services/aggregation.go:152.41,162.3 3 0 +github.com/muety/wakapi/services/aggregation.go:165.83,168.27 3 0 +github.com/muety/wakapi/services/aggregation.go:173.2,174.12 2 0 +github.com/muety/wakapi/services/aggregation.go:168.27,169.34 1 0 +github.com/muety/wakapi/services/aggregation.go:169.34,171.4 1 0 +github.com/muety/wakapi/services/aggregation.go:177.79,180.27 3 0 +github.com/muety/wakapi/services/aggregation.go:180.27,182.3 1 0 +github.com/muety/wakapi/services/aggregation.go:185.34,188.2 2 0 +github.com/muety/wakapi/services/alias.go:19.77,24.2 1 1 +github.com/muety/wakapi/services/alias.go:28.60,29.43 1 1 +github.com/muety/wakapi/services/alias.go:32.2,32.14 1 1 +github.com/muety/wakapi/services/alias.go:29.43,31.3 1 1 +github.com/muety/wakapi/services/alias.go:35.62,37.16 2 1 +github.com/muety/wakapi/services/alias.go:40.2,40.12 1 1 +github.com/muety/wakapi/services/alias.go:37.16,39.3 1 1 +github.com/muety/wakapi/services/alias.go:43.59,44.51 1 1 +github.com/muety/wakapi/services/alias.go:44.51,46.3 1 0 +github.com/muety/wakapi/services/alias.go:49.76,50.32 1 0 +github.com/muety/wakapi/services/alias.go:53.2,53.49 1 0 +github.com/muety/wakapi/services/alias.go:50.32,52.3 1 0 +github.com/muety/wakapi/services/alias.go:53.49,55.3 1 0 +github.com/muety/wakapi/services/alias.go:55.8,57.3 1 0 +github.com/muety/wakapi/services/alias.go:60.102,61.38 1 0 +github.com/muety/wakapi/services/alias.go:64.2,64.39 1 0 +github.com/muety/wakapi/services/alias.go:61.38,63.3 1 0 +github.com/muety/wakapi/services/alias.go:67.113,68.38 1 0 +github.com/muety/wakapi/services/alias.go:71.2,71.39 1 0 +github.com/muety/wakapi/services/alias.go:68.38,70.3 1 0 +github.com/muety/wakapi/services/alias.go:74.108,75.32 1 1 +github.com/muety/wakapi/services/alias.go:79.2,79.49 1 1 +github.com/muety/wakapi/services/alias.go:87.2,87.19 1 1 +github.com/muety/wakapi/services/alias.go:75.32,77.3 1 1 +github.com/muety/wakapi/services/alias.go:79.49,80.47 1 1 +github.com/muety/wakapi/services/alias.go:80.47,81.49 1 1 +github.com/muety/wakapi/services/alias.go:81.49,83.5 1 1 +github.com/muety/wakapi/services/alias.go:90.77,92.16 2 0 +github.com/muety/wakapi/services/alias.go:96.2,100.20 3 0 +github.com/muety/wakapi/services/alias.go:92.16,94.3 1 0 +github.com/muety/wakapi/services/alias.go:103.60,104.24 1 0 +github.com/muety/wakapi/services/alias.go:107.2,110.16 2 0 +github.com/muety/wakapi/services/alias.go:114.2,116.12 2 0 +github.com/muety/wakapi/services/alias.go:104.24,106.3 1 0 +github.com/muety/wakapi/services/alias.go:110.16,112.3 1 0 +github.com/muety/wakapi/services/alias.go:119.69,123.28 3 0 +github.com/muety/wakapi/services/alias.go:131.2,134.16 2 0 +github.com/muety/wakapi/services/alias.go:140.2,140.31 1 0 +github.com/muety/wakapi/services/alias.go:144.2,144.12 1 0 +github.com/muety/wakapi/services/alias.go:123.28,124.21 1 0 +github.com/muety/wakapi/services/alias.go:127.3,128.16 2 0 +github.com/muety/wakapi/services/alias.go:124.21,126.4 1 0 +github.com/muety/wakapi/services/alias.go:134.16,135.29 1 0 +github.com/muety/wakapi/services/alias.go:135.29,137.4 1 0 +github.com/muety/wakapi/services/alias.go:140.31,142.3 1 0 +github.com/muety/wakapi/services/alias.go:147.74,148.14 1 0 +github.com/muety/wakapi/services/alias.go:148.14,149.57 1 0 +github.com/muety/wakapi/services/alias.go:149.57,153.4 3 0 +github.com/muety/wakapi/services/alias.go:154.8,155.57 1 0 +github.com/muety/wakapi/services/alias.go:155.57,157.48 2 0 +github.com/muety/wakapi/services/alias.go:162.4,162.52 1 0 +github.com/muety/wakapi/services/alias.go:157.48,158.26 1 0 +github.com/muety/wakapi/services/alias.go:158.26,160.6 1 0 +github.com/muety/wakapi/services/alias.go:167.116,168.32 1 0 +github.com/muety/wakapi/services/alias.go:171.2,171.49 1 0 +github.com/muety/wakapi/services/alias.go:168.32,170.3 1 0 +github.com/muety/wakapi/services/alias.go:171.49,173.47 2 0 +github.com/muety/wakapi/services/alias.go:178.3,178.30 1 0 +github.com/muety/wakapi/services/alias.go:173.47,174.16 1 0 +github.com/muety/wakapi/services/alias.go:174.16,176.5 1 0 +github.com/muety/wakapi/services/alias.go:179.8,181.3 1 0 +github.com/muety/wakapi/services/diagnostics.go:14.101,19.2 1 0 +github.com/muety/wakapi/services/diagnostics.go:21.101,24.2 2 0 +github.com/muety/wakapi/services/duration.go:18.78,24.2 2 1 +github.com/muety/wakapi/services/duration.go:26.123,29.42 2 1 +github.com/muety/wakapi/services/duration.go:35.2,36.16 2 1 +github.com/muety/wakapi/services/duration.go:43.2,48.31 4 1 +github.com/muety/wakapi/services/duration.go:96.2,98.31 2 1 +github.com/muety/wakapi/services/duration.go:111.2,111.49 1 1 +github.com/muety/wakapi/services/duration.go:115.2,115.32 1 1 +github.com/muety/wakapi/services/duration.go:29.42,30.90 1 1 +github.com/muety/wakapi/services/duration.go:30.90,32.4 1 1 +github.com/muety/wakapi/services/duration.go:36.16,38.3 1 0 +github.com/muety/wakapi/services/duration.go:48.31,49.42 1 1 +github.com/muety/wakapi/services/duration.go:53.3,55.62 2 1 +github.com/muety/wakapi/services/duration.go:59.3,59.20 1 1 +github.com/muety/wakapi/services/duration.go:64.3,74.15 3 1 +github.com/muety/wakapi/services/duration.go:77.3,83.84 2 1 +github.com/muety/wakapi/services/duration.go:93.3,93.10 1 1 +github.com/muety/wakapi/services/duration.go:49.42,50.12 1 1 +github.com/muety/wakapi/services/duration.go:55.62,57.4 1 1 +github.com/muety/wakapi/services/duration.go:59.20,61.12 2 1 +github.com/muety/wakapi/services/duration.go:74.15,76.4 1 0 +github.com/muety/wakapi/services/duration.go:83.84,85.41 2 1 +github.com/muety/wakapi/services/duration.go:88.4,88.15 1 1 +github.com/muety/wakapi/services/duration.go:85.41,87.5 1 1 +github.com/muety/wakapi/services/duration.go:89.9,91.4 1 1 +github.com/muety/wakapi/services/duration.go:98.31,99.26 1 1 +github.com/muety/wakapi/services/duration.go:99.26,104.23 1 1 +github.com/muety/wakapi/services/duration.go:107.4,107.36 1 1 +github.com/muety/wakapi/services/duration.go:104.23,106.5 1 1 +github.com/muety/wakapi/services/duration.go:111.49,113.3 1 1 +github.com/muety/wakapi/services/key_value.go:14.89,19.2 1 0 +github.com/muety/wakapi/services/key_value.go:21.83,23.2 1 0 +github.com/muety/wakapi/services/key_value.go:25.90,27.2 1 0 +github.com/muety/wakapi/services/key_value.go:29.78,31.16 2 0 +github.com/muety/wakapi/services/key_value.go:37.2,37.11 1 0 +github.com/muety/wakapi/services/key_value.go:31.16,36.3 1 0 +github.com/muety/wakapi/services/key_value.go:40.72,42.2 1 0 +github.com/muety/wakapi/services/key_value.go:44.60,46.2 1 0 +github.com/muety/wakapi/services/report.go:31.122,44.2 2 0 +github.com/muety/wakapi/services/report.go:46.38,49.45 2 0 +github.com/muety/wakapi/services/report.go:67.2,67.49 1 0 +github.com/muety/wakapi/services/report.go:87.2,87.16 1 0 +github.com/muety/wakapi/services/report.go:49.45,50.46 1 0 +github.com/muety/wakapi/services/report.go:50.46,53.57 2 0 +github.com/muety/wakapi/services/report.go:58.4,58.58 1 0 +github.com/muety/wakapi/services/report.go:53.57,55.5 1 0 +github.com/muety/wakapi/services/report.go:58.58,61.5 2 0 +github.com/muety/wakapi/services/report.go:62.18,64.4 1 0 +github.com/muety/wakapi/services/report.go:67.49,70.17 2 0 +github.com/muety/wakapi/services/report.go:76.3,76.78 1 0 +github.com/muety/wakapi/services/report.go:81.3,82.27 2 0 +github.com/muety/wakapi/services/report.go:70.17,73.4 2 0 +github.com/muety/wakapi/services/report.go:76.78,78.4 1 0 +github.com/muety/wakapi/services/report.go:82.27,84.4 1 0 +github.com/muety/wakapi/services/report.go:87.16,89.3 1 0 +github.com/muety/wakapi/services/report.go:92.87,93.22 1 0 +github.com/muety/wakapi/services/report.go:98.2,104.16 5 0 +github.com/muety/wakapi/services/report.go:109.2,116.65 2 0 +github.com/muety/wakapi/services/report.go:121.2,122.12 2 0 +github.com/muety/wakapi/services/report.go:93.22,96.3 2 0 +github.com/muety/wakapi/services/report.go:104.16,107.3 2 0 +github.com/muety/wakapi/services/report.go:116.65,119.3 2 0 github.com/muety/wakapi/services/summary.go:29.189,41.33 3 1 github.com/muety/wakapi/services/summary.go:47.2,47.12 1 1 github.com/muety/wakapi/services/summary.go:41.33,42.31 1 1 @@ -1246,220 +1575,6 @@ github.com/muety/wakapi/services/heartbeat.go:264.94,266.48 2 0 github.com/muety/wakapi/services/heartbeat.go:272.2,272.18 1 0 github.com/muety/wakapi/services/heartbeat.go:266.48,268.18 2 0 github.com/muety/wakapi/services/heartbeat.go:268.18,270.4 1 0 -github.com/muety/wakapi/services/key_value.go:14.89,19.2 1 0 -github.com/muety/wakapi/services/key_value.go:21.83,23.2 1 0 -github.com/muety/wakapi/services/key_value.go:25.90,27.2 1 0 -github.com/muety/wakapi/services/key_value.go:29.78,31.16 2 0 -github.com/muety/wakapi/services/key_value.go:37.2,37.11 1 0 -github.com/muety/wakapi/services/key_value.go:31.16,36.3 1 0 -github.com/muety/wakapi/services/key_value.go:40.72,42.2 1 0 -github.com/muety/wakapi/services/key_value.go:44.60,46.2 1 0 -github.com/muety/wakapi/services/leaderboard.go:30.159,43.33 3 0 -github.com/muety/wakapi/services/leaderboard.go:67.2,67.12 1 0 -github.com/muety/wakapi/services/leaderboard.go:43.33,44.31 1 0 -github.com/muety/wakapi/services/leaderboard.go:44.31,50.18 3 0 -github.com/muety/wakapi/services/leaderboard.go:54.4,54.41 1 0 -github.com/muety/wakapi/services/leaderboard.go:50.18,52.5 1 0 -github.com/muety/wakapi/services/leaderboard.go:54.41,57.5 2 0 -github.com/muety/wakapi/services/leaderboard.go:57.10,57.48 1 0 -github.com/muety/wakapi/services/leaderboard.go:57.48,59.64 2 0 -github.com/muety/wakapi/services/leaderboard.go:62.5,62.22 1 0 -github.com/muety/wakapi/services/leaderboard.go:59.64,61.6 1 0 -github.com/muety/wakapi/services/leaderboard.go:70.43,73.21 2 0 -github.com/muety/wakapi/services/leaderboard.go:82.2,82.76 1 0 -github.com/muety/wakapi/services/leaderboard.go:73.21,75.17 2 0 -github.com/muety/wakapi/services/leaderboard.go:79.3,79.91 1 0 -github.com/muety/wakapi/services/leaderboard.go:75.17,78.4 2 0 -github.com/muety/wakapi/services/leaderboard.go:82.76,83.77 1 0 -github.com/muety/wakapi/services/leaderboard.go:83.77,85.4 1 0 -github.com/muety/wakapi/services/leaderboard.go:89.121,92.29 2 0 -github.com/muety/wakapi/services/leaderboard.go:127.2,129.12 3 0 -github.com/muety/wakapi/services/leaderboard.go:92.29,93.83 1 0 -github.com/muety/wakapi/services/leaderboard.go:98.3,99.17 2 0 -github.com/muety/wakapi/services/leaderboard.go:104.3,104.85 1 0 -github.com/muety/wakapi/services/leaderboard.go:109.3,109.25 1 0 -github.com/muety/wakapi/services/leaderboard.go:93.83,95.12 2 0 -github.com/muety/wakapi/services/leaderboard.go:99.17,101.12 2 0 -github.com/muety/wakapi/services/leaderboard.go:104.85,106.12 2 0 -github.com/muety/wakapi/services/leaderboard.go:109.25,111.18 2 0 -github.com/muety/wakapi/services/leaderboard.go:116.4,116.23 1 0 -github.com/muety/wakapi/services/leaderboard.go:120.4,120.60 1 0 -github.com/muety/wakapi/services/leaderboard.go:111.18,113.13 2 0 -github.com/muety/wakapi/services/leaderboard.go:116.23,117.13 1 0 -github.com/muety/wakapi/services/leaderboard.go:120.60,122.13 2 0 -github.com/muety/wakapi/services/leaderboard.go:132.77,135.2 2 0 -github.com/muety/wakapi/services/leaderboard.go:137.60,140.52 2 0 -github.com/muety/wakapi/services/leaderboard.go:144.2,145.16 2 0 -github.com/muety/wakapi/services/leaderboard.go:148.2,148.19 1 0 -github.com/muety/wakapi/services/leaderboard.go:140.52,142.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:145.16,147.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:151.153,153.2 1 0 -github.com/muety/wakapi/services/leaderboard.go:155.144,157.2 1 0 -github.com/muety/wakapi/services/leaderboard.go:159.174,162.52 2 0 -github.com/muety/wakapi/services/leaderboard.go:166.2,167.16 2 0 -github.com/muety/wakapi/services/leaderboard.go:171.2,171.18 1 0 -github.com/muety/wakapi/services/leaderboard.go:184.2,185.19 2 0 -github.com/muety/wakapi/services/leaderboard.go:162.52,164.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:167.16,169.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:171.18,173.17 2 0 -github.com/muety/wakapi/services/leaderboard.go:173.17,175.4 1 0 -github.com/muety/wakapi/services/leaderboard.go:175.9,176.31 1 0 -github.com/muety/wakapi/services/leaderboard.go:176.31,177.40 1 0 -github.com/muety/wakapi/services/leaderboard.go:177.40,179.6 1 0 -github.com/muety/wakapi/services/leaderboard.go:188.165,191.52 2 0 -github.com/muety/wakapi/services/leaderboard.go:195.2,196.16 2 0 -github.com/muety/wakapi/services/leaderboard.go:200.2,200.17 1 0 -github.com/muety/wakapi/services/leaderboard.go:211.2,212.19 2 0 -github.com/muety/wakapi/services/leaderboard.go:191.52,193.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:196.16,198.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:200.17,202.17 2 0 -github.com/muety/wakapi/services/leaderboard.go:202.17,204.4 1 0 -github.com/muety/wakapi/services/leaderboard.go:204.9,205.31 1 0 -github.com/muety/wakapi/services/leaderboard.go:205.31,207.5 1 0 -github.com/muety/wakapi/services/leaderboard.go:215.129,217.16 2 0 -github.com/muety/wakapi/services/leaderboard.go:221.2,222.16 2 0 -github.com/muety/wakapi/services/leaderboard.go:226.2,231.8 1 0 -github.com/muety/wakapi/services/leaderboard.go:217.16,219.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:222.16,224.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:234.151,236.16 2 0 -github.com/muety/wakapi/services/leaderboard.go:240.2,241.16 2 0 -github.com/muety/wakapi/services/leaderboard.go:245.2,248.42 3 0 -github.com/muety/wakapi/services/leaderboard.go:260.2,260.19 1 0 -github.com/muety/wakapi/services/leaderboard.go:236.16,238.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:241.16,243.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:248.42,258.3 2 0 -github.com/muety/wakapi/services/leaderboard.go:263.131,265.47 2 0 -github.com/muety/wakapi/services/leaderboard.go:268.2,268.23 1 0 -github.com/muety/wakapi/services/leaderboard.go:271.2,271.10 1 0 -github.com/muety/wakapi/services/leaderboard.go:265.47,267.3 1 0 -github.com/muety/wakapi/services/leaderboard.go:268.23,270.3 1 0 -github.com/muety/wakapi/services/user.go:26.99,36.33 3 0 -github.com/muety/wakapi/services/user.go:57.2,57.12 1 0 -github.com/muety/wakapi/services/user.go:36.33,37.31 1 0 -github.com/muety/wakapi/services/user.go:37.31,43.73 4 0 -github.com/muety/wakapi/services/user.go:47.4,47.24 1 0 -github.com/muety/wakapi/services/user.go:43.73,45.5 1 0 -github.com/muety/wakapi/services/user.go:47.24,48.80 1 0 -github.com/muety/wakapi/services/user.go:48.80,50.6 1 0 -github.com/muety/wakapi/services/user.go:50.11,52.6 1 0 -github.com/muety/wakapi/services/user.go:60.74,61.40 1 0 -github.com/muety/wakapi/services/user.go:65.2,66.16 2 0 -github.com/muety/wakapi/services/user.go:70.2,71.15 2 0 -github.com/muety/wakapi/services/user.go:61.40,63.3 1 0 -github.com/muety/wakapi/services/user.go:66.16,68.3 1 0 -github.com/muety/wakapi/services/user.go:74.72,75.37 1 0 -github.com/muety/wakapi/services/user.go:79.2,80.16 2 0 -github.com/muety/wakapi/services/user.go:84.2,85.15 2 0 -github.com/muety/wakapi/services/user.go:75.37,77.3 1 0 -github.com/muety/wakapi/services/user.go:80.16,82.3 1 0 -github.com/muety/wakapi/services/user.go:88.76,90.2 1 0 -github.com/muety/wakapi/services/user.go:92.86,94.2 1 0 -github.com/muety/wakapi/services/user.go:96.92,98.2 1 0 -github.com/muety/wakapi/services/user.go:100.58,102.2 1 0 -github.com/muety/wakapi/services/user.go:104.71,106.2 1 0 -github.com/muety/wakapi/services/user.go:108.86,110.16 2 0 -github.com/muety/wakapi/services/user.go:113.2,113.112 1 0 -github.com/muety/wakapi/services/user.go:110.16,112.3 1 0 -github.com/muety/wakapi/services/user.go:113.112,115.3 1 0 -github.com/muety/wakapi/services/user.go:118.86,120.2 1 0 -github.com/muety/wakapi/services/user.go:122.94,124.2 1 0 -github.com/muety/wakapi/services/user.go:126.71,128.12 2 0 -github.com/muety/wakapi/services/user.go:132.2,133.42 2 0 -github.com/muety/wakapi/services/user.go:137.2,138.16 2 0 -github.com/muety/wakapi/services/user.go:142.2,143.21 2 0 -github.com/muety/wakapi/services/user.go:128.12,130.3 1 0 -github.com/muety/wakapi/services/user.go:133.42,135.3 1 0 -github.com/muety/wakapi/services/user.go:138.16,140.3 1 0 -github.com/muety/wakapi/services/user.go:146.48,148.2 1 0 -github.com/muety/wakapi/services/user.go:150.102,160.93 2 0 -github.com/muety/wakapi/services/user.go:166.2,166.38 1 0 -github.com/muety/wakapi/services/user.go:160.93,162.3 1 0 -github.com/muety/wakapi/services/user.go:162.8,164.3 1 0 -github.com/muety/wakapi/services/user.go:169.73,173.2 3 0 -github.com/muety/wakapi/services/user.go:175.78,179.2 3 0 -github.com/muety/wakapi/services/user.go:181.122,184.35 2 0 -github.com/muety/wakapi/services/user.go:190.2,190.35 1 0 -github.com/muety/wakapi/services/user.go:194.2,194.18 1 0 -github.com/muety/wakapi/services/user.go:184.35,185.89 1 0 -github.com/muety/wakapi/services/user.go:185.89,187.4 1 0 -github.com/muety/wakapi/services/user.go:190.35,192.3 1 0 -github.com/muety/wakapi/services/user.go:197.106,200.96 3 0 -github.com/muety/wakapi/services/user.go:205.2,205.68 1 0 -github.com/muety/wakapi/services/user.go:200.96,202.3 1 0 -github.com/muety/wakapi/services/user.go:202.8,204.3 1 0 -github.com/muety/wakapi/services/user.go:208.85,210.2 1 0 -github.com/muety/wakapi/services/user.go:212.57,219.2 4 0 -github.com/muety/wakapi/services/user.go:221.38,223.2 1 0 -github.com/muety/wakapi/services/user.go:225.55,227.2 1 0 -github.com/muety/wakapi/services/user.go:229.57,234.2 1 0 -github.com/muety/wakapi/services/aggregation.go:31.142,41.2 1 0 -github.com/muety/wakapi/services/aggregation.go:50.43,53.52 2 0 -github.com/muety/wakapi/services/aggregation.go:53.52,54.80 1 0 -github.com/muety/wakapi/services/aggregation.go:54.80,56.4 1 0 -github.com/muety/wakapi/services/aggregation.go:57.58,59.3 1 0 -github.com/muety/wakapi/services/aggregation.go:62.92,63.47 1 0 -github.com/muety/wakapi/services/aggregation.go:66.2,72.16 4 0 -github.com/muety/wakapi/services/aggregation.go:78.2,79.16 2 0 -github.com/muety/wakapi/services/aggregation.go:85.2,86.44 2 0 -github.com/muety/wakapi/services/aggregation.go:91.2,93.12 3 0 -github.com/muety/wakapi/services/aggregation.go:105.2,105.41 1 0 -github.com/muety/wakapi/services/aggregation.go:123.2,123.12 1 0 -github.com/muety/wakapi/services/aggregation.go:63.47,65.3 1 0 -github.com/muety/wakapi/services/aggregation.go:72.16,75.3 2 0 -github.com/muety/wakapi/services/aggregation.go:79.16,82.3 2 0 -github.com/muety/wakapi/services/aggregation.go:86.44,88.3 1 0 -github.com/muety/wakapi/services/aggregation.go:93.12,94.28 1 0 -github.com/muety/wakapi/services/aggregation.go:94.28,96.47 2 0 -github.com/muety/wakapi/services/aggregation.go:96.47,98.5 1 0 -github.com/muety/wakapi/services/aggregation.go:98.19,100.5 1 0 -github.com/muety/wakapi/services/aggregation.go:105.41,106.71 1 0 -github.com/muety/wakapi/services/aggregation.go:110.3,110.21 1 0 -github.com/muety/wakapi/services/aggregation.go:106.71,107.12 1 0 -github.com/muety/wakapi/services/aggregation.go:110.21,114.4 1 0 -github.com/muety/wakapi/services/aggregation.go:114.9,114.62 1 0 -github.com/muety/wakapi/services/aggregation.go:114.62,118.4 1 0 -github.com/muety/wakapi/services/aggregation.go:126.60,127.115 1 0 -github.com/muety/wakapi/services/aggregation.go:127.115,129.3 1 0 -github.com/muety/wakapi/services/aggregation.go:129.8,131.60 2 0 -github.com/muety/wakapi/services/aggregation.go:131.60,133.4 1 0 -github.com/muety/wakapi/services/aggregation.go:137.83,152.41 5 0 -github.com/muety/wakapi/services/aggregation.go:152.41,162.3 3 0 -github.com/muety/wakapi/services/aggregation.go:165.83,168.27 3 0 -github.com/muety/wakapi/services/aggregation.go:173.2,174.12 2 0 -github.com/muety/wakapi/services/aggregation.go:168.27,169.34 1 0 -github.com/muety/wakapi/services/aggregation.go:169.34,171.4 1 0 -github.com/muety/wakapi/services/aggregation.go:177.79,180.27 3 0 -github.com/muety/wakapi/services/aggregation.go:180.27,182.3 1 0 -github.com/muety/wakapi/services/aggregation.go:185.34,188.2 2 0 -github.com/muety/wakapi/services/duration.go:18.78,24.2 2 1 -github.com/muety/wakapi/services/duration.go:26.123,29.42 2 1 -github.com/muety/wakapi/services/duration.go:35.2,36.16 2 1 -github.com/muety/wakapi/services/duration.go:43.2,48.31 4 1 -github.com/muety/wakapi/services/duration.go:96.2,98.31 2 1 -github.com/muety/wakapi/services/duration.go:111.2,111.49 1 1 -github.com/muety/wakapi/services/duration.go:115.2,115.32 1 1 -github.com/muety/wakapi/services/duration.go:29.42,30.90 1 1 -github.com/muety/wakapi/services/duration.go:30.90,32.4 1 1 -github.com/muety/wakapi/services/duration.go:36.16,38.3 1 0 -github.com/muety/wakapi/services/duration.go:48.31,49.42 1 1 -github.com/muety/wakapi/services/duration.go:53.3,55.62 2 1 -github.com/muety/wakapi/services/duration.go:59.3,59.20 1 1 -github.com/muety/wakapi/services/duration.go:64.3,74.15 3 1 -github.com/muety/wakapi/services/duration.go:77.3,83.84 2 1 -github.com/muety/wakapi/services/duration.go:93.3,93.10 1 1 -github.com/muety/wakapi/services/duration.go:49.42,50.12 1 1 -github.com/muety/wakapi/services/duration.go:55.62,57.4 1 1 -github.com/muety/wakapi/services/duration.go:59.20,61.12 2 1 -github.com/muety/wakapi/services/duration.go:74.15,76.4 1 0 -github.com/muety/wakapi/services/duration.go:83.84,85.41 2 1 -github.com/muety/wakapi/services/duration.go:88.4,88.15 1 1 -github.com/muety/wakapi/services/duration.go:85.41,87.5 1 1 -github.com/muety/wakapi/services/duration.go:89.9,91.4 1 1 -github.com/muety/wakapi/services/duration.go:98.31,99.26 1 1 -github.com/muety/wakapi/services/duration.go:99.26,104.23 1 1 -github.com/muety/wakapi/services/duration.go:107.4,107.36 1 1 -github.com/muety/wakapi/services/duration.go:104.23,106.5 1 1 -github.com/muety/wakapi/services/duration.go:111.49,113.3 1 1 github.com/muety/wakapi/services/housekeeping.go:20.144,29.2 1 0 github.com/muety/wakapi/services/housekeeping.go:31.42,32.43 1 0 github.com/muety/wakapi/services/housekeeping.go:36.2,38.47 2 0 @@ -1479,46 +1594,3 @@ github.com/muety/wakapi/services/housekeeping.go:76.2,77.74 2 0 github.com/muety/wakapi/services/housekeeping.go:81.2,81.12 1 0 github.com/muety/wakapi/services/housekeeping.go:71.73,73.3 1 0 github.com/muety/wakapi/services/housekeeping.go:77.74,79.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:18.118,24.2 1 0 -github.com/muety/wakapi/services/language_mapping.go:26.86,28.2 1 0 -github.com/muety/wakapi/services/language_mapping.go:30.96,31.53 1 0 -github.com/muety/wakapi/services/language_mapping.go:35.2,36.16 2 0 -github.com/muety/wakapi/services/language_mapping.go:39.2,40.22 2 0 -github.com/muety/wakapi/services/language_mapping.go:31.53,33.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:36.16,38.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:43.92,46.16 3 0 -github.com/muety/wakapi/services/language_mapping.go:50.2,50.33 1 0 -github.com/muety/wakapi/services/language_mapping.go:53.2,53.22 1 0 -github.com/muety/wakapi/services/language_mapping.go:46.16,48.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:50.33,52.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:56.109,58.16 2 0 -github.com/muety/wakapi/services/language_mapping.go:62.2,63.20 2 0 -github.com/muety/wakapi/services/language_mapping.go:58.16,60.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:66.82,67.26 1 0 -github.com/muety/wakapi/services/language_mapping.go:70.2,72.12 3 0 -github.com/muety/wakapi/services/language_mapping.go:67.26,69.3 1 0 -github.com/muety/wakapi/services/language_mapping.go:75.74,78.2 1 0 -github.com/muety/wakapi/services/report.go:31.122,44.2 2 0 -github.com/muety/wakapi/services/report.go:46.38,49.45 2 0 -github.com/muety/wakapi/services/report.go:67.2,67.49 1 0 -github.com/muety/wakapi/services/report.go:87.2,87.16 1 0 -github.com/muety/wakapi/services/report.go:49.45,50.46 1 0 -github.com/muety/wakapi/services/report.go:50.46,53.57 2 0 -github.com/muety/wakapi/services/report.go:58.4,58.58 1 0 -github.com/muety/wakapi/services/report.go:53.57,55.5 1 0 -github.com/muety/wakapi/services/report.go:58.58,61.5 2 0 -github.com/muety/wakapi/services/report.go:62.18,64.4 1 0 -github.com/muety/wakapi/services/report.go:67.49,70.17 2 0 -github.com/muety/wakapi/services/report.go:76.3,76.78 1 0 -github.com/muety/wakapi/services/report.go:81.3,82.27 2 0 -github.com/muety/wakapi/services/report.go:70.17,73.4 2 0 -github.com/muety/wakapi/services/report.go:76.78,78.4 1 0 -github.com/muety/wakapi/services/report.go:82.27,84.4 1 0 -github.com/muety/wakapi/services/report.go:87.16,89.3 1 0 -github.com/muety/wakapi/services/report.go:92.87,93.22 1 0 -github.com/muety/wakapi/services/report.go:98.2,104.16 5 0 -github.com/muety/wakapi/services/report.go:109.2,116.65 2 0 -github.com/muety/wakapi/services/report.go:121.2,122.12 2 0 -github.com/muety/wakapi/services/report.go:93.22,96.3 2 0 -github.com/muety/wakapi/services/report.go:104.16,107.3 2 0 -github.com/muety/wakapi/services/report.go:116.65,119.3 2 0 diff --git a/go.mod b/go.mod index 7517934..486353e 100644 --- a/go.mod +++ b/go.mod @@ -4,81 +4,84 @@ go 1.19 require ( codeberg.org/Codeberg/avatars v1.0.0 - github.com/duke-git/lancet/v2 v2.1.10 + github.com/duke-git/lancet/v2 v2.1.13 github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead - github.com/emersion/go-smtp v0.15.0 + github.com/emersion/go-smtp v0.16.0 github.com/emvi/logbuch v1.2.0 github.com/getsentry/sentry-go v0.15.0 - github.com/glebarez/sqlite v1.5.0 + github.com/glebarez/sqlite v1.6.0 github.com/gorilla/handlers v1.5.1 github.com/gorilla/mux v1.8.0 github.com/gorilla/schema v1.2.0 github.com/gorilla/securecookie v1.1.1 + github.com/gorilla/sessions v1.2.1 github.com/hashicorp/golang-lru v0.5.4 github.com/jinzhu/configor v1.2.1 github.com/leandro-lugaresi/hub v1.1.1 github.com/lpar/gzipped/v2 v2.1.0 github.com/mitchellh/hashstructure/v2 v2.0.2 github.com/muety/artifex/v2 v2.0.1-0.20221201142708-74e7d3f6feaf - github.com/narqo/go-badge v0.0.0-20220127184443-140af28a266e + github.com/narqo/go-badge v0.0.0-20221212191103-ba83bed45a1a github.com/patrickmn/go-cache v2.1.0+incompatible github.com/robfig/cron/v3 v3.0.1 github.com/satori/go.uuid v1.2.0 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.1 + github.com/stripe/stripe-go/v74 v74.5.0 github.com/swaggo/http-swagger v1.3.3 - github.com/swaggo/swag v1.8.8 + github.com/swaggo/swag v1.8.9 go.uber.org/atomic v1.10.0 - golang.org/x/crypto v0.3.0 + golang.org/x/crypto v0.5.0 golang.org/x/sync v0.1.0 - gorm.io/driver/mysql v1.4.4 - gorm.io/driver/postgres v1.4.5 - gorm.io/driver/sqlite v1.4.3 - gorm.io/gorm v1.24.2 + gorm.io/driver/mysql v1.4.5 + gorm.io/driver/postgres v1.4.6 + gorm.io/driver/sqlite v1.4.4 + gorm.io/gorm v1.24.3 ) require ( github.com/BurntSushi/toml v1.2.1 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/glebarez/go-sqlite v1.19.5 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/spec v0.20.7 // indirect + github.com/glebarez/go-sqlite v1.20.0 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/spec v0.20.8 // indirect github.com/go-openapi/swag v0.22.3 // indirect - github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/go-sql-driver/mysql v1.7.0 // indirect github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/gorilla/sessions v1.2.1 // indirect github.com/jackc/chunkreader/v2 v2.0.1 // indirect github.com/jackc/pgconn v1.13.0 // indirect github.com/jackc/pgio v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgproto3/v2 v2.3.1 // indirect - github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b // indirect - github.com/jackc/pgtype v1.12.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgtype v1.13.0 // indirect github.com/jackc/pgx/v4 v4.17.2 // indirect + github.com/jackc/pgx/v5 v5.2.0 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/kevinpollet/nego v0.0.0-20211010160919-a65cd48cee43 // indirect github.com/mailru/easyjson v0.7.7 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa // indirect - github.com/stretchr/objx v0.4.0 // indirect - github.com/stripe/stripe-go/v74 v74.3.0 // indirect - github.com/swaggo/files v0.0.0-20220728132757-551d4a08d97a // indirect - golang.org/x/image v0.1.0 // indirect - golang.org/x/net v0.2.0 // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect - golang.org/x/tools v0.3.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect + github.com/swaggo/files v1.0.0 // indirect + golang.org/x/exp v0.0.0-20230116083435-1de6713980de // indirect + golang.org/x/image v0.3.0 // indirect + golang.org/x/net v0.5.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect + golang.org/x/tools v0.5.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - modernc.org/libc v1.21.5 // indirect + modernc.org/libc v1.22.2 // indirect modernc.org/mathutil v1.5.0 // indirect - modernc.org/memory v1.4.0 // indirect - modernc.org/sqlite v1.20.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/sqlite v1.20.2 // indirect ) diff --git a/go.sum b/go.sum index 87081cf..1de0a95 100644 --- a/go.sum +++ b/go.sum @@ -21,12 +21,18 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/duke-git/lancet/v2 v2.1.10 h1:q6YKhbYg6KChBS+T41e/IhK+sTDPVk2wRhWLTevCeuY= github.com/duke-git/lancet/v2 v2.1.10/go.mod h1:5Nawyf/bK783rCiHyVkZLx+jj8028oVVjLOrC21ZONA= +github.com/duke-git/lancet/v2 v2.1.13 h1:KOCCVrfh4pjuwl6td5MQ4OqvV73qFdoGxv20HWmyPaM= +github.com/duke-git/lancet/v2 v2.1.13/go.mod h1:hNcc06mV7qr+crH/0nP+rlC3TB0Q9g5OrVnO8/TGD4c= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead h1:fI1Jck0vUrXT8bnphprS1EoVRe2Q5CKCX8iDlpqjQ/Y= github.com/emersion/go-sasl v0.0.0-20220912192320-0145f2c60ead/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-smtp v0.15.0 h1:3+hMGMGrqP/lqd7qoxZc1hTU8LY8gHV9RFGWlqSDmP8= github.com/emersion/go-smtp v0.15.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= +github.com/emersion/go-smtp v0.16.0 h1:eB9CY9527WdEZSs5sWisTmilDX7gG+Q/2IdRcmubpa8= +github.com/emersion/go-smtp v0.16.0/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= github.com/emvi/logbuch v1.2.0 h1:Bw0jQH1Dbs+oIygZBNx/2Ub1igXRFtKQrIMRrZdVFJM= github.com/emvi/logbuch v1.2.0/go.mod h1:hFxe0XQOFl76SkE/f0Pt5oQbXRZtyGa8EroBrrbQHuc= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -34,27 +40,41 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/getsentry/sentry-go v0.15.0 h1:CP9bmA7pralrVUedYZsmIHWpq/pBtXTSew7xvVpfLaA= github.com/getsentry/sentry-go v0.15.0/go.mod h1:RZPJKSw+adu8PBNygiri/A98FqVr2HtRckJk9XVxJ9I= +github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= +github.com/getsentry/sentry-go v0.17.0/go.mod h1:B82dxtBvxG0KaPD8/hfSV+VcHD+Lg/xUS4JuQn1P4cM= github.com/glebarez/go-sqlite v1.19.1/go.mod h1:9AykawGIyIcxoSfpYWiX1SgTNHTNsa/FVc75cDkbp4M= github.com/glebarez/go-sqlite v1.19.5 h1:krEVjICcImFNi+X81GmEkSe/brhzLL3Csbkb/ihi8sI= github.com/glebarez/go-sqlite v1.19.5/go.mod h1:IjVxx3ezfL9clKLLSzVgv2sGZe28yIa116YyLTIvp84= +github.com/glebarez/go-sqlite v1.20.0 h1:6D9uRXq3Kd+W7At+hOU2eIAeahv6qcYfO8jzmvb4Dr8= +github.com/glebarez/go-sqlite v1.20.0/go.mod h1:uTnJoqtwMQjlULmljLT73Cg7HB+2X6evsBHODyyq1ak= github.com/glebarez/sqlite v1.5.0 h1:+8LAEpmywqresSoGlqjjT+I9m4PseIM3NcerIJ/V7mk= github.com/glebarez/sqlite v1.5.0/go.mod h1:0wzXzTvfVJIN2GqRhCdMbnYd+m+aH5/QV7B30rM6NgY= +github.com/glebarez/sqlite v1.6.0 h1:ZpvDLv4zBi2cuuQPitRiVz/5Uh6sXa5d8eBu0xNTpAo= +github.com/glebarez/sqlite v1.6.0/go.mod h1:6D6zPU/HTrFlYmVDKqBJlmQvma90P6r7sRRdkUUZOYk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/spec v0.20.7 h1:1Rlu/ZrOCCob0n+JKKJAWhNWMPW8bOZRg8FJaY+0SKI= github.com/go-openapi/spec v0.20.7/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/spec v0.20.8 h1:ubHmXNY3FCIOinT8RNrrPfGc9t7I1qhPtdOGoG2AxRU= +github.com/go-openapi/spec v0.20.8/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= +github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= @@ -80,6 +100,7 @@ github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/z github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= @@ -100,6 +121,7 @@ github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5W github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= @@ -111,22 +133,29 @@ github.com/jackc/pgproto3/v2 v2.3.1 h1:nwj7qwf0S+Q7ISFfBndqeLwSwxs+4DPsbRFjECT1Y github.com/jackc/pgproto3/v2 v2.3.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= github.com/jackc/pgtype v1.12.0 h1:Dlq8Qvcch7kiehm8wPGIW0W3KsCCHJnRacKW0UM8n5w= github.com/jackc/pgtype v1.12.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgtype v1.13.0 h1:XkIc7A+1BmZD19bB2NxrtjJweHxQ9agqvM+9URc68Cg= +github.com/jackc/pgtype v1.13.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= github.com/jackc/pgx/v4 v4.17.2 h1:0Ut0rpeKwvIVbMQ1KbMBU4h6wxehBI535LK6Flheh8E= github.com/jackc/pgx/v4 v4.17.2/go.mod h1:lcxIZN44yMIrWI78a5CpucdD14hX0SBDbNRvjDBItsw= +github.com/jackc/pgx/v5 v5.2.0 h1:NdPpngX0Y6z6XDFKqmFQaE+bCtkqzvQIOt1wvBlAqs8= +github.com/jackc/pgx/v5 v5.2.0/go.mod h1:Ptn7zmohNsWEsdxRawMzk3gaKma2obW+NWTnKa0S4nk= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle/v2 v2.1.2/go.mod h1:2lpufsF5mRHO6SuZkm0fNYxM6SWHfvyFj62KwNzgels= github.com/jinzhu/configor v1.2.1 h1:OKk9dsR8i6HPOCZR8BcMtcEImAFjIhbJFZNyn5GCZko= github.com/jinzhu/configor v1.2.1/go.mod h1:nX89/MOmDba7ZX7GCyU/VIaQ2Ar2aizBl2d3JLF/rDc= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= @@ -144,6 +173,9 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -170,6 +202,8 @@ github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= @@ -179,6 +213,8 @@ github.com/muety/artifex/v2 v2.0.1-0.20221201142708-74e7d3f6feaf h1:zd7IU9rxVMl2 github.com/muety/artifex/v2 v2.0.1-0.20221201142708-74e7d3f6feaf/go.mod h1:eElbcdMwTDc7Wzl7A46IopgkC6a9nV7jOB6Mw8r0waE= github.com/narqo/go-badge v0.0.0-20220127184443-140af28a266e h1:bR8DQ4ZfItytLJwRlrLOPUHd5z18V6tECwYQFy8W+8g= github.com/narqo/go-badge v0.0.0-20220127184443-140af28a266e/go.mod h1:m9BzkaxwU4IfPQi9ko23cmuFltayFe8iS0dlRlnEWiM= +github.com/narqo/go-badge v0.0.0-20221212191103-ba83bed45a1a h1:G6Kjw+HNpJUZY1bfBkd8XOZ7nuDWmXLaJukeiM2Xv7o= +github.com/narqo/go-badge v0.0.0-20221212191103-ba83bed45a1a/go.mod h1:m9BzkaxwU4IfPQi9ko23cmuFltayFe8iS0dlRlnEWiM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= @@ -193,6 +229,7 @@ github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa/go.mod h1:qq github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= @@ -208,6 +245,8 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -217,14 +256,22 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stripe/stripe-go/v74 v74.3.0 h1:8ymGwZvMnpWMCRNomc9dVGcJ5j8L/ubwhQvpIpcmcOA= github.com/stripe/stripe-go/v74 v74.3.0/go.mod h1:5PoXNp30AJ3tGq57ZcFuaMylzNi8KpwlrYAFmO1fHZw= +github.com/stripe/stripe-go/v74 v74.5.0 h1:YyqTvVQdS34KYGCfVB87EMn9eDV3FCFkSwfdOQhiVL4= +github.com/stripe/stripe-go/v74 v74.5.0/go.mod h1:5PoXNp30AJ3tGq57ZcFuaMylzNi8KpwlrYAFmO1fHZw= github.com/swaggo/files v0.0.0-20220728132757-551d4a08d97a h1:kAe4YSu0O0UFn1DowNo2MY5p6xzqtJ/wQ7LZynSvGaY= github.com/swaggo/files v0.0.0-20220728132757-551d4a08d97a/go.mod h1:lKJPbtWzJ9JhsTN1k1gZgleJWY/cqq0psdoMmaThG3w= +github.com/swaggo/files v1.0.0 h1:1gGXVIeUFCS/dta17rnP0iOpr6CXFwKD7EO5ID233e4= +github.com/swaggo/files v1.0.0/go.mod h1:N59U6URJLyU1PQgFqPM7wXLMhJx7QAolnvfQkqO13kc= github.com/swaggo/http-swagger v1.3.3 h1:Hu5Z0L9ssyBLofaama21iYaF2VbWyA8jdohaaCGpHsc= github.com/swaggo/http-swagger v1.3.3/go.mod h1:sE+4PjD89IxMPm77FnkDz0sdO+p5lbXzrVWT6OTVVGo= github.com/swaggo/swag v1.8.8 h1:/GgJmrJ8/c0z4R4hoEPZ5UeEhVGdvsII4JbVDLbR7Xc= github.com/swaggo/swag v1.8.8/go.mod h1:ezQVUUhly8dludpVk+/PuwJWvLLanB13ygV5Pr9enSk= +github.com/swaggo/swag v1.8.9 h1:kHtaBe/Ob9AZzAANfcn5c6RyCke9gG9QpH0jky0I/sA= +github.com/swaggo/swag v1.8.9/go.mod h1:ezQVUUhly8dludpVk+/PuwJWvLLanB13ygV5Pr9enSk= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= @@ -252,10 +299,18 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= +golang.org/x/exp v0.0.0-20230116083435-1de6713980de h1:DBWn//IJw30uYCgERoxCg84hWtA97F4wMiKOIh00Uf0= +golang.org/x/exp v0.0.0-20230116083435-1de6713980de/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/image v0.1.0 h1:r8Oj8ZA2Xy12/b5KZYj3tuv7NG/fBz3TwQVvpJ9l8Rk= golang.org/x/image v0.1.0/go.mod h1:iyPr49SD/G/TBxYVB/9RRtGUT5eNbo2u4NamWeQcD5c= +golang.org/x/image v0.3.0 h1:HTDXbdK9bjfSWkPzDJIw89W8CAtfFGduujWs33NLLsg= +golang.org/x/image v0.3.0/go.mod h1:fXd9211C/0VTlYuAcOhW8dY/RtEJqODXOWBDpmYBf+A= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= @@ -274,9 +329,13 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220923202941-7f9b1623fab7/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -301,17 +360,26 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -325,6 +393,8 @@ golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -335,6 +405,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -346,15 +417,23 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/mysql v1.4.4 h1:MX0K9Qvy0Na4o7qSC/YI7XxqUw5KDw01umqgID+svdQ= gorm.io/driver/mysql v1.4.4/go.mod h1:BCg8cKI+R0j/rZRQxeKis/forqRwRSYOR8OM3Wo6hOM= +gorm.io/driver/mysql v1.4.5 h1:u1lytId4+o9dDaNcPCFzNv7h6wvmc92UjNk3z8enSBU= +gorm.io/driver/mysql v1.4.5/go.mod h1:SxzItlnT1cb6e1e4ZRpgJN2VYtcqJgqnHxWr4wsP8oc= gorm.io/driver/postgres v1.4.5 h1:mTeXTTtHAgnS9PgmhN2YeUbazYpLhUI1doLnw42XUZc= gorm.io/driver/postgres v1.4.5/go.mod h1:GKNQYSJ14qvWkvPwXljMGehpKrhlDNsqYRr5HnYGncg= +gorm.io/driver/postgres v1.4.6 h1:1FPESNXqIKG5JmraaH2bfCVlMQ7paLoCreFxDtqzwdc= +gorm.io/driver/postgres v1.4.6/go.mod h1:UJChCNLFKeBqQRE+HrkFUbKbq9idPXmTOk2u4Wok8S4= gorm.io/driver/sqlite v1.4.3 h1:HBBcZSDnWi5BW3B3rwvVTc510KGkBkexlOg0QrmLUuU= gorm.io/driver/sqlite v1.4.3/go.mod h1:0Aq3iPO+v9ZKbcdiz8gLWRw5VOPcBOPUQJFLq5e2ecI= +gorm.io/driver/sqlite v1.4.4 h1:gIufGoR0dQzjkyqDyYSCvsYR6fba1Gw5YKDqKeChxFc= +gorm.io/driver/sqlite v1.4.4/go.mod h1:0Aq3iPO+v9ZKbcdiz8gLWRw5VOPcBOPUQJFLq5e2ecI= gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.24.0/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= gorm.io/gorm v1.24.1-0.20221019064659-5dd2bb482755/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= gorm.io/gorm v1.24.2 h1:9wR6CFD+G8nOusLdvkZelOEhpJVwwHzpQOUM+REd6U0= gorm.io/gorm v1.24.2/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= +gorm.io/gorm v1.24.3 h1:WL2ifUmzR/SLp85CSURAfybcHnGZ+yLSGSxgYXlFBHg= +gorm.io/gorm v1.24.3/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= @@ -377,6 +456,8 @@ modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= modernc.org/libc v1.21.5 h1:xBkU9fnHV+hvZuPSRszN0AXDG4M7nwPLwTWwkYcvLCI= modernc.org/libc v1.21.5/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI= +modernc.org/libc v1.22.2 h1:4U7v51GyhlWqQmwCHj28Rdq2Yzwk55ovjFrdPjs8Hb0= +modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug= modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= @@ -385,12 +466,16 @@ modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/memory v1.4.0 h1:crykUfNSnMAXaOJnnxcSzbUGMqkLWjklJKkBK2nwZwk= modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= modernc.org/sqlite v1.19.1/go.mod h1:UfQ83woKMaPW/ZBruK0T7YaFCrI+IE0LeWVY6pmnVms= modernc.org/sqlite v1.19.5/go.mod h1:EsYz8rfOvLCiYTy5ZFsOYzoCcRMu98YYkwAcCw5YIYw= modernc.org/sqlite v1.20.0 h1:80zmD3BGkm8BZ5fUi/4lwJQHiO3GXgIUvZRXpoIfROY= modernc.org/sqlite v1.20.0/go.mod h1:EsYz8rfOvLCiYTy5ZFsOYzoCcRMu98YYkwAcCw5YIYw= +modernc.org/sqlite v1.20.2 h1:9AaVzJH1Yf0u9iOZRjjuvqxLoGqybqVFbAUC5rvi9u8= +modernc.org/sqlite v1.20.2/go.mod h1:zKcGyrICaxNTMEHSr1HQ2GUraP0j+845GYw37+EyT6A= modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.14.0/go.mod h1:gQ7c1YPMvryCHCcmf8acB6VPabE59QBeuRQLL7cTUlM= diff --git a/routes/compat/wakatime/v1/summaries.go b/routes/compat/wakatime/v1/summaries.go index 5a45b7b..ec4554a 100644 --- a/routes/compat/wakatime/v1/summaries.go +++ b/routes/compat/wakatime/v1/summaries.go @@ -64,12 +64,12 @@ func (h *SummariesHandler) RegisterRoutes(router *mux.Router) { // @Success 200 {object} v1.SummariesViewModel // @Router /compat/wakatime/v1/users/{user}/summaries [get] func (h *SummariesHandler) Get(w http.ResponseWriter, r *http.Request) { - _, err := routeutils.CheckEffectiveUser(w, r, h.userSrvc, "current") + user, err := routeutils.CheckEffectiveUser(w, r, h.userSrvc, "current") if err != nil { return // response was already sent by util function } - summaries, err, status := h.loadUserSummaries(r) + summaries, err, status := h.loadUserSummaries(r, user) if err != nil { w.WriteHeader(status) w.Write([]byte(err.Error())) @@ -80,8 +80,7 @@ func (h *SummariesHandler) Get(w http.ResponseWriter, r *http.Request) { helpers.RespondJSON(w, r, http.StatusOK, vm) } -func (h *SummariesHandler) loadUserSummaries(r *http.Request) ([]*models.Summary, error, int) { - user := middlewares.GetPrincipal(r) +func (h *SummariesHandler) loadUserSummaries(r *http.Request, user *models.User) ([]*models.Summary, error, int) { params := r.URL.Query() rangeParam, startParam, endParam, tzParam := params.Get("range"), params.Get("start"), params.Get("end"), params.Get("timezone") diff --git a/routes/utils/user_utils.go b/routes/utils/user_utils.go index e812d0a..b9edcc8 100644 --- a/routes/utils/user_utils.go +++ b/routes/utils/user_utils.go @@ -13,34 +13,34 @@ import ( // CheckEffectiveUser extracts the requested user from a URL (like '/users/{user}'), compares it with the currently authorized user and writes an HTTP error if they differ. // Fallback can be used to manually set a value for '{user}' if none is present. func CheckEffectiveUser(w http.ResponseWriter, r *http.Request, userService services.IUserService, fallback string) (*models.User, error) { - var vars = mux.Vars(r) - var authorizedUser, requestedUser *models.User - - if vars["user"] == "" { - vars["user"] = fallback - } - - authorizedUser = middlewares.GetPrincipal(r) - if authorizedUser != nil { - if vars["user"] == "current" { - vars["user"] = authorizedUser.ID - } - } - - requestedUser, err := userService.GetUserById(vars["user"]) - if err != nil { - err := errors.New("user not found") - w.WriteHeader(http.StatusNotFound) - w.Write([]byte(err.Error())) - return nil, err - } - - if authorizedUser == nil || authorizedUser.ID != requestedUser.ID && !authorizedUser.IsAdmin { + respondError := func(code int, text string) (*models.User, error) { err := errors.New(conf.ErrUnauthorized) w.WriteHeader(http.StatusUnauthorized) w.Write([]byte(err.Error())) return nil, err } + var vars = mux.Vars(r) + + if vars["user"] == "" { + vars["user"] = fallback + } + + authorizedUser := middlewares.GetPrincipal(r) + if authorizedUser == nil { + return respondError(http.StatusUnauthorized, conf.ErrUnauthorized) + } else if vars["user"] == "current" { + return authorizedUser, nil + } + + if authorizedUser.ID != vars["user"] && !authorizedUser.IsAdmin { + return respondError(http.StatusUnauthorized, conf.ErrUnauthorized) + } + + requestedUser, err := userService.GetUserById(vars["user"]) + if err != nil { + return respondError(http.StatusNotFound, "user not found") + } + return requestedUser, nil } diff --git a/routes/utils/user_utils_test.go b/routes/utils/user_utils_test.go new file mode 100644 index 0000000..ff02334 --- /dev/null +++ b/routes/utils/user_utils_test.go @@ -0,0 +1,83 @@ +package utils + +import ( + "context" + "fmt" + "github.com/gorilla/mux" + "github.com/muety/wakapi/middlewares" + "github.com/muety/wakapi/mocks" + "github.com/muety/wakapi/models" + "github.com/stretchr/testify/assert" + "net/http" + "net/http/httptest" + "testing" +) + +func TestCheckEffectiveUser_Current(t *testing.T) { + // request current as normal user -> return myself + r, w, userServiceMock := mockUserAwareRequest("current", "user1") + user, err := CheckEffectiveUser(w, r, userServiceMock, "current") + assert.Nil(t, err) + assert.Equal(t, "user1", user.ID) + userServiceMock.AssertNumberOfCalls(t, "GetUserById", 0) +} + +func TestCheckEffectiveUser_Other(t *testing.T) { + // request someone else as admin -> return someone else + r, w, userServiceMock := mockUserAwareRequest("user2", "admin") + user, err := CheckEffectiveUser(w, r, userServiceMock, "current") + assert.Nil(t, err) + assert.Equal(t, "user2", user.ID) + userServiceMock.AssertCalled(t, "GetUserById", "user2") + userServiceMock.AssertNumberOfCalls(t, "GetUserById", 1) +} + +func TestCheckEffectiveUser_FallbackUnauthorized(t *testing.T) { + // request someone else as non-admin -> error + r, w, userServiceMock := mockUserAwareRequest("user2", "user1") + user, err := CheckEffectiveUser(w, r, userServiceMock, "current") + assert.NotNil(t, err) + assert.Nil(t, user) + userServiceMock.AssertNumberOfCalls(t, "GetUserById", 0) +} + +func TestCheckEffectiveUser_FallbackEmpty(t *testing.T) { + // request none -> return myself + r, w, userServiceMock := mockUserAwareRequest("", "user1") + user, err := CheckEffectiveUser(w, r, userServiceMock, "current") + assert.Nil(t, err) + assert.Equal(t, "user1", user.ID) + userServiceMock.AssertNumberOfCalls(t, "GetUserById", 0) +} + +func TestCheckEffectiveUser_FallbackUnauthenticated(t *testing.T) { + // request anyone without authentication -> error + r, w, userServiceMock := mockUserAwareRequest("user1", "") + user, err := CheckEffectiveUser(w, r, userServiceMock, "current") + assert.NotNil(t, err) + assert.Nil(t, user) + userServiceMock.AssertNumberOfCalls(t, "GetUserById", 0) +} + +func mockUserAwareRequest(requestedUser, authorizedUser string) (*http.Request, http.ResponseWriter, *mocks.UserServiceMock) { + testUser := models.User{ + ID: authorizedUser, + IsAdmin: authorizedUser == "admin", + } + + testPrincipal := middlewares.PrincipalContainer{} + if authorizedUser != "" { + testPrincipal.SetPrincipal(&testUser) + } + + r := httptest.NewRequest("GET", fmt.Sprintf("http://localhost:3000/api/%s/data", requestedUser), nil) + r = mux.SetURLVars(r, map[string]string{"user": requestedUser}) + r = r.WithContext(context.WithValue(r.Context(), "principal", &testPrincipal)) + + userServiceMock := new(mocks.UserServiceMock) + userServiceMock.On("GetUserById", "user1").Return(&models.User{ID: "user1"}, nil) + userServiceMock.On("GetUserById", "user2").Return(&models.User{ID: "user2"}, nil) + userServiceMock.On("GetUserById", "admin").Return(&models.User{ID: "admin"}, nil) + + return r, httptest.NewRecorder(), userServiceMock +}