From a6ef735ba102c3a3b18a7d1ce5374ede6ca1aada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Fri, 3 Mar 2023 20:40:50 +0100 Subject: [PATCH] refactor: replace gorilla mux with chi --- coverage/coverage.out | 2260 +++++++++--------- go.mod | 10 +- go.sum | 217 +- main.go | 66 +- routes/api/avatar.go | 9 +- routes/api/badge.go | 9 +- routes/api/diagnostics.go | 7 +- routes/api/health.go | 7 +- routes/api/heartbeat.go | 33 +- routes/api/metrics.go | 14 +- routes/api/summary.go | 14 +- routes/compat/shields/v1/badge.go | 9 +- routes/compat/wakatime/v1/all_time.go | 13 +- routes/compat/wakatime/v1/heartbeat.go | 13 +- routes/compat/wakatime/v1/projects.go | 13 +- routes/compat/wakatime/v1/stats.go | 33 +- routes/compat/wakatime/v1/statusbar.go | 21 +- routes/compat/wakatime/v1/summaries.go | 13 +- routes/compat/wakatime/v1/test_utils_test.go | 17 + routes/compat/wakatime/v1/users.go | 13 +- routes/compat/wakatime/v1/users_test.go | 40 +- routes/handler.go | 6 +- routes/home.go | 6 +- routes/imprint.go | 6 +- routes/leaderboard.go | 13 +- routes/login.go | 25 +- routes/relay/relay.go | 10 +- routes/settings.go | 15 +- routes/subscription.go | 24 +- routes/summary.go | 21 +- routes/utils/user_utils.go | 15 +- routes/utils/user_utils_test.go | 17 +- 32 files changed, 1407 insertions(+), 1582 deletions(-) create mode 100644 routes/compat/wakatime/v1/test_utils_test.go diff --git a/coverage/coverage.out b/coverage/coverage.out index e775c51..39550bc 100644 --- a/coverage/coverage.out +++ b/coverage/coverage.out @@ -1,38 +1,4 @@ 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/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 -github.com/muety/wakapi/utils/template.go:21.37,22.30 1 0 -github.com/muety/wakapi/utils/template.go:25.2,25.10 1 0 -github.com/muety/wakapi/utils/template.go:22.30,24.3 1 0 -github.com/muety/wakapi/utils/template.go:28.83,33.16 4 0 -github.com/muety/wakapi/utils/template.go:37.2,37.29 1 0 -github.com/muety/wakapi/utils/template.go:62.2,62.23 1 0 -github.com/muety/wakapi/utils/template.go:33.16,35.3 1 0 -github.com/muety/wakapi/utils/template.go:37.29,39.51 2 0 -github.com/muety/wakapi/utils/template.go:43.3,44.17 2 0 -github.com/muety/wakapi/utils/template.go:47.3,48.17 2 0 -github.com/muety/wakapi/utils/template.go:52.3,55.17 3 0 -github.com/muety/wakapi/utils/template.go:59.3,59.27 1 0 -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/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 @@ -47,27 +13,6 @@ 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/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/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 @@ -103,6 +48,30 @@ 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/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 +github.com/muety/wakapi/utils/template.go:21.37,22.30 1 0 +github.com/muety/wakapi/utils/template.go:25.2,25.10 1 0 +github.com/muety/wakapi/utils/template.go:22.30,24.3 1 0 +github.com/muety/wakapi/utils/template.go:28.83,33.16 4 0 +github.com/muety/wakapi/utils/template.go:37.2,37.29 1 0 +github.com/muety/wakapi/utils/template.go:62.2,62.23 1 0 +github.com/muety/wakapi/utils/template.go:33.16,35.3 1 0 +github.com/muety/wakapi/utils/template.go:37.29,39.51 2 0 +github.com/muety/wakapi/utils/template.go:43.3,44.17 2 0 +github.com/muety/wakapi/utils/template.go:47.3,48.17 2 0 +github.com/muety/wakapi/utils/template.go:52.3,55.17 3 0 +github.com/muety/wakapi/utils/template.go:59.3,59.27 1 0 +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/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 @@ -136,192 +105,55 @@ 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/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 -github.com/muety/wakapi/config/db.go:47.26,50.5 1 0 -github.com/muety/wakapi/config/db.go:51.24,52.48 1 0 -github.com/muety/wakapi/config/db.go:57.53,60.25 2 1 -github.com/muety/wakapi/config/db.go:64.2,71.3 1 1 -github.com/muety/wakapi/config/db.go:60.25,62.3 1 1 -github.com/muety/wakapi/config/db.go:74.56,75.25 1 1 -github.com/muety/wakapi/config/db.go:79.2,80.16 2 1 -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/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 -github.com/muety/wakapi/config/db_opts.go:28.2,28.30 1 0 -github.com/muety/wakapi/config/db_opts.go:34.2,34.12 1 0 -github.com/muety/wakapi/config/db_opts.go:21.39,23.100 1 0 -github.com/muety/wakapi/config/db_opts.go:23.100,25.4 1 0 -github.com/muety/wakapi/config/db_opts.go:28.30,29.68 1 0 -github.com/muety/wakapi/config/db_opts.go:29.68,31.4 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 -github.com/muety/wakapi/config/sentry.go:47.79,50.2 2 0 -github.com/muety/wakapi/config/sentry.go:52.72,56.2 3 0 -github.com/muety/wakapi/config/sentry.go:58.71,62.2 3 0 -github.com/muety/wakapi/config/sentry.go:64.71,68.2 3 0 -github.com/muety/wakapi/config/sentry.go:70.72,74.2 3 0 -github.com/muety/wakapi/config/sentry.go:76.72,80.2 3 0 -github.com/muety/wakapi/config/sentry.go:82.67,87.18 4 0 -github.com/muety/wakapi/config/sentry.go:99.2,99.28 1 0 -github.com/muety/wakapi/config/sentry.go:87.18,88.65 1 0 -github.com/muety/wakapi/config/sentry.go:88.65,91.45 3 0 -github.com/muety/wakapi/config/sentry.go:94.4,95.10 2 0 -github.com/muety/wakapi/config/sentry.go:91.45,93.5 1 0 -github.com/muety/wakapi/config/sentry.go:109.50,114.91 1 0 -github.com/muety/wakapi/config/sentry.go:114.91,115.29 1 0 -github.com/muety/wakapi/config/sentry.go:119.4,122.38 3 0 -github.com/muety/wakapi/config/sentry.go:127.4,127.39 1 0 -github.com/muety/wakapi/config/sentry.go:130.4,130.69 1 0 -github.com/muety/wakapi/config/sentry.go:115.29,117.5 1 0 -github.com/muety/wakapi/config/sentry.go:122.38,123.38 1 0 -github.com/muety/wakapi/config/sentry.go:123.38,125.6 1 0 -github.com/muety/wakapi/config/sentry.go:127.39,129.5 1 0 -github.com/muety/wakapi/config/sentry.go:132.79,133.27 1 0 -github.com/muety/wakapi/config/sentry.go:140.4,140.16 1 0 -github.com/muety/wakapi/config/sentry.go:133.27,134.84 1 0 -github.com/muety/wakapi/config/sentry.go:134.84,135.45 1 0 -github.com/muety/wakapi/config/sentry.go:135.45,137.7 1 0 -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/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/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/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/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/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 -github.com/muety/wakapi/middlewares/security.go:31.2,31.27 1 0 -github.com/muety/wakapi/middlewares/security.go:26.36,27.30 1 0 -github.com/muety/wakapi/middlewares/security.go:27.30,29.4 1 0 -github.com/muety/wakapi/middlewares/sentry.go:15.60,16.43 1 0 -github.com/muety/wakapi/middlewares/sentry.go:16.43,20.3 1 0 -github.com/muety/wakapi/middlewares/sentry.go:23.78,26.54 3 0 -github.com/muety/wakapi/middlewares/sentry.go:26.54,27.43 1 0 -github.com/muety/wakapi/middlewares/sentry.go:27.43,29.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/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/routes/compat/shields/v1/badge.go:25.112,32.2 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:34.58,37.2 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:49.68,51.16 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:56.2,57.16 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:63.2,64.50 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:69.2,77.16 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:83.2,85.46 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:51.16,54.3 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:57.16,61.3 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:64.50,67.3 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:77.16,81.3 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:88.144,90.16 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:94.2,101.29 3 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:105.2,113.16 2 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:117.2,117.36 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:90.16,92.3 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:101.29,103.3 1 0 +github.com/muety/wakapi/routes/compat/shields/v1/badge.go:113.16,115.3 1 0 github.com/muety/wakapi/middlewares/authenticate.go:32.91,38.2 1 1 github.com/muety/wakapi/middlewares/authenticate.go:40.90,43.2 2 0 github.com/muety/wakapi/middlewares/authenticate.go:45.90,48.2 2 0 @@ -407,39 +239,17 @@ 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/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/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/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/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 +github.com/muety/wakapi/middlewares/security.go:31.2,31.27 1 0 +github.com/muety/wakapi/middlewares/security.go:26.36,27.30 1 0 +github.com/muety/wakapi/middlewares/security.go:27.30,29.4 1 0 +github.com/muety/wakapi/middlewares/sentry.go:15.60,16.43 1 0 +github.com/muety/wakapi/middlewares/sentry.go:16.43,20.3 1 0 +github.com/muety/wakapi/middlewares/sentry.go:23.78,26.54 3 0 +github.com/muety/wakapi/middlewares/sentry.go:26.54,27.43 1 0 +github.com/muety/wakapi/middlewares/sentry.go:27.43,29.4 1 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 @@ -453,18 +263,18 @@ 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:23.2,24.21 2 1 +github.com/muety/wakapi/routes/utils/user_utils.go:28.2,29.27 2 1 +github.com/muety/wakapi/routes/utils/user_utils.go:35.2,35.63 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:39.2,40.16 2 1 +github.com/muety/wakapi/routes/utils/user_utils.go:44.2,44.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/user_utils.go:24.21,26.3 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:29.27,31.3 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:31.8,31.35 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:31.35,33.3 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:35.63,37.3 1 1 +github.com/muety/wakapi/routes/utils/user_utils.go:40.16,42.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 @@ -495,536 +305,309 @@ 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/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 -github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:52.2,53.72 2 1 -github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:59.2,59.72 1 1 -github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:48.16,50.3 1 1 -github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:53.72,55.3 1 1 -github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:55.8,57.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:22.116,28.2 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:30.61,36.2 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:47.70,49.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:53.2,54.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:60.2,61.46 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:49.16,51.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:54.16,58.3 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:64.116,73.29 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:77.2,85.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:89.2,89.36 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:73.29,75.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:85.16,87.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:29.124,34.2 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:36.63,42.2 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:53.72,55.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:59.2,62.16 4 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:68.2,72.16 4 0 -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/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 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:70.2,71.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:77.2,78.22 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:82.2,83.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:89.2,91.69 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:97.2,98.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:104.2,107.33 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:110.2,110.35 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:113.2,113.34 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:116.2,116.29 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:119.2,119.34 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:123.2,123.49 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:66.56,68.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:71.16,75.3 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:78.22,80.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:83.16,87.3 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:91.69,95.3 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:98.16,102.3 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:107.33,109.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:110.35,112.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:113.34,115.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:116.29,118.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:119.34,121.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:126.136,135.16 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:139.2,139.36 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:135.16,137.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/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/config/config.go:184.64,186.2 1 0 +github.com/muety/wakapi/config/config.go:188.59,190.2 1 0 +github.com/muety/wakapi/config/config.go:192.82,202.2 1 0 +github.com/muety/wakapi/config/config.go:204.31,206.2 1 0 +github.com/muety/wakapi/config/config.go:208.32,210.2 1 0 +github.com/muety/wakapi/config/config.go:212.60,214.2 1 0 +github.com/muety/wakapi/config/config.go:216.59,218.2 1 0 +github.com/muety/wakapi/config/config.go:220.57,222.2 1 0 +github.com/muety/wakapi/config/config.go:224.53,226.2 1 0 +github.com/muety/wakapi/config/config.go:228.53,229.46 1 0 +github.com/muety/wakapi/config/config.go:245.2,245.51 1 0 +github.com/muety/wakapi/config/config.go:229.46,233.17 3 0 +github.com/muety/wakapi/config/config.go:237.3,238.17 2 0 +github.com/muety/wakapi/config/config.go:242.3,242.44 1 0 +github.com/muety/wakapi/config/config.go:233.17,235.4 1 0 +github.com/muety/wakapi/config/config.go:238.17,240.4 1 0 +github.com/muety/wakapi/config/config.go:248.50,249.47 1 0 +github.com/muety/wakapi/config/config.go:268.2,268.52 1 0 +github.com/muety/wakapi/config/config.go:249.47,256.17 5 0 +github.com/muety/wakapi/config/config.go:260.3,261.17 2 0 +github.com/muety/wakapi/config/config.go:265.3,265.54 1 0 +github.com/muety/wakapi/config/config.go:256.17,258.4 1 0 +github.com/muety/wakapi/config/config.go:261.17,263.4 1 0 +github.com/muety/wakapi/config/config.go:271.65,276.56 3 0 +github.com/muety/wakapi/config/config.go:298.2,298.76 1 0 +github.com/muety/wakapi/config/config.go:302.2,302.14 1 0 +github.com/muety/wakapi/config/config.go:276.56,278.33 1 0 +github.com/muety/wakapi/config/config.go:278.33,281.18 3 0 +github.com/muety/wakapi/config/config.go:285.4,286.18 2 0 +github.com/muety/wakapi/config/config.go:290.4,290.45 1 0 +github.com/muety/wakapi/config/config.go:281.18,283.5 1 0 +github.com/muety/wakapi/config/config.go:286.18,288.5 1 0 +github.com/muety/wakapi/config/config.go:292.8,293.33 1 0 +github.com/muety/wakapi/config/config.go:293.33,295.4 1 0 +github.com/muety/wakapi/config/config.go:298.76,300.3 1 0 +github.com/muety/wakapi/config/config.go:305.54,308.2 2 0 +github.com/muety/wakapi/config/config.go:310.36,312.2 1 0 +github.com/muety/wakapi/config/config.go:314.35,316.2 1 0 +github.com/muety/wakapi/config/config.go:318.38,320.2 1 0 +github.com/muety/wakapi/config/config.go:322.46,324.2 1 0 +github.com/muety/wakapi/config/config.go:326.43,328.2 1 0 +github.com/muety/wakapi/config/config.go:330.29,332.2 1 1 +github.com/muety/wakapi/config/config.go:334.48,345.16 2 0 +github.com/muety/wakapi/config/config.go:349.2,350.53 2 0 +github.com/muety/wakapi/config/config.go:354.2,354.15 1 0 +github.com/muety/wakapi/config/config.go:345.16,347.3 1 0 +github.com/muety/wakapi/config/config.go:350.53,352.3 1 0 +github.com/muety/wakapi/config/config.go:357.45,358.27 1 0 +github.com/muety/wakapi/config/config.go:361.2,361.24 1 0 +github.com/muety/wakapi/config/config.go:364.2,364.25 1 0 +github.com/muety/wakapi/config/config.go:367.2,367.15 1 0 +github.com/muety/wakapi/config/config.go:358.27,360.3 1 0 +github.com/muety/wakapi/config/config.go:361.24,363.3 1 0 +github.com/muety/wakapi/config/config.go:364.25,366.3 1 0 +github.com/muety/wakapi/config/config.go:370.26,372.2 1 0 +github.com/muety/wakapi/config/config.go:374.20,376.2 1 0 +github.com/muety/wakapi/config/config.go:378.35,383.78 3 0 +github.com/muety/wakapi/config/config.go:387.2,391.21 4 0 +github.com/muety/wakapi/config/config.go:395.2,404.52 6 0 +github.com/muety/wakapi/config/config.go:408.2,408.47 1 0 +github.com/muety/wakapi/config/config.go:414.2,414.29 1 0 +github.com/muety/wakapi/config/config.go:419.2,419.41 1 0 +github.com/muety/wakapi/config/config.go:430.2,430.108 1 0 +github.com/muety/wakapi/config/config.go:433.2,433.28 1 0 +github.com/muety/wakapi/config/config.go:436.2,436.51 1 0 +github.com/muety/wakapi/config/config.go:440.2,440.100 1 0 +github.com/muety/wakapi/config/config.go:443.2,443.74 1 0 +github.com/muety/wakapi/config/config.go:447.2,449.78 2 0 +github.com/muety/wakapi/config/config.go:452.2,452.81 1 0 +github.com/muety/wakapi/config/config.go:455.2,455.66 1 0 +github.com/muety/wakapi/config/config.go:462.2,462.55 1 0 +github.com/muety/wakapi/config/config.go:465.2,465.56 1 0 +github.com/muety/wakapi/config/config.go:468.2,468.65 1 0 +github.com/muety/wakapi/config/config.go:472.2,473.14 2 0 +github.com/muety/wakapi/config/config.go:383.78,385.3 1 0 +github.com/muety/wakapi/config/config.go:391.21,393.3 1 0 +github.com/muety/wakapi/config/config.go:404.52,406.3 1 0 +github.com/muety/wakapi/config/config.go:408.47,409.14 1 0 +github.com/muety/wakapi/config/config.go:409.14,411.4 1 0 +github.com/muety/wakapi/config/config.go:414.29,417.3 2 0 +github.com/muety/wakapi/config/config.go:419.41,421.3 1 0 +github.com/muety/wakapi/config/config.go:421.8,423.35 2 0 +github.com/muety/wakapi/config/config.go:426.3,426.37 1 0 +github.com/muety/wakapi/config/config.go:423.35,425.4 1 0 +github.com/muety/wakapi/config/config.go:430.108,432.3 1 0 +github.com/muety/wakapi/config/config.go:433.28,435.3 1 0 +github.com/muety/wakapi/config/config.go:436.51,439.3 2 0 +github.com/muety/wakapi/config/config.go:440.100,442.3 1 0 +github.com/muety/wakapi/config/config.go:443.74,445.3 1 0 +github.com/muety/wakapi/config/config.go:449.78,451.3 1 0 +github.com/muety/wakapi/config/config.go:452.81,454.3 1 0 +github.com/muety/wakapi/config/config.go:455.66,456.48 1 0 +github.com/muety/wakapi/config/config.go:456.48,458.4 1 0 +github.com/muety/wakapi/config/config.go:462.55,464.3 1 0 +github.com/muety/wakapi/config/config.go:465.56,467.3 1 0 +github.com/muety/wakapi/config/config.go:468.65,470.3 1 0 +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 +github.com/muety/wakapi/config/db_opts.go:28.2,28.30 1 0 +github.com/muety/wakapi/config/db_opts.go:34.2,34.12 1 0 +github.com/muety/wakapi/config/db_opts.go:21.39,23.100 1 0 +github.com/muety/wakapi/config/db_opts.go:23.100,25.4 1 0 +github.com/muety/wakapi/config/db_opts.go:28.30,29.68 1 0 +github.com/muety/wakapi/config/db_opts.go:29.68,31.4 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/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 +github.com/muety/wakapi/config/sentry.go:47.79,50.2 2 0 +github.com/muety/wakapi/config/sentry.go:52.72,56.2 3 0 +github.com/muety/wakapi/config/sentry.go:58.71,62.2 3 0 +github.com/muety/wakapi/config/sentry.go:64.71,68.2 3 0 +github.com/muety/wakapi/config/sentry.go:70.72,74.2 3 0 +github.com/muety/wakapi/config/sentry.go:76.72,80.2 3 0 +github.com/muety/wakapi/config/sentry.go:82.67,87.18 4 0 +github.com/muety/wakapi/config/sentry.go:99.2,99.28 1 0 +github.com/muety/wakapi/config/sentry.go:87.18,88.65 1 0 +github.com/muety/wakapi/config/sentry.go:88.65,91.45 3 0 +github.com/muety/wakapi/config/sentry.go:94.4,95.10 2 0 +github.com/muety/wakapi/config/sentry.go:91.45,93.5 1 0 +github.com/muety/wakapi/config/sentry.go:109.50,115.59 1 0 +github.com/muety/wakapi/config/sentry.go:115.59,118.38 3 0 +github.com/muety/wakapi/config/sentry.go:123.4,123.39 1 0 +github.com/muety/wakapi/config/sentry.go:126.4,126.37 1 0 +github.com/muety/wakapi/config/sentry.go:118.38,119.38 1 0 +github.com/muety/wakapi/config/sentry.go:119.38,121.6 1 0 +github.com/muety/wakapi/config/sentry.go:123.39,125.5 1 0 +github.com/muety/wakapi/config/sentry.go:128.79,129.27 1 0 +github.com/muety/wakapi/config/sentry.go:136.4,136.16 1 0 +github.com/muety/wakapi/config/sentry.go:129.27,130.84 1 0 +github.com/muety/wakapi/config/sentry.go:130.84,131.45 1 0 +github.com/muety/wakapi/config/sentry.go:131.45,133.7 1 0 +github.com/muety/wakapi/config/sentry.go:138.17,140.3 1 0 +github.com/muety/wakapi/config/sentry.go:144.43,149.51 2 0 +github.com/muety/wakapi/config/sentry.go:152.2,152.11 1 0 +github.com/muety/wakapi/config/sentry.go:149.51,151.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/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 +github.com/muety/wakapi/config/db.go:47.26,50.5 1 0 +github.com/muety/wakapi/config/db.go:51.24,52.48 1 0 +github.com/muety/wakapi/config/db.go:57.53,60.25 2 1 +github.com/muety/wakapi/config/db.go:64.2,71.3 1 1 +github.com/muety/wakapi/config/db.go:60.25,62.3 1 1 +github.com/muety/wakapi/config/db.go:74.56,75.25 1 1 +github.com/muety/wakapi/config/db.go:79.2,80.16 2 1 +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/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/routes/compat/wakatime/v1/statusbar.go:28.120,34.2 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:36.63,45.2 5 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:56.72,58.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:61.2,64.22 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:68.2,69.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:75.2,76.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:81.2,85.4 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:58.16,60.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:64.22,66.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:69.16,73.3 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:76.16,80.3 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:88.115,97.29 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:101.2,102.16 2 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:106.2,106.36 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:97.29,99.3 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:102.16,104.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:36.62,37.34 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:37.34,42.3 4 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:54.72,56.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:60.2,61.22 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:65.2,66.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:72.2,73.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:78.2,82.4 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:56.16,58.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:61.22,63.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:66.16,70.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:73.16,77.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:85.115,94.29 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:98.2,99.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:103.2,103.36 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:94.29,96.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/statusbar.go:99.16,101.3 1 0 github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:27.120,33.2 1 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:35.63,41.2 3 0 -github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:66.72,68.16 2 0 -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.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/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 -github.com/muety/wakapi/models/mail_address.go:36.2,36.11 1 1 -github.com/muety/wakapi/models/mail_address.go:30.21,31.21 1 1 -github.com/muety/wakapi/models/mail_address.go:34.3,34.18 1 1 -github.com/muety/wakapi/models/mail_address.go:31.21,33.4 1 1 -github.com/muety/wakapi/models/mail_address.go:39.35,41.2 1 1 -github.com/muety/wakapi/models/mail_address.go:43.43,45.22 2 0 -github.com/muety/wakapi/models/mail_address.go:48.2,48.12 1 0 -github.com/muety/wakapi/models/mail_address.go:45.22,47.3 1 0 -github.com/muety/wakapi/models/mail_address.go:51.46,53.22 2 1 -github.com/muety/wakapi/models/mail_address.go:56.2,56.12 1 1 -github.com/muety/wakapi/models/mail_address.go:53.22,55.3 1 1 -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/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/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 -github.com/muety/wakapi/models/leaderboard.go:37.13,39.3 1 0 -github.com/muety/wakapi/models/leaderboard.go:42.63,43.29 1 0 -github.com/muety/wakapi/models/leaderboard.go:43.29,45.3 1 0 -github.com/muety/wakapi/models/leaderboard.go:48.41,49.123 1 0 -github.com/muety/wakapi/models/leaderboard.go:49.123,51.3 1 0 -github.com/muety/wakapi/models/leaderboard.go:54.50,56.2 1 0 -github.com/muety/wakapi/models/leaderboard.go:58.65,59.95 1 0 -github.com/muety/wakapi/models/leaderboard.go:59.95,61.3 1 0 -github.com/muety/wakapi/models/leaderboard.go:64.49,72.25 3 0 -github.com/muety/wakapi/models/leaderboard.go:83.2,83.129 1 0 -github.com/muety/wakapi/models/leaderboard.go:86.2,86.67 1 0 -github.com/muety/wakapi/models/leaderboard.go:90.2,90.79 1 0 -github.com/muety/wakapi/models/leaderboard.go:72.25,73.58 1 0 -github.com/muety/wakapi/models/leaderboard.go:76.3,77.38 2 0 -github.com/muety/wakapi/models/leaderboard.go:80.3,80.40 1 0 -github.com/muety/wakapi/models/leaderboard.go:73.58,74.12 1 0 -github.com/muety/wakapi/models/leaderboard.go:77.38,79.4 1 0 -github.com/muety/wakapi/models/leaderboard.go:83.129,85.3 1 0 -github.com/muety/wakapi/models/leaderboard.go:86.67,88.3 1 0 -github.com/muety/wakapi/models/leaderboard.go:90.79,92.3 1 0 -github.com/muety/wakapi/models/leaderboard.go:95.70,96.107 1 0 -github.com/muety/wakapi/models/leaderboard.go:96.107,98.3 1 0 -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/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/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/project_label.go:14.39,16.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/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/summary.go:64.29,66.2 1 1 -github.com/muety/wakapi/models/summary.go:68.35,70.2 1 0 -github.com/muety/wakapi/models/summary.go:72.38,74.2 1 0 -github.com/muety/wakapi/models/summary.go:76.37,85.2 8 1 -github.com/muety/wakapi/models/summary.go:87.35,89.2 1 1 -github.com/muety/wakapi/models/summary.go:91.57,101.2 1 1 -github.com/muety/wakapi/models/summary.go:103.64,104.21 1 1 -github.com/muety/wakapi/models/summary.go:120.2,120.12 1 0 -github.com/muety/wakapi/models/summary.go:105.22,106.21 1 1 -github.com/muety/wakapi/models/summary.go:107.23,108.22 1 1 -github.com/muety/wakapi/models/summary.go:109.21,110.20 1 1 -github.com/muety/wakapi/models/summary.go:111.17,112.29 1 1 -github.com/muety/wakapi/models/summary.go:113.22,114.21 1 1 -github.com/muety/wakapi/models/summary.go:115.20,116.19 1 1 -github.com/muety/wakapi/models/summary.go:117.21,118.21 1 1 -github.com/muety/wakapi/models/summary.go:123.59,124.21 1 1 -github.com/muety/wakapi/models/summary.go:128.2,128.35 1 1 -github.com/muety/wakapi/models/summary.go:134.2,134.10 1 1 -github.com/muety/wakapi/models/summary.go:124.21,126.3 1 1 -github.com/muety/wakapi/models/summary.go:128.35,129.41 1 1 -github.com/muety/wakapi/models/summary.go:129.41,131.4 1 1 -github.com/muety/wakapi/models/summary.go:150.33,155.26 4 1 -github.com/muety/wakapi/models/summary.go:162.2,162.37 1 1 -github.com/muety/wakapi/models/summary.go:167.2,168.16 2 1 -github.com/muety/wakapi/models/summary.go:171.2,171.33 1 1 -github.com/muety/wakapi/models/summary.go:155.26,156.30 1 1 -github.com/muety/wakapi/models/summary.go:156.30,158.4 1 1 -github.com/muety/wakapi/models/summary.go:162.37,164.3 1 0 -github.com/muety/wakapi/models/summary.go:168.16,170.3 1 0 -github.com/muety/wakapi/models/summary.go:171.33,173.3 1 1 -github.com/muety/wakapi/models/summary.go:177.56,183.28 5 1 -github.com/muety/wakapi/models/summary.go:187.2,188.42 2 1 -github.com/muety/wakapi/models/summary.go:195.2,196.15 2 1 -github.com/muety/wakapi/models/summary.go:183.28,185.3 1 1 -github.com/muety/wakapi/models/summary.go:188.42,189.22 1 0 -github.com/muety/wakapi/models/summary.go:189.22,191.9 2 0 -github.com/muety/wakapi/models/summary.go:196.15,197.28 1 1 -github.com/muety/wakapi/models/summary.go:197.28,199.4 1 0 -github.com/muety/wakapi/models/summary.go:199.9,205.4 1 1 -github.com/muety/wakapi/models/summary.go:209.45,214.16 4 1 -github.com/muety/wakapi/models/summary.go:217.2,217.39 1 1 -github.com/muety/wakapi/models/summary.go:221.2,221.30 1 1 -github.com/muety/wakapi/models/summary.go:214.16,216.3 1 0 -github.com/muety/wakapi/models/summary.go:217.39,219.3 1 1 -github.com/muety/wakapi/models/summary.go:224.73,226.55 2 1 -github.com/muety/wakapi/models/summary.go:231.2,231.16 1 1 -github.com/muety/wakapi/models/summary.go:226.55,227.31 1 1 -github.com/muety/wakapi/models/summary.go:227.31,229.4 1 1 -github.com/muety/wakapi/models/summary.go:234.88,236.55 2 1 -github.com/muety/wakapi/models/summary.go:244.2,244.16 1 1 -github.com/muety/wakapi/models/summary.go:236.55,237.31 1 1 -github.com/muety/wakapi/models/summary.go:237.31,238.23 1 1 -github.com/muety/wakapi/models/summary.go:241.4,241.46 1 1 -github.com/muety/wakapi/models/summary.go:238.23,239.13 1 1 -github.com/muety/wakapi/models/summary.go:247.73,249.34 2 1 -github.com/muety/wakapi/models/summary.go:252.2,252.14 1 1 -github.com/muety/wakapi/models/summary.go:249.34,251.3 1 1 -github.com/muety/wakapi/models/summary.go:255.56,258.55 3 0 -github.com/muety/wakapi/models/summary.go:265.2,265.12 1 0 -github.com/muety/wakapi/models/summary.go:258.55,259.31 1 0 -github.com/muety/wakapi/models/summary.go:259.31,260.44 1 0 -github.com/muety/wakapi/models/summary.go:260.44,262.5 1 0 -github.com/muety/wakapi/models/summary.go:268.58,270.16 2 0 -github.com/muety/wakapi/models/summary.go:273.2,273.16 1 0 -github.com/muety/wakapi/models/summary.go:270.16,272.3 1 0 -github.com/muety/wakapi/models/summary.go:276.71,277.63 1 1 -github.com/muety/wakapi/models/summary.go:321.2,329.10 8 1 -github.com/muety/wakapi/models/summary.go:277.63,278.20 1 1 -github.com/muety/wakapi/models/summary.go:282.3,284.45 2 1 -github.com/muety/wakapi/models/summary.go:293.3,293.31 1 1 -github.com/muety/wakapi/models/summary.go:300.3,300.31 1 1 -github.com/muety/wakapi/models/summary.go:317.3,317.16 1 1 -github.com/muety/wakapi/models/summary.go:278.20,280.4 1 1 -github.com/muety/wakapi/models/summary.go:284.45,285.32 1 1 -github.com/muety/wakapi/models/summary.go:290.4,290.14 1 1 -github.com/muety/wakapi/models/summary.go:285.32,286.24 1 1 -github.com/muety/wakapi/models/summary.go:286.24,288.6 1 1 -github.com/muety/wakapi/models/summary.go:293.31,295.60 1 1 -github.com/muety/wakapi/models/summary.go:295.60,297.5 1 1 -github.com/muety/wakapi/models/summary.go:300.31,302.60 1 1 -github.com/muety/wakapi/models/summary.go:302.60,303.55 1 1 -github.com/muety/wakapi/models/summary.go:303.55,305.6 1 1 -github.com/muety/wakapi/models/summary.go:305.11,313.6 1 1 -github.com/muety/wakapi/models/summary.go:332.57,333.30 1 1 -github.com/muety/wakapi/models/summary.go:338.2,338.43 1 0 -github.com/muety/wakapi/models/summary.go:333.30,334.28 1 1 -github.com/muety/wakapi/models/summary.go:334.28,336.4 1 1 -github.com/muety/wakapi/models/summary.go:341.43,343.2 1 0 -github.com/muety/wakapi/models/summary.go:345.49,346.21 1 0 -github.com/muety/wakapi/models/summary.go:349.2,350.54 2 0 -github.com/muety/wakapi/models/summary.go:346.21,348.3 1 0 -github.com/muety/wakapi/models/summary.go:353.51,354.27 1 0 -github.com/muety/wakapi/models/summary.go:357.2,358.19 2 0 -github.com/muety/wakapi/models/summary.go:354.27,356.3 1 0 -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/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 -github.com/muety/wakapi/models/user.go:97.2,98.16 2 1 -github.com/muety/wakapi/models/user.go:101.2,101.11 1 1 -github.com/muety/wakapi/models/user.go:94.22,96.3 1 1 -github.com/muety/wakapi/models/user.go:98.16,100.3 1 0 -github.com/muety/wakapi/models/user.go:106.41,109.2 2 1 -github.com/muety/wakapi/models/user.go:111.53,114.54 3 0 -github.com/muety/wakapi/models/user.go:117.2,117.51 1 0 -github.com/muety/wakapi/models/user.go:120.2,120.20 1 0 -github.com/muety/wakapi/models/user.go:114.54,116.3 1 0 -github.com/muety/wakapi/models/user.go:117.51,119.3 1 0 -github.com/muety/wakapi/models/user.go:124.52,125.28 1 0 -github.com/muety/wakapi/models/user.go:128.2,128.17 1 0 -github.com/muety/wakapi/models/user.go:125.28,127.3 1 0 -github.com/muety/wakapi/models/user.go:132.45,134.2 1 1 -github.com/muety/wakapi/models/user.go:136.51,138.2 1 1 -github.com/muety/wakapi/models/user.go:144.65,146.32 2 0 -github.com/muety/wakapi/models/user.go:149.2,149.30 1 0 -github.com/muety/wakapi/models/user.go:152.2,153.24 2 0 -github.com/muety/wakapi/models/user.go:146.32,148.3 1 0 -github.com/muety/wakapi/models/user.go:149.30,151.3 1 0 -github.com/muety/wakapi/models/user.go:156.39,158.55 2 1 -github.com/muety/wakapi/models/user.go:162.2,162.51 1 1 -github.com/muety/wakapi/models/user.go:158.55,160.3 1 1 -github.com/muety/wakapi/models/user.go:165.43,168.2 1 0 -github.com/muety/wakapi/models/user.go:170.45,173.2 1 0 -github.com/muety/wakapi/models/user.go:175.33,180.2 1 0 -github.com/muety/wakapi/models/user.go:182.41,184.2 1 0 -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/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/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/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/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/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/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/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/routes/compat/wakatime/v1/summaries.go:35.62,36.34 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:36.34,39.3 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:65.72,67.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:71.2,72.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:78.2,79.46 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:67.16,69.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:72.16,76.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:82.114,87.19 4 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:93.2,94.22 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:123.2,137.37 6 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:148.2,148.38 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:87.19,88.56 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:88.56,90.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:94.22,96.98 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:96.98,98.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:98.9,100.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:101.8,101.130 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:101.130,104.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:104.8,109.17 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:113.3,114.17 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:109.17,111.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:114.17,116.4 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:137.37,139.17 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:143.3,145.25 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/summaries.go:139.17,141.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.58,30.34 1 1 +github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:30.34,33.3 2 1 +github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:45.68,47.16 2 1 +github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:51.2,52.72 2 1 +github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:58.2,58.72 1 1 +github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:47.16,49.3 1 1 +github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:52.72,54.3 1 1 +github.com/muety/wakapi/routes/compat/wakatime/v1/users.go:54.8,56.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:22.116,28.2 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:30.60,31.34 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:31.34,34.3 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:46.70,48.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:52.2,53.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:59.2,60.46 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:48.16,50.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:53.16,57.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:63.116,72.29 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:76.2,84.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:88.2,88.36 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:72.29,74.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/all_time.go:84.16,86.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:29.124,34.2 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:36.62,37.34 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:37.34,40.3 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:52.72,54.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:58.2,61.16 4 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:67.2,71.16 4 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:78.2,84.47 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:54.16,56.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:61.16,65.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/heartbeat.go:71.16,76.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.61,32.34 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:32.34,35.3 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:48.71,50.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:54.2,55.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:62.2,65.28 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:71.2,72.46 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:50.16,52.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:55.16,60.3 4 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:65.28,66.30 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/projects.go:66.30,68.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.58,31.34 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:31.34,41.3 5 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:62.68,68.53 5 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:72.2,73.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:79.2,79.22 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:83.2,84.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:90.2,92.69 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:98.2,99.16 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:105.2,108.33 2 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:111.2,111.35 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:114.2,114.34 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:117.2,117.29 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:120.2,120.34 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:124.2,124.49 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:68.53,70.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:73.16,77.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:79.22,81.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:84.16,88.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:92.69,96.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:99.16,103.3 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:108.33,110.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:111.35,113.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:114.34,116.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:117.29,119.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:120.34,122.3 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:127.136,136.16 3 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:140.2,140.36 1 0 +github.com/muety/wakapi/routes/compat/wakatime/v1/stats.go:136.16,138.3 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 @@ -1075,25 +658,209 @@ 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/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 -github.com/muety/wakapi/services/housekeeping.go:62.2,62.16 1 0 -github.com/muety/wakapi/services/housekeeping.go:32.43,34.3 1 0 -github.com/muety/wakapi/services/housekeeping.go:38.47,41.17 2 0 -github.com/muety/wakapi/services/housekeeping.go:47.3,47.27 1 0 -github.com/muety/wakapi/services/housekeeping.go:41.17,44.4 2 0 -github.com/muety/wakapi/services/housekeeping.go:47.27,49.31 1 0 -github.com/muety/wakapi/services/housekeeping.go:53.4,54.35 2 0 -github.com/muety/wakapi/services/housekeeping.go:49.31,50.13 1 0 -github.com/muety/wakapi/services/housekeeping.go:54.35,55.75 1 0 -github.com/muety/wakapi/services/housekeeping.go:55.75,57.6 1 0 -github.com/muety/wakapi/services/housekeeping.go:62.16,64.3 1 0 -github.com/muety/wakapi/services/housekeeping.go:67.94,71.73 2 0 -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/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/heartbeat.go:26.141,40.33 3 0 +github.com/muety/wakapi/services/heartbeat.go:48.2,48.12 1 0 +github.com/muety/wakapi/services/heartbeat.go:40.33,41.31 1 0 +github.com/muety/wakapi/services/heartbeat.go:41.31,45.4 3 0 +github.com/muety/wakapi/services/heartbeat.go:51.72,54.2 2 0 +github.com/muety/wakapi/services/heartbeat.go:56.80,57.26 1 0 +github.com/muety/wakapi/services/heartbeat.go:61.2,65.32 3 0 +github.com/muety/wakapi/services/heartbeat.go:73.2,74.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:77.2,77.12 1 0 +github.com/muety/wakapi/services/heartbeat.go:57.26,59.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:65.32,66.31 1 0 +github.com/muety/wakapi/services/heartbeat.go:70.3,70.46 1 0 +github.com/muety/wakapi/services/heartbeat.go:66.31,69.4 2 0 +github.com/muety/wakapi/services/heartbeat.go:74.16,76.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:80.69,82.8 2 0 +github.com/muety/wakapi/services/heartbeat.go:85.2,86.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:89.2,89.19 1 0 +github.com/muety/wakapi/services/heartbeat.go:82.8,84.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:86.16,88.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:92.76,95.8 3 0 +github.com/muety/wakapi/services/heartbeat.go:98.2,99.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:102.2,102.19 1 0 +github.com/muety/wakapi/services/heartbeat.go:95.8,97.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:99.16,101.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:105.96,109.26 3 0 +github.com/muety/wakapi/services/heartbeat.go:119.2,120.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:124.2,124.28 1 0 +github.com/muety/wakapi/services/heartbeat.go:130.2,130.24 1 0 +github.com/muety/wakapi/services/heartbeat.go:109.26,112.9 3 0 +github.com/muety/wakapi/services/heartbeat.go:112.9,114.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:114.9,116.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:120.16,122.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:124.28,128.3 3 0 +github.com/muety/wakapi/services/heartbeat.go:133.111,135.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:138.2,138.43 1 0 +github.com/muety/wakapi/services/heartbeat.go:135.16,137.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:141.145,143.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:146.2,146.43 1 0 +github.com/muety/wakapi/services/heartbeat.go:143.16,145.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:149.92,151.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:153.116,155.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:157.78,159.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:161.104,163.54 2 0 +github.com/muety/wakapi/services/heartbeat.go:169.2,170.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:174.2,175.28 2 0 +github.com/muety/wakapi/services/heartbeat.go:181.2,182.22 2 0 +github.com/muety/wakapi/services/heartbeat.go:163.54,167.3 3 0 +github.com/muety/wakapi/services/heartbeat.go:170.16,172.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:175.28,176.33 1 0 +github.com/muety/wakapi/services/heartbeat.go:176.33,178.4 1 0 +github.com/muety/wakapi/services/heartbeat.go:185.62,188.2 2 0 +github.com/muety/wakapi/services/heartbeat.go:190.68,193.2 2 0 +github.com/muety/wakapi/services/heartbeat.go:195.87,198.2 2 0 +github.com/muety/wakapi/services/heartbeat.go:200.116,202.16 2 0 +github.com/muety/wakapi/services/heartbeat.go:206.2,206.28 1 0 +github.com/muety/wakapi/services/heartbeat.go:210.2,210.24 1 0 +github.com/muety/wakapi/services/heartbeat.go:202.16,204.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:206.28,208.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:213.96,215.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:217.107,219.55 2 0 +github.com/muety/wakapi/services/heartbeat.go:219.55,225.36 4 0 +github.com/muety/wakapi/services/heartbeat.go:225.36,230.4 2 0 +github.com/muety/wakapi/services/heartbeat.go:234.85,241.2 6 0 +github.com/muety/wakapi/services/heartbeat.go:243.74,244.32 1 0 +github.com/muety/wakapi/services/heartbeat.go:244.32,249.3 1 0 +github.com/muety/wakapi/services/heartbeat.go:252.72,254.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:256.58,258.2 1 0 +github.com/muety/wakapi/services/heartbeat.go:260.60,262.2 1 0 +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/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 @@ -1173,69 +940,187 @@ 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/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/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/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/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 +github.com/muety/wakapi/services/misc.go:69.2,69.128 1 0 +github.com/muety/wakapi/services/misc.go:77.2,77.33 1 0 +github.com/muety/wakapi/services/misc.go:82.2,82.33 1 0 +github.com/muety/wakapi/services/misc.go:87.2,87.170 1 0 +github.com/muety/wakapi/services/misc.go:60.95,62.3 1 0 +github.com/muety/wakapi/services/misc.go:65.111,67.3 1 0 +github.com/muety/wakapi/services/misc.go:69.128,71.125 2 0 +github.com/muety/wakapi/services/misc.go:71.125,73.4 1 0 +github.com/muety/wakapi/services/misc.go:77.33,78.71 1 0 +github.com/muety/wakapi/services/misc.go:78.71,80.4 1 0 +github.com/muety/wakapi/services/misc.go:82.33,83.80 1 0 +github.com/muety/wakapi/services/misc.go:83.80,85.4 1 0 +github.com/muety/wakapi/services/misc.go:87.170,88.83 1 0 +github.com/muety/wakapi/services/misc.go:88.83,90.4 1 0 +github.com/muety/wakapi/services/misc.go:94.42,96.36 2 0 +github.com/muety/wakapi/services/misc.go:99.2,102.16 3 0 +github.com/muety/wakapi/services/misc.go:107.2,111.26 4 0 +github.com/muety/wakapi/services/misc.go:123.2,123.30 1 0 +github.com/muety/wakapi/services/misc.go:96.36,98.3 1 0 +github.com/muety/wakapi/services/misc.go:102.16,105.3 2 0 +github.com/muety/wakapi/services/misc.go:111.26,113.46 2 0 +github.com/muety/wakapi/services/misc.go:113.46,116.4 2 0 +github.com/muety/wakapi/services/misc.go:116.18,119.4 2 0 +github.com/muety/wakapi/services/misc.go:123.30,124.58 1 0 +github.com/muety/wakapi/services/misc.go:124.58,128.19 1 0 +github.com/muety/wakapi/services/misc.go:132.4,135.19 1 0 +github.com/muety/wakapi/services/misc.go:128.19,130.5 1 0 +github.com/muety/wakapi/services/misc.go:135.19,137.5 1 0 +github.com/muety/wakapi/services/misc.go:138.9,140.4 1 0 +github.com/muety/wakapi/services/misc.go:144.51,147.45 2 0 +github.com/muety/wakapi/services/misc.go:147.45,148.41 1 0 +github.com/muety/wakapi/services/misc.go:152.3,155.17 3 0 +github.com/muety/wakapi/services/misc.go:160.3,160.33 1 0 +github.com/muety/wakapi/services/misc.go:148.41,151.4 2 0 +github.com/muety/wakapi/services/misc.go:155.17,158.4 2 0 +github.com/muety/wakapi/services/misc.go:160.33,161.31 1 0 +github.com/muety/wakapi/services/misc.go:165.4,169.19 2 0 +github.com/muety/wakapi/services/misc.go:161.31,162.13 1 0 +github.com/muety/wakapi/services/misc.go:169.19,171.5 1 0 +github.com/muety/wakapi/services/misc.go:173.17,175.3 1 0 +github.com/muety/wakapi/services/misc.go:186.54,187.82 1 0 +github.com/muety/wakapi/services/misc.go:191.2,195.16 4 0 +github.com/muety/wakapi/services/misc.go:200.2,201.104 2 0 +github.com/muety/wakapi/services/misc.go:210.2,210.26 1 0 +github.com/muety/wakapi/services/misc.go:187.82,189.3 1 0 +github.com/muety/wakapi/services/misc.go:195.16,198.3 2 0 +github.com/muety/wakapi/services/misc.go:201.104,202.122 1 0 +github.com/muety/wakapi/services/misc.go:202.122,204.4 1 0 +github.com/muety/wakapi/services/misc.go:205.8,208.3 2 0 +github.com/muety/wakapi/services/misc.go:210.26,211.49 1 0 +github.com/muety/wakapi/services/misc.go:215.3,216.65 2 0 +github.com/muety/wakapi/services/misc.go:230.3,230.137 1 0 +github.com/muety/wakapi/services/misc.go:234.3,235.89 2 0 +github.com/muety/wakapi/services/misc.go:211.49,213.4 1 0 +github.com/muety/wakapi/services/misc.go:216.65,218.130 1 0 +github.com/muety/wakapi/services/misc.go:218.130,220.5 1 0 +github.com/muety/wakapi/services/misc.go:220.10,220.25 1 0 +github.com/muety/wakapi/services/misc.go:220.25,223.5 2 0 +github.com/muety/wakapi/services/misc.go:230.137,231.12 1 0 +github.com/muety/wakapi/services/misc.go:235.89,237.4 1 0 +github.com/muety/wakapi/services/misc.go:241.73,243.16 2 0 +github.com/muety/wakapi/services/misc.go:247.2,247.27 1 0 +github.com/muety/wakapi/services/misc.go:243.16,246.3 2 0 +github.com/muety/wakapi/services/misc.go:250.99,252.33 2 0 +github.com/muety/wakapi/services/misc.go:252.33,256.86 3 0 +github.com/muety/wakapi/services/misc.go:261.3,264.18 1 0 +github.com/muety/wakapi/services/misc.go:256.86,259.4 2 0 +github.com/muety/wakapi/services/misc.go:264.18,266.4 1 0 +github.com/muety/wakapi/services/misc.go:270.53,273.2 2 0 +github.com/muety/wakapi/services/misc.go:275.53,278.2 2 0 +github.com/muety/wakapi/services/misc.go:280.64,283.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/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 +github.com/muety/wakapi/services/housekeeping.go:62.2,62.16 1 0 +github.com/muety/wakapi/services/housekeeping.go:32.43,34.3 1 0 +github.com/muety/wakapi/services/housekeeping.go:38.47,41.17 2 0 +github.com/muety/wakapi/services/housekeeping.go:47.3,47.27 1 0 +github.com/muety/wakapi/services/housekeeping.go:41.17,44.4 2 0 +github.com/muety/wakapi/services/housekeeping.go:47.27,49.31 1 0 +github.com/muety/wakapi/services/housekeeping.go:53.4,54.35 2 0 +github.com/muety/wakapi/services/housekeeping.go:49.31,50.13 1 0 +github.com/muety/wakapi/services/housekeeping.go:54.35,55.75 1 0 +github.com/muety/wakapi/services/housekeeping.go:55.75,57.6 1 0 +github.com/muety/wakapi/services/housekeeping.go:62.16,64.3 1 0 +github.com/muety/wakapi/services/housekeeping.go:67.94,69.36 2 0 +github.com/muety/wakapi/services/housekeeping.go:75.2,75.73 1 0 +github.com/muety/wakapi/services/housekeeping.go:80.2,81.74 2 0 +github.com/muety/wakapi/services/housekeeping.go:85.2,85.12 1 0 +github.com/muety/wakapi/services/housekeeping.go:69.36,72.3 2 0 +github.com/muety/wakapi/services/housekeeping.go:75.73,77.3 1 0 +github.com/muety/wakapi/services/housekeeping.go:81.74,83.3 1 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 @@ -1365,232 +1250,359 @@ github.com/muety/wakapi/services/summary.go:474.3,474.24 1 1 github.com/muety/wakapi/services/summary.go:465.17,466.33 1 1 github.com/muety/wakapi/services/summary.go:466.33,468.5 1 1 github.com/muety/wakapi/services/summary.go:471.28,473.4 1 1 -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/heartbeat.go:26.141,40.33 3 0 -github.com/muety/wakapi/services/heartbeat.go:48.2,48.12 1 0 -github.com/muety/wakapi/services/heartbeat.go:40.33,41.31 1 0 -github.com/muety/wakapi/services/heartbeat.go:41.31,45.4 3 0 -github.com/muety/wakapi/services/heartbeat.go:51.72,54.2 2 0 -github.com/muety/wakapi/services/heartbeat.go:56.80,57.26 1 0 -github.com/muety/wakapi/services/heartbeat.go:61.2,65.32 3 0 -github.com/muety/wakapi/services/heartbeat.go:73.2,74.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:77.2,77.12 1 0 -github.com/muety/wakapi/services/heartbeat.go:57.26,59.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:65.32,66.31 1 0 -github.com/muety/wakapi/services/heartbeat.go:70.3,70.46 1 0 -github.com/muety/wakapi/services/heartbeat.go:66.31,69.4 2 0 -github.com/muety/wakapi/services/heartbeat.go:74.16,76.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:80.69,82.8 2 0 -github.com/muety/wakapi/services/heartbeat.go:85.2,86.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:89.2,89.19 1 0 -github.com/muety/wakapi/services/heartbeat.go:82.8,84.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:86.16,88.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:92.76,95.8 3 0 -github.com/muety/wakapi/services/heartbeat.go:98.2,99.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:102.2,102.19 1 0 -github.com/muety/wakapi/services/heartbeat.go:95.8,97.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:99.16,101.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:105.96,109.26 3 0 -github.com/muety/wakapi/services/heartbeat.go:119.2,120.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:124.2,124.28 1 0 -github.com/muety/wakapi/services/heartbeat.go:130.2,130.24 1 0 -github.com/muety/wakapi/services/heartbeat.go:109.26,112.9 3 0 -github.com/muety/wakapi/services/heartbeat.go:112.9,114.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:114.9,116.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:120.16,122.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:124.28,128.3 3 0 -github.com/muety/wakapi/services/heartbeat.go:133.111,135.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:138.2,138.43 1 0 -github.com/muety/wakapi/services/heartbeat.go:135.16,137.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:141.145,143.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:146.2,146.43 1 0 -github.com/muety/wakapi/services/heartbeat.go:143.16,145.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:149.92,151.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:153.116,155.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:157.78,159.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:161.104,163.54 2 0 -github.com/muety/wakapi/services/heartbeat.go:169.2,170.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:174.2,175.28 2 0 -github.com/muety/wakapi/services/heartbeat.go:181.2,182.22 2 0 -github.com/muety/wakapi/services/heartbeat.go:163.54,167.3 3 0 -github.com/muety/wakapi/services/heartbeat.go:170.16,172.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:175.28,176.33 1 0 -github.com/muety/wakapi/services/heartbeat.go:176.33,178.4 1 0 -github.com/muety/wakapi/services/heartbeat.go:185.62,188.2 2 0 -github.com/muety/wakapi/services/heartbeat.go:190.68,193.2 2 0 -github.com/muety/wakapi/services/heartbeat.go:195.87,198.2 2 0 -github.com/muety/wakapi/services/heartbeat.go:200.116,202.16 2 0 -github.com/muety/wakapi/services/heartbeat.go:206.2,206.28 1 0 -github.com/muety/wakapi/services/heartbeat.go:210.2,210.24 1 0 -github.com/muety/wakapi/services/heartbeat.go:202.16,204.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:206.28,208.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:213.96,215.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:217.107,219.55 2 0 -github.com/muety/wakapi/services/heartbeat.go:219.55,225.36 4 0 -github.com/muety/wakapi/services/heartbeat.go:225.36,230.4 2 0 -github.com/muety/wakapi/services/heartbeat.go:234.85,241.2 6 0 -github.com/muety/wakapi/services/heartbeat.go:243.74,244.32 1 0 -github.com/muety/wakapi/services/heartbeat.go:244.32,249.3 1 0 -github.com/muety/wakapi/services/heartbeat.go:252.72,254.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:256.58,258.2 1 0 -github.com/muety/wakapi/services/heartbeat.go:260.60,262.2 1 0 -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/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 -github.com/muety/wakapi/services/misc.go:69.2,69.128 1 0 -github.com/muety/wakapi/services/misc.go:77.2,77.33 1 0 -github.com/muety/wakapi/services/misc.go:82.2,82.33 1 0 -github.com/muety/wakapi/services/misc.go:87.2,87.170 1 0 -github.com/muety/wakapi/services/misc.go:60.95,62.3 1 0 -github.com/muety/wakapi/services/misc.go:65.111,67.3 1 0 -github.com/muety/wakapi/services/misc.go:69.128,71.125 2 0 -github.com/muety/wakapi/services/misc.go:71.125,73.4 1 0 -github.com/muety/wakapi/services/misc.go:77.33,78.71 1 0 -github.com/muety/wakapi/services/misc.go:78.71,80.4 1 0 -github.com/muety/wakapi/services/misc.go:82.33,83.80 1 0 -github.com/muety/wakapi/services/misc.go:83.80,85.4 1 0 -github.com/muety/wakapi/services/misc.go:87.170,88.83 1 0 -github.com/muety/wakapi/services/misc.go:88.83,90.4 1 0 -github.com/muety/wakapi/services/misc.go:94.42,96.36 2 0 -github.com/muety/wakapi/services/misc.go:99.2,102.16 3 0 -github.com/muety/wakapi/services/misc.go:107.2,111.26 4 0 -github.com/muety/wakapi/services/misc.go:123.2,123.30 1 0 -github.com/muety/wakapi/services/misc.go:96.36,98.3 1 0 -github.com/muety/wakapi/services/misc.go:102.16,105.3 2 0 -github.com/muety/wakapi/services/misc.go:111.26,113.46 2 0 -github.com/muety/wakapi/services/misc.go:113.46,116.4 2 0 -github.com/muety/wakapi/services/misc.go:116.18,119.4 2 0 -github.com/muety/wakapi/services/misc.go:123.30,124.58 1 0 -github.com/muety/wakapi/services/misc.go:124.58,128.19 1 0 -github.com/muety/wakapi/services/misc.go:132.4,135.19 1 0 -github.com/muety/wakapi/services/misc.go:128.19,130.5 1 0 -github.com/muety/wakapi/services/misc.go:135.19,137.5 1 0 -github.com/muety/wakapi/services/misc.go:138.9,140.4 1 0 -github.com/muety/wakapi/services/misc.go:144.51,147.45 2 0 -github.com/muety/wakapi/services/misc.go:147.45,148.41 1 0 -github.com/muety/wakapi/services/misc.go:152.3,155.17 3 0 -github.com/muety/wakapi/services/misc.go:160.3,160.33 1 0 -github.com/muety/wakapi/services/misc.go:148.41,151.4 2 0 -github.com/muety/wakapi/services/misc.go:155.17,158.4 2 0 -github.com/muety/wakapi/services/misc.go:160.33,161.31 1 0 -github.com/muety/wakapi/services/misc.go:165.4,169.19 2 0 -github.com/muety/wakapi/services/misc.go:161.31,162.13 1 0 -github.com/muety/wakapi/services/misc.go:169.19,171.5 1 0 -github.com/muety/wakapi/services/misc.go:173.17,175.3 1 0 -github.com/muety/wakapi/services/misc.go:185.54,186.82 1 0 -github.com/muety/wakapi/services/misc.go:190.2,193.16 3 0 -github.com/muety/wakapi/services/misc.go:198.2,199.104 2 0 -github.com/muety/wakapi/services/misc.go:208.2,208.26 1 0 -github.com/muety/wakapi/services/misc.go:186.82,188.3 1 0 -github.com/muety/wakapi/services/misc.go:193.16,196.3 2 0 -github.com/muety/wakapi/services/misc.go:199.104,200.122 1 0 -github.com/muety/wakapi/services/misc.go:200.122,202.4 1 0 -github.com/muety/wakapi/services/misc.go:203.8,206.3 2 0 -github.com/muety/wakapi/services/misc.go:208.26,209.49 1 0 -github.com/muety/wakapi/services/misc.go:216.3,216.92 1 0 -github.com/muety/wakapi/services/misc.go:220.3,221.89 2 0 -github.com/muety/wakapi/services/misc.go:209.49,211.4 1 0 -github.com/muety/wakapi/services/misc.go:216.92,217.12 1 0 -github.com/muety/wakapi/services/misc.go:221.89,223.4 1 0 -github.com/muety/wakapi/services/misc.go:227.73,229.16 2 0 -github.com/muety/wakapi/services/misc.go:233.2,233.27 1 0 -github.com/muety/wakapi/services/misc.go:229.16,232.3 2 0 -github.com/muety/wakapi/services/misc.go:236.99,238.33 2 0 -github.com/muety/wakapi/services/misc.go:238.33,242.86 3 0 -github.com/muety/wakapi/services/misc.go:247.3,250.18 1 0 -github.com/muety/wakapi/services/misc.go:242.86,245.4 2 0 -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/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/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 +github.com/muety/wakapi/models/leaderboard.go:37.13,39.3 1 0 +github.com/muety/wakapi/models/leaderboard.go:42.63,43.29 1 0 +github.com/muety/wakapi/models/leaderboard.go:43.29,45.3 1 0 +github.com/muety/wakapi/models/leaderboard.go:48.41,49.123 1 0 +github.com/muety/wakapi/models/leaderboard.go:49.123,51.3 1 0 +github.com/muety/wakapi/models/leaderboard.go:54.50,56.2 1 0 +github.com/muety/wakapi/models/leaderboard.go:58.65,59.95 1 0 +github.com/muety/wakapi/models/leaderboard.go:59.95,61.3 1 0 +github.com/muety/wakapi/models/leaderboard.go:64.49,72.25 3 0 +github.com/muety/wakapi/models/leaderboard.go:83.2,83.129 1 0 +github.com/muety/wakapi/models/leaderboard.go:86.2,86.67 1 0 +github.com/muety/wakapi/models/leaderboard.go:90.2,90.79 1 0 +github.com/muety/wakapi/models/leaderboard.go:72.25,73.58 1 0 +github.com/muety/wakapi/models/leaderboard.go:76.3,77.38 2 0 +github.com/muety/wakapi/models/leaderboard.go:80.3,80.40 1 0 +github.com/muety/wakapi/models/leaderboard.go:73.58,74.12 1 0 +github.com/muety/wakapi/models/leaderboard.go:77.38,79.4 1 0 +github.com/muety/wakapi/models/leaderboard.go:83.129,85.3 1 0 +github.com/muety/wakapi/models/leaderboard.go:86.67,88.3 1 0 +github.com/muety/wakapi/models/leaderboard.go:90.79,92.3 1 0 +github.com/muety/wakapi/models/leaderboard.go:95.70,96.107 1 0 +github.com/muety/wakapi/models/leaderboard.go:96.107,98.3 1 0 +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/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 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/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/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/project_label.go:14.39,16.2 1 0 +github.com/muety/wakapi/models/models.go:3.14,5.2 0 1 +github.com/muety/wakapi/models/user.go:13.13,15.2 1 1 +github.com/muety/wakapi/models/user.go:90.34,92.2 1 0 +github.com/muety/wakapi/models/user.go:94.36,95.22 1 1 +github.com/muety/wakapi/models/user.go:98.2,99.16 2 1 +github.com/muety/wakapi/models/user.go:102.2,102.11 1 1 +github.com/muety/wakapi/models/user.go:95.22,97.3 1 1 +github.com/muety/wakapi/models/user.go:99.16,101.3 1 0 +github.com/muety/wakapi/models/user.go:107.41,110.2 2 1 +github.com/muety/wakapi/models/user.go:112.53,115.54 3 0 +github.com/muety/wakapi/models/user.go:118.2,118.51 1 0 +github.com/muety/wakapi/models/user.go:121.2,121.20 1 0 +github.com/muety/wakapi/models/user.go:115.54,117.3 1 0 +github.com/muety/wakapi/models/user.go:118.51,120.3 1 0 +github.com/muety/wakapi/models/user.go:125.52,126.28 1 0 +github.com/muety/wakapi/models/user.go:129.2,129.17 1 0 +github.com/muety/wakapi/models/user.go:126.28,128.3 1 0 +github.com/muety/wakapi/models/user.go:133.45,135.2 1 1 +github.com/muety/wakapi/models/user.go:137.51,139.2 1 1 +github.com/muety/wakapi/models/user.go:145.65,147.32 2 0 +github.com/muety/wakapi/models/user.go:150.2,150.30 1 0 +github.com/muety/wakapi/models/user.go:153.2,154.24 2 0 +github.com/muety/wakapi/models/user.go:147.32,149.3 1 0 +github.com/muety/wakapi/models/user.go:150.30,152.3 1 0 +github.com/muety/wakapi/models/user.go:157.39,159.55 2 1 +github.com/muety/wakapi/models/user.go:163.2,163.51 1 1 +github.com/muety/wakapi/models/user.go:159.55,161.3 1 1 +github.com/muety/wakapi/models/user.go:166.43,169.2 1 0 +github.com/muety/wakapi/models/user.go:171.45,174.2 1 0 +github.com/muety/wakapi/models/user.go:176.33,181.2 1 0 +github.com/muety/wakapi/models/user.go:183.41,185.2 1 0 +github.com/muety/wakapi/models/user.go:187.45,189.2 1 0 +github.com/muety/wakapi/models/user.go:191.45,193.2 1 0 +github.com/muety/wakapi/models/user.go:196.39,198.2 1 0 +github.com/muety/wakapi/models/user.go:200.39,203.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/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/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/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_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 +github.com/muety/wakapi/models/mail_address.go:36.2,36.11 1 1 +github.com/muety/wakapi/models/mail_address.go:30.21,31.21 1 1 +github.com/muety/wakapi/models/mail_address.go:34.3,34.18 1 1 +github.com/muety/wakapi/models/mail_address.go:31.21,33.4 1 1 +github.com/muety/wakapi/models/mail_address.go:39.35,41.2 1 1 +github.com/muety/wakapi/models/mail_address.go:43.43,45.22 2 0 +github.com/muety/wakapi/models/mail_address.go:48.2,48.12 1 0 +github.com/muety/wakapi/models/mail_address.go:45.22,47.3 1 0 +github.com/muety/wakapi/models/mail_address.go:51.46,53.22 2 1 +github.com/muety/wakapi/models/mail_address.go:56.2,56.12 1 1 +github.com/muety/wakapi/models/mail_address.go:53.22,55.3 1 1 +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/summary.go:64.29,66.2 1 1 +github.com/muety/wakapi/models/summary.go:68.35,70.2 1 0 +github.com/muety/wakapi/models/summary.go:72.38,74.2 1 0 +github.com/muety/wakapi/models/summary.go:76.37,85.2 8 1 +github.com/muety/wakapi/models/summary.go:87.35,89.2 1 1 +github.com/muety/wakapi/models/summary.go:91.57,101.2 1 1 +github.com/muety/wakapi/models/summary.go:103.64,104.21 1 1 +github.com/muety/wakapi/models/summary.go:120.2,120.12 1 0 +github.com/muety/wakapi/models/summary.go:105.22,106.21 1 1 +github.com/muety/wakapi/models/summary.go:107.23,108.22 1 1 +github.com/muety/wakapi/models/summary.go:109.21,110.20 1 1 +github.com/muety/wakapi/models/summary.go:111.17,112.29 1 1 +github.com/muety/wakapi/models/summary.go:113.22,114.21 1 1 +github.com/muety/wakapi/models/summary.go:115.20,116.19 1 1 +github.com/muety/wakapi/models/summary.go:117.21,118.21 1 1 +github.com/muety/wakapi/models/summary.go:123.59,124.21 1 1 +github.com/muety/wakapi/models/summary.go:128.2,128.35 1 1 +github.com/muety/wakapi/models/summary.go:134.2,134.10 1 1 +github.com/muety/wakapi/models/summary.go:124.21,126.3 1 1 +github.com/muety/wakapi/models/summary.go:128.35,129.41 1 1 +github.com/muety/wakapi/models/summary.go:129.41,131.4 1 1 +github.com/muety/wakapi/models/summary.go:150.33,155.26 4 1 +github.com/muety/wakapi/models/summary.go:162.2,162.37 1 1 +github.com/muety/wakapi/models/summary.go:167.2,168.16 2 1 +github.com/muety/wakapi/models/summary.go:171.2,171.33 1 1 +github.com/muety/wakapi/models/summary.go:155.26,156.30 1 1 +github.com/muety/wakapi/models/summary.go:156.30,158.4 1 1 +github.com/muety/wakapi/models/summary.go:162.37,164.3 1 0 +github.com/muety/wakapi/models/summary.go:168.16,170.3 1 0 +github.com/muety/wakapi/models/summary.go:171.33,173.3 1 1 +github.com/muety/wakapi/models/summary.go:177.56,183.28 5 1 +github.com/muety/wakapi/models/summary.go:187.2,188.42 2 1 +github.com/muety/wakapi/models/summary.go:195.2,196.15 2 1 +github.com/muety/wakapi/models/summary.go:183.28,185.3 1 1 +github.com/muety/wakapi/models/summary.go:188.42,189.22 1 0 +github.com/muety/wakapi/models/summary.go:189.22,191.9 2 0 +github.com/muety/wakapi/models/summary.go:196.15,197.28 1 1 +github.com/muety/wakapi/models/summary.go:197.28,199.4 1 0 +github.com/muety/wakapi/models/summary.go:199.9,205.4 1 1 +github.com/muety/wakapi/models/summary.go:209.45,214.16 4 1 +github.com/muety/wakapi/models/summary.go:217.2,217.39 1 1 +github.com/muety/wakapi/models/summary.go:221.2,221.30 1 1 +github.com/muety/wakapi/models/summary.go:214.16,216.3 1 0 +github.com/muety/wakapi/models/summary.go:217.39,219.3 1 1 +github.com/muety/wakapi/models/summary.go:224.73,226.55 2 1 +github.com/muety/wakapi/models/summary.go:231.2,231.16 1 1 +github.com/muety/wakapi/models/summary.go:226.55,227.31 1 1 +github.com/muety/wakapi/models/summary.go:227.31,229.4 1 1 +github.com/muety/wakapi/models/summary.go:234.88,236.55 2 1 +github.com/muety/wakapi/models/summary.go:244.2,244.16 1 1 +github.com/muety/wakapi/models/summary.go:236.55,237.31 1 1 +github.com/muety/wakapi/models/summary.go:237.31,238.23 1 1 +github.com/muety/wakapi/models/summary.go:241.4,241.46 1 1 +github.com/muety/wakapi/models/summary.go:238.23,239.13 1 1 +github.com/muety/wakapi/models/summary.go:247.73,249.34 2 1 +github.com/muety/wakapi/models/summary.go:252.2,252.14 1 1 +github.com/muety/wakapi/models/summary.go:249.34,251.3 1 1 +github.com/muety/wakapi/models/summary.go:255.56,258.55 3 0 +github.com/muety/wakapi/models/summary.go:265.2,265.12 1 0 +github.com/muety/wakapi/models/summary.go:258.55,259.31 1 0 +github.com/muety/wakapi/models/summary.go:259.31,260.44 1 0 +github.com/muety/wakapi/models/summary.go:260.44,262.5 1 0 +github.com/muety/wakapi/models/summary.go:268.58,270.16 2 0 +github.com/muety/wakapi/models/summary.go:273.2,273.16 1 0 +github.com/muety/wakapi/models/summary.go:270.16,272.3 1 0 +github.com/muety/wakapi/models/summary.go:276.71,277.63 1 1 +github.com/muety/wakapi/models/summary.go:321.2,329.10 8 1 +github.com/muety/wakapi/models/summary.go:277.63,278.20 1 1 +github.com/muety/wakapi/models/summary.go:282.3,284.45 2 1 +github.com/muety/wakapi/models/summary.go:293.3,293.31 1 1 +github.com/muety/wakapi/models/summary.go:300.3,300.31 1 1 +github.com/muety/wakapi/models/summary.go:317.3,317.16 1 1 +github.com/muety/wakapi/models/summary.go:278.20,280.4 1 1 +github.com/muety/wakapi/models/summary.go:284.45,285.32 1 1 +github.com/muety/wakapi/models/summary.go:290.4,290.14 1 1 +github.com/muety/wakapi/models/summary.go:285.32,286.24 1 1 +github.com/muety/wakapi/models/summary.go:286.24,288.6 1 1 +github.com/muety/wakapi/models/summary.go:293.31,295.60 1 1 +github.com/muety/wakapi/models/summary.go:295.60,297.5 1 1 +github.com/muety/wakapi/models/summary.go:300.31,302.60 1 1 +github.com/muety/wakapi/models/summary.go:302.60,303.55 1 1 +github.com/muety/wakapi/models/summary.go:303.55,305.6 1 1 +github.com/muety/wakapi/models/summary.go:305.11,313.6 1 1 +github.com/muety/wakapi/models/summary.go:332.57,333.30 1 1 +github.com/muety/wakapi/models/summary.go:338.2,338.43 1 0 +github.com/muety/wakapi/models/summary.go:333.30,334.28 1 1 +github.com/muety/wakapi/models/summary.go:334.28,336.4 1 1 +github.com/muety/wakapi/models/summary.go:341.43,343.2 1 0 +github.com/muety/wakapi/models/summary.go:345.49,346.21 1 0 +github.com/muety/wakapi/models/summary.go:349.2,350.54 2 0 +github.com/muety/wakapi/models/summary.go:346.21,348.3 1 0 +github.com/muety/wakapi/models/summary.go:353.51,354.27 1 0 +github.com/muety/wakapi/models/summary.go:357.2,358.19 2 0 +github.com/muety/wakapi/models/summary.go:354.27,356.3 1 0 +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 diff --git a/go.mod b/go.mod index 6cacd4b..d01eeec 100644 --- a/go.mod +++ b/go.mod @@ -10,8 +10,7 @@ require ( github.com/emvi/logbuch v1.2.0 github.com/getsentry/sentry-go v0.17.0 github.com/glebarez/sqlite v1.6.0 - github.com/gorilla/handlers v1.5.1 - github.com/gorilla/mux v1.8.0 + github.com/go-chi/chi/v5 v5.0.8 github.com/gorilla/schema v1.2.0 github.com/gorilla/securecookie v1.1.1 github.com/gorilla/sessions v1.2.1 @@ -43,7 +42,6 @@ require ( 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.20.0 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect @@ -52,14 +50,8 @@ require ( 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/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-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 diff --git a/go.sum b/go.sum index e91773f..52cb3b9 100644 --- a/go.sum +++ b/go.sum @@ -5,22 +5,13 @@ github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -29,68 +20,42 @@ github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+m 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= -github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= -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-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= +github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= 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= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/schema v1.2.0 h1:YufUaxZYCKGFuAq3c96BOhjgd5nmXiOY9NGzF247Tsc= github.com/gorilla/schema v1.2.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= @@ -100,61 +65,13 @@ 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= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= -github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.13.0 h1:3L1XMNV2Zvca/8BYhzcRFS70Lr0WlDg16Di6SFGAbys= -github.com/jackc/pgconn v1.13.0/go.mod h1:AnowpAqO4CMIIJNZl2VJp+KrkAZciAkhEl0W0JIobpI= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= -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= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.3.1 h1:nwj7qwf0S+Q7ISFfBndqeLwSwxs+4DPsbRFjECT1Y4Y= -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= @@ -168,26 +85,16 @@ github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFF github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kevinpollet/nego v0.0.0-20211010160919-a65cd48cee43 h1:Pdirg1gwhEcGjMLyuSxGn9664p+P8J9SrfMgpFwrDyg= github.com/kevinpollet/nego v0.0.0-20211010160919-a65cd48cee43/go.mod h1:ahLMuLCUyDdXqtqGyuwGev7/PGtO7r7ocvdwDuEN/3E= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -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= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leandro-lugaresi/hub v1.1.1 h1:zqp0HzFvj4HtqjMBXM2QF17o6PNmR8MJOChgeKl/aw8= github.com/leandro-lugaresi/hub v1.1.1/go.mod h1:XEFWanhHv6Rt3XlteHMxuNDYi8dJcpJjodpqkU+BtIo= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lpar/gzipped/v2 v2.1.0 h1:87/ug239roEqXLVOnXZg6NjDfFvMwmkGTKnFWJPUA9U= github.com/lpar/gzipped/v2 v2.1.0/go.mod h1:G3UlFoFYzjCx6NV4zDmD1BIWMNBaJuKoUvxrEWJuZ3Y= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -195,12 +102,6 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -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= @@ -211,131 +112,71 @@ github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4 github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/muety/artifex/v2 v2.0.1-0.20221201142708-74e7d3f6feaf h1:zd7IU9rxVMl2FBwSwiWCUh6s0TkPKgOU6GyVBciNdlo= 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= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa h1:tEkEyxYeZ43TR55QU/hsIt9aRGBxbgGuz9CGykjvogY= -github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230126093431-47fa9a501578 h1:VstopitMQi3hZP0fzvnsLmzXZdQGc4bEcgu24cp+d4M= github.com/remyoudompheng/bigfft v0.0.0-20230126093431-47fa9a501578/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= 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 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= 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= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -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= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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/stripe/stripe-go/v74 v74.6.0 h1:IQTT+psxj1hkXo6onQsyfw5Eopj7p6e0oltkWLlf0Tw= github.com/stripe/stripe-go/v74 v74.6.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/swaggo/swag v1.8.10 h1:eExW4bFa52WOjqRzRD58bgWsWfdFJso50lpbeTcmTfo= github.com/swaggo/swag v1.8.10/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= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -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/exp v0.0.0-20230125214544-b3c2aaf6208d h1:9Bio0JlZpJ1P4NXsK5i8Rf2MclrRzMGzJWOIkhZ5Um8= golang.org/x/exp v0.0.0-20230125214544-b3c2aaf6208d/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= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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= @@ -346,65 +187,40 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ 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= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 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= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -415,7 +231,6 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 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= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= @@ -423,74 +238,48 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 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= -modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= modernc.org/cc/v3 v3.38.1/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20= modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI= modernc.org/ccgo/v3 v3.0.0-20220910160915-348f15de615a/go.mod h1:8p47QxPkdugex9J4n9P2tLZ9bK01yngIVp00g4nomW0= -modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA= modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0= modernc.org/libc v1.19.0/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0= 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= modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -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/sqlite v1.20.3 h1:SqGJMMxjj1PHusLxdYxeQSodg7Jxn9WWkaAQjKrntZs= modernc.org/sqlite v1.20.3/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= modernc.org/tcl v1.15.0/go.mod h1:xRoGotBZ6dU+Zo2tca+2EqVEeMmOUBzHnhIwq4YrVnE= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.6.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ= modernc.org/z v1.7.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ= diff --git a/main.go b/main.go index 959a72e..43c00f8 100644 --- a/main.go +++ b/main.go @@ -2,7 +2,15 @@ package main import ( "embed" + "github.com/go-chi/chi/v5" + middleware "github.com/go-chi/chi/v5/middleware" "github.com/lpar/gzipped/v2" + "github.com/muety/wakapi/middlewares" + shieldsV1Routes "github.com/muety/wakapi/routes/compat/shields/v1" + wtV1Routes "github.com/muety/wakapi/routes/compat/wakatime/v1" + "github.com/muety/wakapi/routes/relay" + fsutils "github.com/muety/wakapi/utils/fs" + httpSwagger "github.com/swaggo/http-swagger" "io/fs" "log" "net" @@ -14,23 +22,13 @@ import ( "github.com/muety/wakapi/static/docs" "github.com/emvi/logbuch" - "github.com/gorilla/handlers" - "github.com/gorilla/mux" - httpSwagger "github.com/swaggo/http-swagger" - conf "github.com/muety/wakapi/config" - "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/migrations" "github.com/muety/wakapi/repositories" "github.com/muety/wakapi/routes" "github.com/muety/wakapi/routes/api" - shieldsV1Routes "github.com/muety/wakapi/routes/compat/shields/v1" - wtV1Routes "github.com/muety/wakapi/routes/compat/wakatime/v1" - "github.com/muety/wakapi/routes/relay" "github.com/muety/wakapi/services" "github.com/muety/wakapi/services/mail" - fsutils "github.com/muety/wakapi/utils/fs" - _ "gorm.io/driver/mysql" _ "gorm.io/driver/postgres" _ "gorm.io/driver/sqlite" @@ -225,28 +223,34 @@ func main() { // Other Handlers relayHandler := relay.NewRelayHandler() - // Setup Routers - router := mux.NewRouter() - rootRouter := router.PathPrefix("/").Subrouter() - apiRouter := router.PathPrefix("/api").Subrouter().StrictSlash(true) - - // https://github.com/gorilla/mux/issues/416 - router.NotFoundHandler = router.NewRoute().BuildOnly().HandlerFunc(http.NotFound).GetHandler() - router.NotFoundHandler = middlewares.NewLoggingMiddleware(logbuch.Info, []string{ - "/assets", - "/favicon", - "/service-worker.js", - })(router.NotFoundHandler) - - // Globally used middlewares - router.Use(middlewares.NewPrincipalMiddleware()) - router.Use(middlewares.NewLoggingMiddleware(logbuch.Info, []string{"/assets", "/api/health"})) - router.Use(handlers.RecoveryHandler()) + // Setup Routing + router := chi.NewRouter() + router.Use( + middleware.CleanPath, + middleware.StripSlashes, + middleware.Recoverer, + middlewares.NewPrincipalMiddleware(), + middlewares.NewLoggingMiddleware(logbuch.Info, []string{ + "/assets", + "/favicon", + "/service-worker.js", + "/api/health", + }), + ) if config.Sentry.Dsn != "" { router.Use(middlewares.NewSentryMiddleware()) } + + // Setup Sub Routers + rootRouter := chi.NewRouter() rootRouter.Use(middlewares.NewSecurityMiddleware()) + apiRouter := chi.NewRouter() + + // Hook sub routers + router.Mount("/", rootRouter) + router.Mount("/api", apiRouter) + // Route registrations homeHandler.RegisterRoutes(rootRouter) loginHandler.RegisterRoutes(rootRouter) @@ -286,10 +290,10 @@ func main() { } staticFileServer := http.FileServer(http.FS(fsutils.NeuteredFileSystem{FS: static})) - router.PathPrefix("/contribute.json").Handler(staticFileServer) - router.PathPrefix("/assets").Handler(assetsFileServer) - router.Path("/swagger-ui").Handler(http.RedirectHandler("swagger-ui/", http.StatusMovedPermanently)) // https://github.com/swaggo/http-swagger/issues/44 - router.PathPrefix("/swagger-ui").Handler(httpSwagger.WrapHandler) + router.Get("/contribute.json", staticFileServer.ServeHTTP) + router.Get("/assets/*", assetsFileServer.ServeHTTP) + router.Get("/swagger-ui", http.RedirectHandler("swagger-ui/", http.StatusMovedPermanently).ServeHTTP) // https://github.com/swaggo/http-swagger/issues/44 + router.Get("/swagger-ui/*", httpSwagger.WrapHandler) // Listen HTTP listen(router) diff --git a/routes/api/avatar.go b/routes/api/avatar.go index e1ee756..4b08f64 100644 --- a/routes/api/avatar.go +++ b/routes/api/avatar.go @@ -2,7 +2,7 @@ package api import ( "codeberg.org/Codeberg/avatars" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" lru "github.com/hashicorp/golang-lru" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/utils" @@ -27,13 +27,12 @@ func NewAvatarHandler() *AvatarHandler { } } -func (h *AvatarHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/avatar/{hash}.svg").Subrouter() - r.Path("").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *AvatarHandler) RegisterRoutes(router chi.Router) { + router.Get("/avatar/{hash}.svg", h.Get) } func (h *AvatarHandler) Get(w http.ResponseWriter, r *http.Request) { - hash := mux.Vars(r)["hash"] + hash := chi.URLParam(r, "hash") if utils.IsNoCache(r, 1*time.Hour) { h.cache.Remove(hash) diff --git a/routes/api/badge.go b/routes/api/badge.go index 3c69755..29d3944 100644 --- a/routes/api/badge.go +++ b/routes/api/badge.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/duke-git/lancet/v2/maputil" "github.com/duke-git/lancet/v2/slice" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/models" v1 "github.com/muety/wakapi/models/compat/shields/v1" @@ -33,13 +33,12 @@ func NewBadgeHandler(userService services.IUserService, summaryService services. } } -func (h *BadgeHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/badge/{user}").Subrouter() - r.Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *BadgeHandler) RegisterRoutes(router chi.Router) { + router.Get("/badge/{user}", h.Get) } func (h *BadgeHandler) Get(w http.ResponseWriter, r *http.Request) { - user, err := h.userSrvc.GetUserById(mux.Vars(r)["user"]) + user, err := h.userSrvc.GetUserById(chi.URLParam(r, "user")) if err != nil { w.WriteHeader(http.StatusNotFound) return diff --git a/routes/api/diagnostics.go b/routes/api/diagnostics.go index 5b3b8de..1cbc42c 100644 --- a/routes/api/diagnostics.go +++ b/routes/api/diagnostics.go @@ -2,10 +2,10 @@ package api import ( "encoding/json" + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" "net/http" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/models" "github.com/muety/wakapi/services" @@ -25,9 +25,8 @@ func NewDiagnosticsApiHandler(userService services.IUserService, diagnosticsServ } } -func (h *DiagnosticsApiHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/plugins/errors").Subrouter() - r.Path("").Methods(http.MethodPost).HandlerFunc(h.Post) +func (h *DiagnosticsApiHandler) RegisterRoutes(router chi.Router) { + router.Post("/plugins/errors", h.Post) } // @Summary Push a new diagnostics object diff --git a/routes/api/health.go b/routes/api/health.go index cc28724..0179b48 100644 --- a/routes/api/health.go +++ b/routes/api/health.go @@ -4,7 +4,7 @@ import ( "fmt" "net/http" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" "gorm.io/gorm" ) @@ -16,9 +16,8 @@ func NewHealthApiHandler(db *gorm.DB) *HealthApiHandler { return &HealthApiHandler{db: db} } -func (h *HealthApiHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/health").Subrouter() - r.Path("").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *HealthApiHandler) RegisterRoutes(router chi.Router) { + router.Get("/health", h.Get) } // @Summary Check the application's health status diff --git a/routes/api/heartbeat.go b/routes/api/heartbeat.go index c923d2c..9530e41 100644 --- a/routes/api/heartbeat.go +++ b/routes/api/heartbeat.go @@ -1,10 +1,10 @@ package api import ( + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" "net/http" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" customMiddleware "github.com/muety/wakapi/middlewares/custom" @@ -35,21 +35,22 @@ type heartbeatResponseVm struct { Responses [][]interface{} `json:"responses"` } -func (h *HeartbeatApiHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - customMiddleware.NewWakatimeRelayMiddleware().Handler, - ) - // see https://github.com/muety/wakapi/issues/203 - r.Path("/heartbeat").Methods(http.MethodPost).HandlerFunc(h.Post) - r.Path("/heartbeats").Methods(http.MethodPost).HandlerFunc(h.Post) - r.Path("/users/{user}/heartbeats").Methods(http.MethodPost).HandlerFunc(h.Post) - r.Path("/users/{user}/heartbeats.bulk").Methods(http.MethodPost).HandlerFunc(h.Post) - r.Path("/v1/users/{user}/heartbeats").Methods(http.MethodPost).HandlerFunc(h.Post) - r.Path("/v1/users/{user}/heartbeats.bulk").Methods(http.MethodPost).HandlerFunc(h.Post) - r.Path("/compat/wakatime/v1/users/{user}/heartbeats").Methods(http.MethodPost).HandlerFunc(h.Post) - r.Path("/compat/wakatime/v1/users/{user}/heartbeats.bulk").Methods(http.MethodPost).HandlerFunc(h.Post) +func (h *HeartbeatApiHandler) RegisterRoutes(router chi.Router) { + router.Group(func(r chi.Router) { + r.Use( + middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, + customMiddleware.NewWakatimeRelayMiddleware().Handler, + ) + // see https://github.com/muety/wakapi/issues/203 + r.Post("/heartbeat", h.Post) + r.Post("/heartbeats", h.Post) + r.Post("/users/{user}/heartbeats", h.Post) + r.Post("/users/{user}/heartbeats.bulk", h.Post) + r.Post("/v1/users/{user}/heartbeats", h.Post) + r.Post("/v1/users/{user}/heartbeats.bulk", h.Post) + r.Post("/compat/wakatime/v1/users/{user}/heartbeats", h.Post) + r.Post("/compat/wakatime/v1/users/{user}/heartbeats.bulk", h.Post) + }) } // @Summary Push a new heartbeat diff --git a/routes/api/metrics.go b/routes/api/metrics.go index 404c1bd..6f5d8fe 100644 --- a/routes/api/metrics.go +++ b/routes/api/metrics.go @@ -3,7 +3,7 @@ package api import ( "errors" "github.com/emvi/logbuch" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/helpers" "github.com/muety/wakapi/middlewares" @@ -66,18 +66,18 @@ func NewMetricsHandler(userService services.IUserService, summaryService service } } -func (h *MetricsHandler) RegisterRoutes(router *mux.Router) { +func (h *MetricsHandler) RegisterRoutes(router chi.Router) { if !h.config.Security.ExposeMetrics { return } logbuch.Info("exposing prometheus metrics under /api/metrics") - r := router.PathPrefix("/metrics").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - ) - r.Path("").Methods(http.MethodGet).HandlerFunc(h.Get) + r := chi.NewRouter() + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler) + r.Get("/", h.Get) + + router.Mount("/metrics", r) } func (h *MetricsHandler) Get(w http.ResponseWriter, r *http.Request) { diff --git a/routes/api/summary.go b/routes/api/summary.go index a5926e8..5b2060a 100644 --- a/routes/api/summary.go +++ b/routes/api/summary.go @@ -1,11 +1,11 @@ package api import ( + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" routeutils "github.com/muety/wakapi/routes/utils" "net/http" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/services" @@ -25,12 +25,12 @@ func NewSummaryApiHandler(userService services.IUserService, summaryService serv } } -func (h *SummaryApiHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/summary").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - ) - r.Path("").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *SummaryApiHandler) RegisterRoutes(router chi.Router) { + r := chi.NewRouter() + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler) + r.Get("/", h.Get) + + router.Mount("/summary", r) } // @Summary Retrieve a summary diff --git a/routes/compat/shields/v1/badge.go b/routes/compat/shields/v1/badge.go index 600cb4b..ac9f1ef 100644 --- a/routes/compat/shields/v1/badge.go +++ b/routes/compat/shields/v1/badge.go @@ -2,12 +2,12 @@ package v1 import ( "fmt" + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" routeutils "github.com/muety/wakapi/routes/utils" "net/http" "time" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/models" v1 "github.com/muety/wakapi/models/compat/shields/v1" @@ -31,10 +31,9 @@ func NewBadgeHandler(summaryService services.ISummaryService, userService servic } } -func (h *BadgeHandler) RegisterRoutes(router *mux.Router) { +func (h *BadgeHandler) RegisterRoutes(router chi.Router) { // no auth middleware here, handler itself resolves the user - r := router.PathPrefix("/compat/shields/v1/{user}").Subrouter() - r.Methods(http.MethodGet).HandlerFunc(h.Get) + router.Get("/compat/shields/v1/{user}/*", h.Get) } // @Summary Get badge data @@ -48,7 +47,7 @@ func (h *BadgeHandler) RegisterRoutes(router *mux.Router) { // @Success 200 {object} v1.BadgeData // @Router /compat/shields/v1/{user}/{interval}/{filter} [get] func (h *BadgeHandler) Get(w http.ResponseWriter, r *http.Request) { - user, err := h.userSrvc.GetUserById(mux.Vars(r)["user"]) + user, err := h.userSrvc.GetUserById(chi.URLParam(r, "user")) if err != nil { w.WriteHeader(http.StatusNotFound) return diff --git a/routes/compat/wakatime/v1/all_time.go b/routes/compat/wakatime/v1/all_time.go index 431eaec..edced1b 100644 --- a/routes/compat/wakatime/v1/all_time.go +++ b/routes/compat/wakatime/v1/all_time.go @@ -1,7 +1,7 @@ package v1 import ( - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/helpers" "github.com/muety/wakapi/middlewares" @@ -27,12 +27,11 @@ func NewAllTimeHandler(userService services.IUserService, summaryService service } } -func (h *AllTimeHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/compat/wakatime/v1/users/{user}/all_time_since_today").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - ) - r.Path("").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *AllTimeHandler) RegisterRoutes(router chi.Router) { + router.Group(func(r chi.Router) { + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler) + r.Get("/compat/wakatime/v1/users/{user}/all_time_since_today", h.Get) + }) } // @Summary Retrieve summary for all time diff --git a/routes/compat/wakatime/v1/heartbeat.go b/routes/compat/wakatime/v1/heartbeat.go index 1a30bad..d79c3e5 100644 --- a/routes/compat/wakatime/v1/heartbeat.go +++ b/routes/compat/wakatime/v1/heartbeat.go @@ -2,11 +2,11 @@ package v1 import ( "github.com/duke-git/lancet/v2/datetime" + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" "net/http" "time" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" wakatime "github.com/muety/wakapi/models/compat/wakatime/v1" @@ -33,12 +33,11 @@ func NewHeartbeatHandler(userService services.IUserService, heartbeatService ser } } -func (h *HeartbeatHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - ) - r.Path("/compat/wakatime/v1/users/{user}/heartbeats").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *HeartbeatHandler) RegisterRoutes(router chi.Router) { + router.Group(func(r chi.Router) { + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler) + r.Get("/compat/wakatime/v1/users/{user}/heartbeats", h.Get) + }) } // @Summary Get heartbeats of user for specified date diff --git a/routes/compat/wakatime/v1/projects.go b/routes/compat/wakatime/v1/projects.go index acdc12e..dc2e2f8 100644 --- a/routes/compat/wakatime/v1/projects.go +++ b/routes/compat/wakatime/v1/projects.go @@ -1,11 +1,11 @@ package v1 import ( + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" "net/http" "strings" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/models" @@ -28,12 +28,11 @@ func NewProjectsHandler(userService services.IUserService, heartbeatsService ser } } -func (h *ProjectsHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/compat/wakatime/v1/users/{user}/projects").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - ) - r.Path("").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *ProjectsHandler) RegisterRoutes(router chi.Router) { + router.Group(func(r chi.Router) { + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler) + r.Get("/compat/wakatime/v1/users/{user}/projects", h.Get) + }) } // @Summary Retrieve and fitler the user's projects diff --git a/routes/compat/wakatime/v1/stats.go b/routes/compat/wakatime/v1/stats.go index fa03c1e..1e62817 100644 --- a/routes/compat/wakatime/v1/stats.go +++ b/routes/compat/wakatime/v1/stats.go @@ -1,11 +1,11 @@ package v1 import ( + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" "net/http" "time" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/models" @@ -27,17 +27,18 @@ func NewStatsHandler(userService services.IUserService, summaryService services. } } -func (h *StatsHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).WithOptionalFor([]string{"/"}).Handler, - ) - r.Path("/v1/users/{user}/stats/{range}").Methods(http.MethodGet).HandlerFunc(h.Get) - r.Path("/compat/wakatime/v1/users/{user}/stats/{range}").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *StatsHandler) RegisterRoutes(router chi.Router) { + router.Group(func(r chi.Router) { + r.Use( + middlewares.NewAuthenticateMiddleware(h.userSrvc).WithOptionalFor([]string{"/"}).Handler, + ) + r.Get("/v1/users/{user}/stats/{range}", h.Get) + r.Get("/compat/wakatime/v1/users/{user}/stats/{range}", h.Get) - // Also works without range, see https://github.com/anuraghazra/github-readme-stats/issues/865#issuecomment-776186592 - r.Path("/v1/users/{user}/stats").Methods(http.MethodGet).HandlerFunc(h.Get) - r.Path("/compat/wakatime/v1/users/{user}/stats").Methods(http.MethodGet).HandlerFunc(h.Get) + // Also works without range, see https://github.com/anuraghazra/github-readme-stats/issues/865#issuecomment-776186592 + r.Get("/v1/users/{user}/stats", h.Get) + r.Get("/compat/wakatime/v1/users/{user}/stats", h.Get) + }) } // TODO: support filtering (requires https://github.com/muety/wakapi/issues/108) @@ -59,22 +60,22 @@ func (h *StatsHandler) RegisterRoutes(router *mux.Router) { // @Success 200 {object} v1.StatsViewModel // @Router /compat/wakatime/v1/users/{user}/stats/{range} [get] func (h *StatsHandler) Get(w http.ResponseWriter, r *http.Request) { - var vars = mux.Vars(r) + userParam := chi.URLParam(r, "user") + rangeParam := chi.URLParam(r, "range") var authorizedUser, requestedUser *models.User authorizedUser = middlewares.GetPrincipal(r) - if authorizedUser != nil && vars["user"] == "current" { - vars["user"] = authorizedUser.ID + if authorizedUser != nil && userParam == "current" { + userParam = authorizedUser.ID } - requestedUser, err := h.userSrvc.GetUserById(vars["user"]) + requestedUser, err := h.userSrvc.GetUserById(userParam) if err != nil { w.WriteHeader(http.StatusNotFound) w.Write([]byte("user not found")) return } - rangeParam := vars["range"] if rangeParam == "" { rangeParam = (*models.IntervalPast7Days)[0] } diff --git a/routes/compat/wakatime/v1/statusbar.go b/routes/compat/wakatime/v1/statusbar.go index a71a791..8350d50 100644 --- a/routes/compat/wakatime/v1/statusbar.go +++ b/routes/compat/wakatime/v1/statusbar.go @@ -1,11 +1,11 @@ package v1 import ( + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" "net/http" "time" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/models" @@ -33,15 +33,13 @@ func NewStatusBarHandler(userService services.IUserService, summaryService servi } } -func (h *StatusBarHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("").Subrouter() - - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - ) - r.Path("/users/{user}/statusbar/{range}").Methods(http.MethodGet).HandlerFunc(h.Get) - r.Path("/v1/users/{user}/statusbar/{range}").Methods(http.MethodGet).HandlerFunc(h.Get) - r.Path("/compat/wakatime/v1/users/{user}/statusbar/{range}").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *StatusBarHandler) RegisterRoutes(router chi.Router) { + router.Group(func(r chi.Router) { + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler) + r.Get("/users/{user}/statusbar/{range}", h.Get) + r.Get("/v1/users/{user}/statusbar/{range}", h.Get) + r.Get("/compat/wakatime/v1/users/{user}/statusbar/{range}", h.Get) + }) } // @Summary Retrieve summary for statusbar @@ -58,9 +56,8 @@ func (h *StatusBarHandler) Get(w http.ResponseWriter, r *http.Request) { if err != nil { return // response was already sent by util function } - var vars = mux.Vars(r) - rangeParam := vars["range"] + rangeParam := chi.URLParam(r, "range") if rangeParam == "" { rangeParam = (*models.IntervalToday)[0] } diff --git a/routes/compat/wakatime/v1/summaries.go b/routes/compat/wakatime/v1/summaries.go index ec4554a..68224dc 100644 --- a/routes/compat/wakatime/v1/summaries.go +++ b/routes/compat/wakatime/v1/summaries.go @@ -3,12 +3,12 @@ package v1 import ( "errors" "github.com/duke-git/lancet/v2/datetime" + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" "net/http" "strings" "time" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/models" @@ -32,12 +32,11 @@ func NewSummariesHandler(userService services.IUserService, summaryService servi } } -func (h *SummariesHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/compat/wakatime/v1/users/{user}/summaries").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - ) - r.Path("").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *SummariesHandler) RegisterRoutes(router chi.Router) { + router.Group(func(r chi.Router) { + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler) + r.Get("/compat/wakatime/v1/users/{user}/summaries", h.Get) + }) } // TODO: Support parameters: project, branches, timeout, writes_only diff --git a/routes/compat/wakatime/v1/test_utils_test.go b/routes/compat/wakatime/v1/test_utils_test.go new file mode 100644 index 0000000..941d3f5 --- /dev/null +++ b/routes/compat/wakatime/v1/test_utils_test.go @@ -0,0 +1,17 @@ +package v1 + +import ( + "context" + "github.com/go-chi/chi/v5" + "net/http" + "strings" +) + +func withUrlParam(r *http.Request, key, value string) *http.Request { + r.URL.RawPath = strings.Replace(r.URL.RawPath, "{"+key+"}", value, 1) + r.URL.Path = strings.Replace(r.URL.Path, "{"+key+"}", value, 1) + rctx := chi.NewRouteContext() + rctx.URLParams.Add(key, value) + r = r.WithContext(context.WithValue(r.Context(), chi.RouteCtxKey, rctx)) + return r +} diff --git a/routes/compat/wakatime/v1/users.go b/routes/compat/wakatime/v1/users.go index b1ae7ab..efc3ccd 100644 --- a/routes/compat/wakatime/v1/users.go +++ b/routes/compat/wakatime/v1/users.go @@ -1,10 +1,10 @@ package v1 import ( + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/helpers" "net/http" - "github.com/gorilla/mux" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" v1 "github.com/muety/wakapi/models/compat/wakatime/v1" @@ -26,12 +26,11 @@ func NewUsersHandler(userService services.IUserService, heartbeatService service } } -func (h *UsersHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/compat/wakatime/v1/users/{user}").Subrouter() - r.Use( - middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler, - ) - r.Path("").Methods(http.MethodGet).HandlerFunc(h.Get) +func (h *UsersHandler) RegisterRoutes(router chi.Router) { + router.Group(func(r chi.Router) { + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc).Handler) + r.Get("/compat/wakatime/v1/users/{user}", h.Get) + }) } // @Summary Retrieve the given user diff --git a/routes/compat/wakatime/v1/users_test.go b/routes/compat/wakatime/v1/users_test.go index a84ac4d..72cc3f9 100644 --- a/routes/compat/wakatime/v1/users_test.go +++ b/routes/compat/wakatime/v1/users_test.go @@ -3,7 +3,7 @@ package v1 import ( "encoding/base64" "fmt" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/mocks" "github.com/muety/wakapi/models" @@ -36,9 +36,10 @@ var ( ) func TestUsersHandler_Get(t *testing.T) { - router := mux.NewRouter() - apiRouter := router.PathPrefix("/api").Subrouter().StrictSlash(true) + router := chi.NewRouter() + apiRouter := chi.NewRouter() apiRouter.Use(middlewares.NewPrincipalMiddleware()) + router.Mount("/api", apiRouter) userServiceMock := new(mocks.UserServiceMock) userServiceMock.On("GetUserById", "AdminUser").Return(adminUser, nil) @@ -61,14 +62,17 @@ func TestUsersHandler_Get(t *testing.T) { t.Run("when requesting own user data", func(t *testing.T) { t.Run("should return own data", func(t *testing.T) { - req := httptest.NewRequest(http.MethodGet, "/api/compat/wakatime/v1/users/AdminUser", nil) + rec := httptest.NewRecorder() + + req := httptest.NewRequest(http.MethodGet, "/api/compat/wakatime/v1/users/{user}", nil) + req = withUrlParam(req, "user", "AdminUser") req.Header.Add( "Authorization", fmt.Sprintf("Bearer %s", base64.StdEncoding.EncodeToString([]byte(adminUser.ApiKey))), ) - requestRecorder := httptest.NewRecorder() - apiRouter.ServeHTTP(requestRecorder, req) - res := requestRecorder.Result() + + router.ServeHTTP(rec, req) + res := rec.Result() defer res.Body.Close() data, err := ioutil.ReadAll(res.Body) @@ -84,14 +88,17 @@ func TestUsersHandler_Get(t *testing.T) { t.Run("when requesting another users data", func(t *testing.T) { t.Run("should respond with '401 unauthorized' if not an admin user", func(t *testing.T) { - req := httptest.NewRequest(http.MethodGet, "/api/compat/wakatime/v1/users/AdminUser", nil) + rec := httptest.NewRecorder() + + req := httptest.NewRequest(http.MethodGet, "/api/compat/wakatime/v1/users/{user}", nil) + req = withUrlParam(req, "user", "AdminUser") req.Header.Add( "Authorization", fmt.Sprintf("Bearer %s", base64.StdEncoding.EncodeToString([]byte(basicUser.ApiKey))), ) - requestRecorder := httptest.NewRecorder() - apiRouter.ServeHTTP(requestRecorder, req) - res := requestRecorder.Result() + + router.ServeHTTP(rec, req) + res := rec.Result() defer res.Body.Close() data, err := ioutil.ReadAll(res.Body) @@ -105,14 +112,17 @@ func TestUsersHandler_Get(t *testing.T) { }) t.Run("should receive user data if requesting user is an admin", func(t *testing.T) { - req := httptest.NewRequest(http.MethodGet, "/api/compat/wakatime/v1/users/BasicUser", nil) + rec := httptest.NewRecorder() + + req := httptest.NewRequest(http.MethodGet, "/api/compat/wakatime/v1/users/{user}", nil) + req = withUrlParam(req, "user", "BasicUser") req.Header.Add( "Authorization", fmt.Sprintf("Bearer %s", base64.StdEncoding.EncodeToString([]byte(adminUser.ApiKey))), ) - requestRecorder := httptest.NewRecorder() - apiRouter.ServeHTTP(requestRecorder, req) - res := requestRecorder.Result() + + router.ServeHTTP(rec, req) + res := rec.Result() defer res.Body.Close() data, err := ioutil.ReadAll(res.Body) diff --git a/routes/handler.go b/routes/handler.go index a9c93b5..9583a1c 100644 --- a/routes/handler.go +++ b/routes/handler.go @@ -1,7 +1,9 @@ package routes -import "github.com/gorilla/mux" +import ( + "github.com/go-chi/chi/v5" +) type Handler interface { - RegisterRoutes(router *mux.Router) + RegisterRoutes(router chi.Router) } diff --git a/routes/home.go b/routes/home.go index 4c7f866..354fe2b 100644 --- a/routes/home.go +++ b/routes/home.go @@ -4,7 +4,7 @@ import ( "encoding/json" "fmt" "github.com/emvi/logbuch" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" "github.com/gorilla/schema" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/models" @@ -33,8 +33,8 @@ func NewHomeHandler(keyValueService services.IKeyValueService) *HomeHandler { } } -func (h *HomeHandler) RegisterRoutes(router *mux.Router) { - router.Path("/").Methods(http.MethodGet).HandlerFunc(h.GetIndex) +func (h *HomeHandler) RegisterRoutes(router chi.Router) { + router.Get("/", h.GetIndex) } func (h *HomeHandler) GetIndex(w http.ResponseWriter, r *http.Request) { diff --git a/routes/imprint.go b/routes/imprint.go index 7ce5e51..a0d0580 100644 --- a/routes/imprint.go +++ b/routes/imprint.go @@ -1,7 +1,7 @@ package routes import ( - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/models" "github.com/muety/wakapi/models/view" @@ -21,8 +21,8 @@ func NewImprintHandler(keyValueService services.IKeyValueService) *ImprintHandle } } -func (h *ImprintHandler) RegisterRoutes(router *mux.Router) { - router.Path("/imprint").Methods(http.MethodGet).HandlerFunc(h.GetImprint) +func (h *ImprintHandler) RegisterRoutes(router chi.Router) { + router.Get("/imprint", h.GetImprint) } func (h *ImprintHandler) GetImprint(w http.ResponseWriter, r *http.Request) { diff --git a/routes/leaderboard.go b/routes/leaderboard.go index fb43f2c..84712db 100644 --- a/routes/leaderboard.go +++ b/routes/leaderboard.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/duke-git/lancet/v2/slice" "github.com/emvi/logbuch" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/models" @@ -34,16 +34,17 @@ func NewLeaderboardHandler(userService services.IUserService, leaderboardService } } -func (h *LeaderboardHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/leaderboard").Subrouter() +func (h *LeaderboardHandler) RegisterRoutes(router chi.Router) { + r := chi.NewRouter() r.Use( middlewares.NewAuthenticateMiddleware(h.userService). WithRedirectTarget(defaultErrorRedirectTarget()). WithRedirectErrorMessage("unauthorized"). - WithOptionalFor([]string{"/"}). - Handler, + WithOptionalFor([]string{"/"}).Handler, ) - r.Methods(http.MethodGet).HandlerFunc(h.GetIndex) + r.Get("/", h.GetIndex) + + router.Mount("/leaderboard", r) } func (h *LeaderboardHandler) GetIndex(w http.ResponseWriter, r *http.Request) { diff --git a/routes/login.go b/routes/login.go index 4b4720b..7300d31 100644 --- a/routes/login.go +++ b/routes/login.go @@ -3,7 +3,7 @@ package routes import ( "fmt" "github.com/emvi/logbuch" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/models" @@ -30,24 +30,25 @@ func NewLoginHandler(userService services.IUserService, mailService services.IMa } } -func (h *LoginHandler) RegisterRoutes(router *mux.Router) { - router.Path("/login").Methods(http.MethodGet).HandlerFunc(h.GetIndex) - router.Path("/login").Methods(http.MethodPost).HandlerFunc(h.PostLogin) - router.Path("/signup").Methods(http.MethodGet).HandlerFunc(h.GetSignup) - router.Path("/signup").Methods(http.MethodPost).HandlerFunc(h.PostSignup) - router.Path("/set-password").Methods(http.MethodGet).HandlerFunc(h.GetSetPassword) - router.Path("/set-password").Methods(http.MethodPost).HandlerFunc(h.PostSetPassword) - router.Path("/reset-password").Methods(http.MethodGet).HandlerFunc(h.GetResetPassword) - router.Path("/reset-password").Methods(http.MethodPost).HandlerFunc(h.PostResetPassword) +func (h *LoginHandler) RegisterRoutes(router chi.Router) { + router.Get("/login", h.GetIndex) + router.Post("/login", h.PostLogin) + router.Get("/signup", h.GetSignup) + router.Post("/signup", h.PostSignup) + router.Get("/set-password", h.GetSetPassword) + router.Post("/set-password", h.PostSetPassword) + router.Get("/reset-password", h.GetResetPassword) + router.Post("/reset-password", h.PostResetPassword) authMiddleware := middlewares.NewAuthenticateMiddleware(h.userSrvc). WithRedirectTarget(defaultErrorRedirectTarget()). WithRedirectErrorMessage("unauthorized"). WithOptionalFor([]string{"/logout"}) - logoutRouter := router.PathPrefix("/logout").Subrouter() + logoutRouter := chi.NewRouter() logoutRouter.Use(authMiddleware.Handler) - logoutRouter.Path("").Methods(http.MethodPost).HandlerFunc(h.PostLogout) + logoutRouter.Post("/", h.PostLogout) + router.Mount("/logout", logoutRouter) } func (h *LoginHandler) GetIndex(w http.ResponseWriter, r *http.Request) { diff --git a/routes/relay/relay.go b/routes/relay/relay.go index 657ae77..0ecdd1a 100644 --- a/routes/relay/relay.go +++ b/routes/relay/relay.go @@ -1,7 +1,7 @@ package relay import ( - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "net/http" "net/http/httputil" @@ -46,14 +46,16 @@ func (m *filteringMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) m.handler.ServeHTTP(w, r) } -func (h *RelayHandler) RegisterRoutes(router *mux.Router) { +func (h *RelayHandler) RegisterRoutes(router chi.Router) { if !h.config.Security.EnableProxy { return } - r := router.PathPrefix("/relay").Subrouter() + r := chi.NewRouter() r.Use(newFilteringMiddleware()) - r.Path("").HandlerFunc(h.Any) + r.HandleFunc("/", h.Any) + + router.Mount("/relay", r) } func (h *RelayHandler) Any(w http.ResponseWriter, r *http.Request) { diff --git a/routes/settings.go b/routes/settings.go index d2739e2..7e1645f 100644 --- a/routes/settings.go +++ b/routes/settings.go @@ -3,6 +3,7 @@ package routes import ( "encoding/base64" "fmt" + "github.com/go-chi/chi/v5" "net/http" "sort" "strconv" @@ -11,7 +12,6 @@ import ( datastructure "github.com/duke-git/lancet/v2/datastructure/set" "github.com/emvi/logbuch" - "github.com/gorilla/mux" "github.com/gorilla/schema" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" @@ -67,16 +67,17 @@ func NewSettingsHandler( } } -func (h *SettingsHandler) RegisterRoutes(router *mux.Router) { - r := router.PathPrefix("/settings").Subrouter() +func (h *SettingsHandler) RegisterRoutes(router chi.Router) { + r := chi.NewRouter() r.Use( middlewares.NewAuthenticateMiddleware(h.userSrvc). WithRedirectTarget(defaultErrorRedirectTarget()). - WithRedirectErrorMessage("unauthorized"). - Handler, + WithRedirectErrorMessage("unauthorized").Handler, ) - r.Methods(http.MethodGet).HandlerFunc(h.GetIndex) - r.Methods(http.MethodPost).HandlerFunc(h.PostIndex) + r.Get("/", h.GetIndex) + r.Post("/", h.PostIndex) + + router.Mount("/settings", r) } func (h *SettingsHandler) GetIndex(w http.ResponseWriter, r *http.Request) { diff --git a/routes/subscription.go b/routes/subscription.go index f9e9f51..b56c708 100644 --- a/routes/subscription.go +++ b/routes/subscription.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" "github.com/emvi/logbuch" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/models" @@ -70,25 +70,27 @@ func NewSubscriptionHandler( // https://stripe.com/docs/billing/quickstart?lang=go -func (h *SubscriptionHandler) RegisterRoutes(router *mux.Router) { +func (h *SubscriptionHandler) RegisterRoutes(router chi.Router) { if !h.config.Subscriptions.Enabled { return } - subRouterPublic := router.PathPrefix("/subscription").Subrouter() - subRouterPublic.Path("/success").Methods(http.MethodGet).HandlerFunc(h.GetCheckoutSuccess) - subRouterPublic.Path("/cancel").Methods(http.MethodGet).HandlerFunc(h.GetCheckoutCancel) - subRouterPublic.Path("/webhook").Methods(http.MethodPost).HandlerFunc(h.PostWebhook) + subRouterPublic := chi.NewRouter() + subRouterPublic.Get("/success", h.GetCheckoutSuccess) + subRouterPublic.Get("/cancel", h.GetCheckoutCancel) + subRouterPublic.Post("/webhook", h.PostWebhook) - subRouterPrivate := subRouterPublic.PathPrefix("").Subrouter() + subRouterPrivate := chi.NewRouter() subRouterPrivate.Use( middlewares.NewAuthenticateMiddleware(h.userSrvc). WithRedirectTarget(defaultErrorRedirectTarget()). - WithRedirectErrorMessage("unauthorized"). - Handler, + WithRedirectErrorMessage("unauthorized").Handler, ) - subRouterPrivate.Path("/checkout").Methods(http.MethodPost).HandlerFunc(h.PostCheckout) - subRouterPrivate.Path("/portal").Methods(http.MethodPost).HandlerFunc(h.PostPortal) + subRouterPrivate.Post("/checkout", h.PostCheckout) + subRouterPrivate.Post("/portal", h.PostPortal) + + subRouterPublic.Mount("/", subRouterPrivate) + router.Mount("/subscription", subRouterPublic) } func (h *SubscriptionHandler) PostCheckout(w http.ResponseWriter, r *http.Request) { diff --git a/routes/summary.go b/routes/summary.go index 1575c89..5e01659 100644 --- a/routes/summary.go +++ b/routes/summary.go @@ -2,7 +2,7 @@ package routes import ( "fmt" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/helpers" "github.com/muety/wakapi/middlewares" @@ -30,20 +30,15 @@ func NewSummaryHandler(summaryService services.ISummaryService, userService serv } } -func (h *SummaryHandler) RegisterRoutes(router *mux.Router) { - r1 := router.PathPrefix("/summary").Subrouter() - r1.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc). +func (h *SummaryHandler) RegisterRoutes(router chi.Router) { + r := chi.NewRouter() + r.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc). WithRedirectTarget(defaultErrorRedirectTarget()). - WithRedirectErrorMessage("unauthorized"). - Handler) - r1.Methods(http.MethodGet).HandlerFunc(h.GetIndex) + WithRedirectErrorMessage("unauthorized").Handler, + ) + r.Get("/", h.GetIndex) - r2 := router.PathPrefix("/summary").Subrouter() - r2.Use(middlewares.NewAuthenticateMiddleware(h.userSrvc). - WithRedirectTarget(defaultErrorRedirectTarget()). - WithRedirectErrorMessage("unauthorized"). - Handler) - r2.Methods(http.MethodGet).HandlerFunc(h.GetIndex) + router.Mount("/summary", r) } func (h *SummaryHandler) GetIndex(w http.ResponseWriter, r *http.Request) { diff --git a/routes/utils/user_utils.go b/routes/utils/user_utils.go index b9edcc8..92702f2 100644 --- a/routes/utils/user_utils.go +++ b/routes/utils/user_utils.go @@ -2,7 +2,7 @@ package utils import ( "errors" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" conf "github.com/muety/wakapi/config" "github.com/muety/wakapi/middlewares" "github.com/muety/wakapi/models" @@ -20,24 +20,23 @@ func CheckEffectiveUser(w http.ResponseWriter, r *http.Request, userService serv return nil, err } - var vars = mux.Vars(r) - - if vars["user"] == "" { - vars["user"] = fallback + userParam := chi.URLParam(r, "user") + if userParam == "" { + userParam = fallback } authorizedUser := middlewares.GetPrincipal(r) if authorizedUser == nil { return respondError(http.StatusUnauthorized, conf.ErrUnauthorized) - } else if vars["user"] == "current" { + } else if userParam == "current" { return authorizedUser, nil } - if authorizedUser.ID != vars["user"] && !authorizedUser.IsAdmin { + if authorizedUser.ID != userParam && !authorizedUser.IsAdmin { return respondError(http.StatusUnauthorized, conf.ErrUnauthorized) } - requestedUser, err := userService.GetUserById(vars["user"]) + requestedUser, err := userService.GetUserById(userParam) if err != nil { return respondError(http.StatusNotFound, "user not found") } diff --git a/routes/utils/user_utils_test.go b/routes/utils/user_utils_test.go index ff02334..9474aeb 100644 --- a/routes/utils/user_utils_test.go +++ b/routes/utils/user_utils_test.go @@ -2,14 +2,14 @@ package utils import ( "context" - "fmt" - "github.com/gorilla/mux" + "github.com/go-chi/chi/v5" "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" + "strings" "testing" ) @@ -70,8 +70,8 @@ func mockUserAwareRequest(requestedUser, authorizedUser string) (*http.Request, 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 := httptest.NewRequest("GET", "http://localhost:3000/api/{user}/data", nil) + r = withUrlParam(r, "user", requestedUser) r = r.WithContext(context.WithValue(r.Context(), "principal", &testPrincipal)) userServiceMock := new(mocks.UserServiceMock) @@ -81,3 +81,12 @@ func mockUserAwareRequest(requestedUser, authorizedUser string) (*http.Request, return r, httptest.NewRecorder(), userServiceMock } + +func withUrlParam(r *http.Request, key, value string) *http.Request { + r.URL.RawPath = strings.Replace(r.URL.RawPath, "{"+key+"}", value, 1) + r.URL.Path = strings.Replace(r.URL.Path, "{"+key+"}", value, 1) + rctx := chi.NewRouteContext() + rctx.URLParams.Add(key, value) + r = r.WithContext(context.WithValue(r.Context(), chi.RouteCtxKey, rctx)) + return r +}