commit 1763ef4fc621e3b91ba2407999f42cca9efbb5ee Author: CentOS Sources Date: Tue Mar 28 10:13:04 2023 +0000 import grafana-9.0.9-2.el9 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ed8cc0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +SOURCES/grafana-9.0.9.tar.gz +SOURCES/grafana-vendor-9.0.9-1.tar.xz +SOURCES/grafana-webpack-9.0.9-1.tar.gz diff --git a/.grafana.metadata b/.grafana.metadata new file mode 100644 index 0000000..fb1fada --- /dev/null +++ b/.grafana.metadata @@ -0,0 +1,3 @@ +4676eecab36973d5b3cb7ba23b929364c91b7ed8 SOURCES/grafana-9.0.9.tar.gz +7f0a2e8ac4431208b57781f849d6f5b79d339468 SOURCES/grafana-vendor-9.0.9-1.tar.xz +08a5daeb99590879c606fb7e7badf7a80823990b SOURCES/grafana-webpack-9.0.9-1.tar.gz diff --git a/SOURCES/0001-update-grafana-cli-script-with-distro-specific-paths.patch b/SOURCES/0001-update-grafana-cli-script-with-distro-specific-paths.patch new file mode 100644 index 0000000..70ce0d5 --- /dev/null +++ b/SOURCES/0001-update-grafana-cli-script-with-distro-specific-paths.patch @@ -0,0 +1,64 @@ +From 2ad9b1bd641eab2daae9c461656a56c8c2688485 Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Wed, 22 Jun 2022 16:57:52 +0200 +Subject: [PATCH] update grafana-cli script with distro-specific paths and + switch to grafana user + + +diff --git a/packaging/wrappers/grafana-cli b/packaging/wrappers/grafana-cli +index dafa075a2c..eda358c425 100755 +--- a/packaging/wrappers/grafana-cli ++++ b/packaging/wrappers/grafana-cli +@@ -5,18 +5,19 @@ + # the system-wide Grafana configuration that was bundled with the package as we + # use the binary. + +-DEFAULT=/etc/default/grafana ++DEFAULT=/etc/sysconfig/grafana-server + + GRAFANA_HOME=/usr/share/grafana + CONF_DIR=/etc/grafana + DATA_DIR=/var/lib/grafana + PLUGINS_DIR=/var/lib/grafana/plugins + LOG_DIR=/var/log/grafana ++LIBEXEC_DIR=/usr/libexec/grafana + + CONF_FILE=$CONF_DIR/grafana.ini + PROVISIONING_CFG_DIR=$CONF_DIR/provisioning + +-EXECUTABLE=$GRAFANA_HOME/bin/grafana-cli ++EXECUTABLE=$LIBEXEC_DIR/grafana-cli + + if [ ! -x $EXECUTABLE ]; then + echo "Program not installed or not executable" +@@ -28,12 +29,21 @@ if [ -f "$DEFAULT" ]; then + . "$DEFAULT" + fi + +-OPTS="--homepath=${GRAFANA_HOME} \ +- --config=${CONF_FILE} \ +- --pluginsDir=${PLUGINS_DIR} \ +- --configOverrides='cfg:default.paths.provisioning=$PROVISIONING_CFG_DIR \ +- cfg:default.paths.data=${DATA_DIR} \ +- cfg:default.paths.logs=${LOG_DIR} \ +- cfg:default.paths.plugins=${PLUGINS_DIR}'" +- +-eval $EXECUTABLE "$OPTS" '$@' ++OPTS=("--homepath=${GRAFANA_HOME}" ++ "--config=${CONF_FILE}" ++ "--pluginsDir=${PLUGINS_DIR}" ++ "--configOverrides=cfg:default.paths.provisioning=$PROVISIONING_CFG_DIR \ ++ cfg:default.paths.data=${DATA_DIR} \ ++ cfg:default.paths.logs=${LOG_DIR} \ ++ cfg:default.paths.plugins=${PLUGINS_DIR}") ++ ++if [ "$(id -u)" -eq 0 ]; then ++ cd "${GRAFANA_HOME}" ++ exec runuser -u "${GRAFANA_USER}" -- "$EXECUTABLE" "${OPTS[@]}" "$@" ++elif [ "$(id -u -n)" = "${GRAFANA_USER}" ]; then ++ cd "${GRAFANA_HOME}" ++ exec "$EXECUTABLE" "${OPTS[@]}" "$@" ++else ++ echo "$0: please run this script as user \"${GRAFANA_USER}\" or root." ++ exit 5 ++fi diff --git a/SOURCES/0002-add-manpages.patch b/SOURCES/0002-add-manpages.patch new file mode 100644 index 0000000..9200276 --- /dev/null +++ b/SOURCES/0002-add-manpages.patch @@ -0,0 +1,161 @@ +From ecac3e25a416bd66b19bc3074f9583dfd965a919 Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Wed, 22 Jun 2022 17:01:09 +0200 +Subject: [PATCH] add manpages + + +diff --git a/docs/man/man1/grafana-cli.1 b/docs/man/man1/grafana-cli.1 +new file mode 100644 +index 0000000000..39c0d5cee0 +--- /dev/null ++++ b/docs/man/man1/grafana-cli.1 +@@ -0,0 +1,63 @@ ++.TH GRAFANA "1" "September 2022" "Grafana cli version 9.0.9" "User Commands" ++.SH NAME ++grafana-cli \- command line administration for the Grafana metrics dashboard and graph editor ++.SH DESCRIPTION ++.SS "NAME:" ++.IP ++grafana-cli ++.SS "USAGE:" ++.IP ++\fBgrafana\-cli\fP [\fIglobal options\fP] \fIcommand\fP [\fIcommand options\fP] [\fIarguments\fP...] ++.SS "COMMANDS:" ++.TP ++plugins ++Manage plugins for grafana ++.TP ++admin ++Grafana admin commands ++.TP ++cue ++Cue validation commands ++.TP ++help, h ++Shows a list of commands or help for one command ++.SS "GLOBAL OPTIONS:" ++.TP ++\fB\-\-pluginsDir\fR value ++path to the grafana plugin directory (default: "/var/lib/grafana/plugins") [$GF_PLUGIN_DIR] ++.TP ++\fB\-\-repo\fR value ++url to the plugin repository (default: "https://grafana.com/api/plugins") [$GF_PLUGIN_REPO] ++.TP ++\fB\-\-pluginUrl\fR value ++Full url to the plugin zip file instead of downloading the plugin from grafana.com/api [$GF_PLUGIN_URL] ++.TP ++\fB\-\-insecure\fR ++Skip TLS verification (insecure) (default: false) ++.TP ++\fB\-\-debug\fR ++Enable debug logging (default: false) ++.TP ++\fB\-\-configOverrides\fR value ++Configuration options to override defaults as a string. e.g. cfg:default.paths.log=/dev/null ++.TP ++\fB\-\-homepath\fR value ++Path to Grafana install/home path, defaults to working directory ++.TP ++\fB\-\-config\fR value ++Path to config file ++.TP ++\fB\-\-help\fR, \fB\-h\fR ++show help ++.TP ++\fB\-\-version\fR, \fB\-v\fR ++print the version ++.SH "SEE ALSO" ++Additional documentation for ++.B grafana-cli ++is available on-line at ++.BR http://docs.grafana.org/administration/cli/ . ++The full documentation for ++.B Grafana ++is available on-line at ++.BR http://docs.grafana.org/ . +diff --git a/docs/man/man1/grafana-server.1 b/docs/man/man1/grafana-server.1 +new file mode 100644 +index 0000000000..683a2369cc +--- /dev/null ++++ b/docs/man/man1/grafana-server.1 +@@ -0,0 +1,80 @@ ++.TH VERSION "1" "September 2022" "Version 9.0.9" "User Commands" ++.SH NAME ++grafana-server \- back-end server for the Grafana metrics dashboard and graph editor ++.SH DESCRIPTION ++.B grafana-server ++is the back-end server for the Grafana metrics dashboard and graph editor. ++The ++.B grafana-server ++program should not normally be run from the command line, ++except when testing or for development purposes. ++Rather it should be managed by ++.BR systemd . ++After installing Grafana, the systemd service should be enabled and started as follows: ++.P ++.in 1i ++.B systemctl daemon-reload ++.br ++.B systemctl enable grafana-server.service ++.br ++.B systemctl start grafana-server.service ++.in ++.P ++.SH OPTIONS ++The ++.B grafana-server ++configuration is specified in ++.BR /etc/grafana/grafana.ini ++and is well documented with comments. ++The command-line options listed below override options of ++the same (or similar) name in the configuration file. ++.P ++.HP ++\fB\-config\fR string ++.IP ++path to config file ++.HP ++\fB\-homepath\fR string ++.IP ++path to grafana install/home path, defaults to working directory ++.HP ++\fB\-packaging\fR string ++.IP ++describes the way Grafana was installed (default "unknown") ++.HP ++\fB\-pidfile\fR string ++.IP ++path to pid file ++.HP ++\fB\-profile\fR ++.IP ++Turn on pprof profiling ++.HP ++\fB\-profile\-addr\fR string ++.IP ++Define custom address for profiling (default "localhost") ++.HP ++\fB\-profile\-port\fR uint ++.IP ++Define custom port for profiling (default 6060) ++.HP ++\fB\-tracing\fR ++.IP ++Turn on tracing ++.HP ++\fB\-tracing\-file\fR string ++.IP ++Define tracing output file (default "trace.out") ++.TP ++\fB\-v\fR ++.IP ++prints current version and exits ++.TP ++\fB\-vv\fR ++.IP ++prints current version, all dependencies and exits ++.SH "SEE ALSO" ++The full documentation for ++.B Grafana ++is available on-line at ++.BR http://docs.grafana.org/ . diff --git a/SOURCES/0003-update-default-configuration.patch b/SOURCES/0003-update-default-configuration.patch new file mode 100644 index 0000000..6ef6de4 --- /dev/null +++ b/SOURCES/0003-update-default-configuration.patch @@ -0,0 +1,68 @@ +From a84194c2f7929bd78303daf04a56ab32cd9c4bb3 Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Wed, 22 Jun 2022 17:05:48 +0200 +Subject: [PATCH] update default configuration + + +diff --git a/conf/defaults.ini b/conf/defaults.ini +index dbb7143be4..4a3cf0a21d 100644 +--- a/conf/defaults.ini ++++ b/conf/defaults.ini +@@ -190,7 +190,7 @@ row_limit = 1000000 + # No ip addresses are being tracked, only simple counters to track + # running instances, dashboard and error counts. It is very helpful to us. + # Change this option to false to disable reporting. +-reporting_enabled = true ++reporting_enabled = false + + # The name of the distributor of the Grafana instance. Ex hosted-grafana, grafana-labs + reporting_distributor = grafana-labs +@@ -200,7 +200,7 @@ reporting_distributor = grafana-labs + # in some UI views to notify that a grafana update exists. + # This option does not cause any auto updates, nor send any information + # only a GET request to https://raw.githubusercontent.com/grafana/grafana/main/latest.json to get the latest version. +-check_for_updates = true ++check_for_updates = false + + # Set to false to disable all checks to https://grafana.com + # for new versions of plugins. The check is used +diff --git a/conf/sample.ini b/conf/sample.ini +index d44532f346..1ede932e1e 100644 +--- a/conf/sample.ini ++++ b/conf/sample.ini +@@ -196,7 +196,7 @@ + # No ip addresses are being tracked, only simple counters to track + # running instances, dashboard and error counts. It is very helpful to us. + # Change this option to false to disable reporting. +-;reporting_enabled = true ++;reporting_enabled = false + + # The name of the distributor of the Grafana instance. Ex hosted-grafana, grafana-labs + ;reporting_distributor = grafana-labs +@@ -206,7 +206,7 @@ + # in some UI views to notify that a grafana update exists. + # This option does not cause any auto updates, nor send any information + # only a GET request to https://raw.githubusercontent.com/grafana/grafana/main/latest.json to get the latest version. +-;check_for_updates = true ++;check_for_updates = false + + # Set to false to disable all checks to https://grafana.com + # for new versions of plugins. The check is used +@@ -338,7 +338,7 @@ + + # Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is 5 seconds. + # The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m. +-;min_refresh_interval = 5s ++min_refresh_interval = 1s + + # Path to the default home dashboard. If this value is empty, then Grafana uses StaticRootPath + "dashboards/home.json" + ;default_home_dashboard_path = +@@ -1028,7 +1028,7 @@ + ;enable_alpha = false + ;app_tls_skip_verify_insecure = false + # Enter a comma-separated list of plugin identifiers to identify plugins to load even if they are unsigned. Plugins with modified signatures are never loaded. +-;allow_loading_unsigned_plugins = ++allow_loading_unsigned_plugins = performancecopilot-pcp-app,pcp-redis-datasource,pcp-vector-datasource,pcp-bpftrace-datasource,pcp-flamegraph-panel,pcp-breadcrumbs-panel,pcp-troubleshooting-panel,performancecopilot-redis-datasource,performancecopilot-vector-datasource,performancecopilot-bpftrace-datasource,performancecopilot-flamegraph-panel,performancecopilot-breadcrumbs-panel,performancecopilot-troubleshooting-panel + # Enable or disable installing / uninstalling / updating plugins directly from within Grafana. + ;plugin_admin_enabled = false + ;plugin_admin_external_manage_enabled = false diff --git a/SOURCES/0004-remove-unused-backend-dependencies.patch b/SOURCES/0004-remove-unused-backend-dependencies.patch new file mode 100644 index 0000000..977ce5b --- /dev/null +++ b/SOURCES/0004-remove-unused-backend-dependencies.patch @@ -0,0 +1,143 @@ +From 7139240c52b69fde8b893bf73fb6a4910d65f30b Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Wed, 22 Jun 2022 17:18:56 +0200 +Subject: [PATCH] remove unused backend dependencies + +saml and gofpdf are not used in the OSS edition of Grafana +after editing `pkg/extensions/main.go`, run `go mod tidy` + +diff --git a/go.mod b/go.mod +index 951745c95f..5b1379fa98 100644 +--- a/go.mod ++++ b/go.mod +@@ -27,7 +27,6 @@ require ( + github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b + github.com/centrifugal/centrifuge v0.19.0 + github.com/cortexproject/cortex v1.10.1-0.20211014125347-85c378182d0d +- github.com/crewjam/saml v0.4.6-0.20210521115923-29c6295245bd + github.com/davecgh/go-spew v1.1.1 + github.com/denisenkom/go-mssqldb v0.12.0 + github.com/dop251/goja v0.0.0-20210804101310-32956a348b49 +@@ -63,7 +62,6 @@ require ( + github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 + github.com/jmespath/go-jmespath v0.4.0 + github.com/json-iterator/go v1.1.12 +- github.com/jung-kurt/gofpdf v1.16.2 + github.com/lib/pq v1.10.4 + github.com/linkedin/goavro/v2 v2.10.0 + github.com/m3db/prometheus_remote_client_golang v0.4.4 +@@ -191,7 +189,6 @@ require ( + github.com/josharian/intern v1.0.0 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect +- github.com/mattermost/xml-roundtrip-validator v0.1.0 // indirect + github.com/mattetti/filebuffer v1.0.1 // indirect + github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/miekg/dns v1.1.43 // indirect +diff --git a/go.sum b/go.sum +index 0f2ad00d37..19e3489ca1 100644 +--- a/go.sum ++++ b/go.sum +@@ -740,7 +740,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t + 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/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +-github.com/crewjam/httperr v0.2.0/go.mod h1:Jlz+Sg/XqBQhyMjdDiC+GNNRzZTD7x39Gu3pglZ5oH4= + github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= + github.com/cucumber/godog v0.8.1/go.mod h1:vSh3r/lM+psC1BPXvdkSEuNjmXfpVqrMGYAElF6hxnA= + github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= +@@ -766,7 +765,6 @@ github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2 + 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/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= + github.com/deepmap/oapi-codegen v1.6.0/go.mod h1:ryDa9AgbELGeB+YEXE1dR53yAjHwFvE9iAUlWl9Al3M= + github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= + github.com/deepmap/oapi-codegen v1.8.2/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= +@@ -923,7 +921,6 @@ github.com/fluent/fluent-bit-go v0.0.0-20190925192703-ea13c021720c/go.mod h1:WQX + github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= + github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= + github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +-github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c= + github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= + github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= + github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo= +@@ -1459,8 +1456,6 @@ github.com/grafana/grafana-plugin-sdk-go v0.138.0 h1:uJWNwHL4RoQF3axoi3RDSwoNu/K + github.com/grafana/grafana-plugin-sdk-go v0.138.0/go.mod h1:Y+Ps2sesZ62AyCnX+hzrYnyDQYe/ZZl+A8yKLOBm12c= + github.com/grafana/loki v1.6.2-0.20211015002020-7832783b1caa h1:+pXjAxavVR2FKKNsuuCXGCWEj8XGc1Af6SPiyBpzU2A= + github.com/grafana/loki v1.6.2-0.20211015002020-7832783b1caa/go.mod h1:0O8o/juxNSKN/e+DzWDTRkl7Zm8CkZcz0NDqEdojlrk= +-github.com/grafana/saml v0.0.0-20211007135653-aed1b2edd86b h1:YiSGp34F4V0G08HHx1cJBf2GVgwYAkXQjzuVs1t8jYk= +-github.com/grafana/saml v0.0.0-20211007135653-aed1b2edd86b/go.mod h1:q83kyQoMD0vhy+RzFLlbw0UgHJ6TAihQpuXvdFmm4s4= + github.com/grafana/sqlds/v2 v2.3.7/go.mod h1:c6ibxnxRVGxV/0YkEgvy7QpQH/lyifFyV7K/14xvdIs= + github.com/grafana/thema v0.0.0-20220523183731-72aebd14e751 h1:5PpsfN52XA0hxOjD/qQ0QNiEkp9Y9Tb+yz/Hj9fyL4M= + github.com/grafana/thema v0.0.0-20220523183731-72aebd14e751/go.mod h1:KuqTKX9lfM87uu9vt9DS/q+REqSrAm2xYMnBBvlmevA= +@@ -1766,7 +1761,6 @@ github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52Cu + github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= + github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= + github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +-github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= + github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= + github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= + github.com/joncrlsn/dque v2.2.1-0.20200515025108-956d14155fa2+incompatible/go.mod h1:hDZb8oMj3Kp8MxtbNLg9vrtAUDHjgI1yZvqivT4O8Iw= +@@ -1801,8 +1795,6 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V + github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= + github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= + github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +-github.com/jung-kurt/gofpdf v1.16.2 h1:jgbatWHfRlPYiK85qgevsZTHviWXKwB1TTiKdz5PtRc= +-github.com/jung-kurt/gofpdf v1.16.2/go.mod h1:1hl7y57EsiPAkLbOwzpzqgx1A30nQCk/YmFV8S2vmK0= + github.com/jwilder/encoding v0.0.0-20170811194829-b4e1701a28ef/go.mod h1:Ct9fl0F6iIOGgxJ5npU/IUOhOhqlVrGjyIZc8/MagT0= + github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= + github.com/kardianos/service v1.0.0/go.mod h1:8CzDhVuCuugtsHyZoTvsOBuvonN/UDBvl0kH+BUxvbo= +@@ -1930,8 +1922,6 @@ github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHef + github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= + github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= + github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= +-github.com/mattermost/xml-roundtrip-validator v0.1.0 h1:RXbVD2UAl7A7nOTR4u7E3ILa4IbtvKBHw64LDsmu9hU= +-github.com/mattermost/xml-roundtrip-validator v0.1.0/go.mod h1:qccnGMcpgwcNaBnxqpJpWWUiPNr5H3O8eDgGV9gT5To= + github.com/mattetti/filebuffer v1.0.1 h1:gG7pyfnSIZCxdoKq+cPa8T0hhYtD9NxCdI4D7PTjRLM= + github.com/mattetti/filebuffer v1.0.1/go.mod h1:YdMURNDOttIiruleeVr6f56OrMc+MydEnTcXwtkxNVs= + github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +@@ -2239,7 +2229,6 @@ github.com/peterh/liner v1.0.1-0.20180619022028-8c1271fcf47f/go.mod h1:xIteQHvHu + github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= + github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= + github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +-github.com/phpdave11/gofpdi v1.0.7/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= + github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= + github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= + github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +@@ -2433,7 +2422,6 @@ github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= + github.com/rs/zerolog v1.4.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= + 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/russellhaering/goxmldsig v1.1.0/go.mod h1:QK8GhXPB3+AfuCrfo0oRISa9NfzeCpWmxeGnqEpDF9o= + github.com/russellhaering/goxmldsig v1.1.1 h1:vI0r2osGF1A9PLvsGdPUAGwEIrKa4Pj5sesSBsebIxM= + github.com/russellhaering/goxmldsig v1.1.1/go.mod h1:gM4MDENBQf7M+V824SGfyIUVFWydB7n0KkEubVJl+Tw= + github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= +@@ -2747,7 +2735,6 @@ github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX + github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= + github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= + github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +-github.com/zenazn/goji v1.0.1/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= + github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs= + github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= + gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b/go.mod h1:T3BPAOm2cqquPa0MKWeNkmOM5RQsRhkrwMWonFMN7fE= +diff --git a/pkg/extensions/main.go b/pkg/extensions/main.go +index adcaff8ca6..c3110f590e 100644 +--- a/pkg/extensions/main.go ++++ b/pkg/extensions/main.go +@@ -9,7 +9,6 @@ import ( + _ "github.com/Azure/go-autorest/autorest/adal" + _ "github.com/beevik/etree" + _ "github.com/cortexproject/cortex/pkg/util" +- _ "github.com/crewjam/saml" + _ "github.com/gobwas/glob" + _ "github.com/googleapis/gax-go/v2" + _ "github.com/grafana/dskit/backoff" +@@ -17,7 +16,6 @@ import ( + _ "github.com/grafana/loki/clients/pkg/promtail/client" + _ "github.com/grafana/loki/pkg/logproto" + _ "github.com/grpc-ecosystem/go-grpc-middleware" +- _ "github.com/jung-kurt/gofpdf" + _ "github.com/linkedin/goavro/v2" + _ "github.com/m3db/prometheus_remote_client_golang/promremote" + _ "github.com/pkg/errors" diff --git a/SOURCES/0005-remove-unused-frontend-crypto.patch b/SOURCES/0005-remove-unused-frontend-crypto.patch new file mode 100644 index 0000000..b44ca4a --- /dev/null +++ b/SOURCES/0005-remove-unused-frontend-crypto.patch @@ -0,0 +1,877 @@ +From 0ee0768a196ba12b860b4a0920f729d5ce50ea3e Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Wed, 22 Jun 2022 17:36:47 +0200 +Subject: [PATCH] remove unused frontend crypto + +update `package.json` and then run `yarn install` to update the +`yarn.lock` lockfile + +diff --git a/package.json b/package.json +index 5e2875090b..137a307f14 100644 +--- a/package.json ++++ b/package.json +@@ -396,6 +396,9 @@ + "whatwg-fetch": "3.6.2" + }, + "resolutions": { ++ "crypto-browserify": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz", ++ "selfsigned": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz", ++ "http-signature": "https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz", + "underscore": "1.13.3", + "@types/slate": "0.47.9", + "@microsoft/api-extractor-model": "7.17.3", +diff --git a/yarn.lock b/yarn.lock +index 8132e0f942..b41c0efb1b 100644 +--- a/yarn.lock ++++ b/yarn.lock +@@ -12256,34 +12256,6 @@ __metadata: + languageName: node + linkType: hard + +-"asn1.js@npm:^5.2.0": +- version: 5.4.1 +- resolution: "asn1.js@npm:5.4.1" +- dependencies: +- bn.js: ^4.0.0 +- inherits: ^2.0.1 +- minimalistic-assert: ^1.0.0 +- safer-buffer: ^2.1.0 +- checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a +- languageName: node +- linkType: hard +- +-"asn1@npm:~0.2.3": +- version: 0.2.4 +- resolution: "asn1@npm:0.2.4" +- dependencies: +- safer-buffer: ~2.1.0 +- checksum: aa5d6f77b1e0597df53824c68cfe82d1d89ce41cb3520148611f025fbb3101b2d25dd6a40ad34e4fac10f6b19ed5e8628cd4b7d212261e80e83f02b39ee5663c +- languageName: node +- linkType: hard +- +-"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": +- version: 1.0.0 +- resolution: "assert-plus@npm:1.0.0" +- checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 +- languageName: node +- linkType: hard +- + "assert@npm:2.0.0": + version: 2.0.0 + resolution: "assert@npm:2.0.0" +@@ -12870,15 +12842,6 @@ __metadata: + languageName: node + linkType: hard + +-"bcrypt-pbkdf@npm:^1.0.0": +- version: 1.0.2 +- resolution: "bcrypt-pbkdf@npm:1.0.2" +- dependencies: +- tweetnacl: ^0.14.3 +- checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 +- languageName: node +- linkType: hard +- + "before-after-hook@npm:^2.2.0": + version: 2.2.2 + resolution: "before-after-hook@npm:2.2.2" +@@ -12970,20 +12933,6 @@ __metadata: + languageName: node + linkType: hard + +-"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": +- version: 4.12.0 +- resolution: "bn.js@npm:4.12.0" +- checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 +- languageName: node +- linkType: hard +- +-"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": +- version: 5.2.0 +- resolution: "bn.js@npm:5.2.0" +- checksum: 6117170393200f68b35a061ecbf55d01dd989302e7b3c798a3012354fa638d124f0b2f79e63f77be5556be80322a09c40339eda6413ba7468524c0b6d4b4cb7a +- languageName: node +- linkType: hard +- + "body-parser@npm:1.19.0": + version: 1.19.0 + resolution: "body-parser@npm:1.19.0" +@@ -13108,13 +13057,6 @@ __metadata: + languageName: node + linkType: hard + +-"brorand@npm:^1.0.1, brorand@npm:^1.1.0": +- version: 1.1.0 +- resolution: "brorand@npm:1.1.0" +- checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be +- languageName: node +- linkType: hard +- + "browser-process-hrtime@npm:^1.0.0": + version: 1.0.0 + resolution: "browser-process-hrtime@npm:1.0.0" +@@ -13129,70 +13071,6 @@ __metadata: + languageName: node + linkType: hard + +-"browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4": +- version: 1.2.0 +- resolution: "browserify-aes@npm:1.2.0" +- dependencies: +- buffer-xor: ^1.0.3 +- cipher-base: ^1.0.0 +- create-hash: ^1.1.0 +- evp_bytestokey: ^1.0.3 +- inherits: ^2.0.1 +- safe-buffer: ^5.0.1 +- checksum: 4a17c3eb55a2aa61c934c286f34921933086bf6d67f02d4adb09fcc6f2fc93977b47d9d884c25619144fccd47b3b3a399e1ad8b3ff5a346be47270114bcf7104 +- languageName: node +- linkType: hard +- +-"browserify-cipher@npm:^1.0.0": +- version: 1.0.1 +- resolution: "browserify-cipher@npm:1.0.1" +- dependencies: +- browserify-aes: ^1.0.4 +- browserify-des: ^1.0.0 +- evp_bytestokey: ^1.0.0 +- checksum: 2d8500acf1ee535e6bebe808f7a20e4c3a9e2ed1a6885fff1facbfd201ac013ef030422bec65ca9ece8ffe82b03ca580421463f9c45af6c8415fd629f4118c13 +- languageName: node +- linkType: hard +- +-"browserify-des@npm:^1.0.0": +- version: 1.0.2 +- resolution: "browserify-des@npm:1.0.2" +- dependencies: +- cipher-base: ^1.0.1 +- des.js: ^1.0.0 +- inherits: ^2.0.1 +- safe-buffer: ^5.1.2 +- checksum: b15a3e358a1d78a3b62ddc06c845d02afde6fc826dab23f1b9c016e643e7b1fda41de628d2110b712f6a44fb10cbc1800bc6872a03ddd363fb50768e010395b7 +- languageName: node +- linkType: hard +- +-"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": +- version: 4.1.0 +- resolution: "browserify-rsa@npm:4.1.0" +- dependencies: +- bn.js: ^5.0.0 +- randombytes: ^2.0.1 +- checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 +- languageName: node +- linkType: hard +- +-"browserify-sign@npm:^4.0.0": +- version: 4.2.1 +- resolution: "browserify-sign@npm:4.2.1" +- dependencies: +- bn.js: ^5.1.1 +- browserify-rsa: ^4.0.1 +- create-hash: ^1.2.0 +- create-hmac: ^1.1.7 +- elliptic: ^6.5.3 +- inherits: ^2.0.4 +- parse-asn1: ^5.1.5 +- readable-stream: ^3.6.0 +- safe-buffer: ^5.2.0 +- checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 +- languageName: node +- linkType: hard +- + "browserify-zlib@npm:^0.2.0": + version: 0.2.0 + resolution: "browserify-zlib@npm:0.2.0" +@@ -13294,13 +13172,6 @@ __metadata: + languageName: node + linkType: hard + +-"buffer-xor@npm:^1.0.3": +- version: 1.0.3 +- resolution: "buffer-xor@npm:1.0.3" +- checksum: 10c520df29d62fa6e785e2800e586a20fc4f6dfad84bcdbd12e1e8a83856de1cb75c7ebd7abe6d036bbfab738a6cf18a3ae9c8e5a2e2eb3167ca7399ce65373a +- languageName: node +- linkType: hard +- + "buffer@npm:^4.3.0": + version: 4.9.2 + resolution: "buffer@npm:4.9.2" +@@ -13896,16 +13767,6 @@ __metadata: + languageName: node + linkType: hard + +-"cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": +- version: 1.0.4 +- resolution: "cipher-base@npm:1.0.4" +- dependencies: +- inherits: ^2.0.1 +- safe-buffer: ^5.0.1 +- checksum: 47d3568dbc17431a339bad1fe7dff83ac0891be8206911ace3d3b818fc695f376df809bea406e759cdea07fff4b454fa25f1013e648851bec790c1d75763032e +- languageName: node +- linkType: hard +- + "cjs-module-lexer@npm:^1.0.0": + version: 1.2.2 + resolution: "cjs-module-lexer@npm:1.2.2" +@@ -14806,13 +14667,6 @@ __metadata: + languageName: node + linkType: hard + +-"core-util-is@npm:1.0.2": +- version: 1.0.2 +- resolution: "core-util-is@npm:1.0.2" +- checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab +- languageName: node +- linkType: hard +- + "core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" +@@ -14882,16 +14736,6 @@ __metadata: + languageName: node + linkType: hard + +-"create-ecdh@npm:^4.0.0": +- version: 4.0.4 +- resolution: "create-ecdh@npm:4.0.4" +- dependencies: +- bn.js: ^4.1.0 +- elliptic: ^6.5.3 +- checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b +- languageName: node +- linkType: hard +- + "create-emotion@npm:^10.0.14, create-emotion@npm:^10.0.27": + version: 10.0.27 + resolution: "create-emotion@npm:10.0.27" +@@ -14904,33 +14748,6 @@ __metadata: + languageName: node + linkType: hard + +-"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": +- version: 1.2.0 +- resolution: "create-hash@npm:1.2.0" +- dependencies: +- cipher-base: ^1.0.1 +- inherits: ^2.0.1 +- md5.js: ^1.3.4 +- ripemd160: ^2.0.1 +- sha.js: ^2.4.0 +- checksum: 02a6ae3bb9cd4afee3fabd846c1d8426a0e6b495560a977ba46120c473cb283be6aa1cace76b5f927cf4e499c6146fb798253e48e83d522feba807d6b722eaa9 +- languageName: node +- linkType: hard +- +-"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": +- version: 1.1.7 +- resolution: "create-hmac@npm:1.1.7" +- dependencies: +- cipher-base: ^1.0.3 +- create-hash: ^1.1.0 +- inherits: ^2.0.1 +- ripemd160: ^2.0.0 +- safe-buffer: ^5.0.1 +- sha.js: ^2.4.8 +- checksum: ba12bb2257b585a0396108c72830e85f882ab659c3320c83584b1037f8ab72415095167ced80dc4ce8e446a8ecc4b2acf36d87befe0707d73b26cf9dc77440ed +- languageName: node +- linkType: hard +- + "create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" +@@ -14962,22 +14779,10 @@ __metadata: + languageName: node + linkType: hard + +-"crypto-browserify@npm:^3.11.0": +- version: 3.12.0 +- resolution: "crypto-browserify@npm:3.12.0" +- dependencies: +- browserify-cipher: ^1.0.0 +- browserify-sign: ^4.0.0 +- create-ecdh: ^4.0.0 +- create-hash: ^1.1.0 +- create-hmac: ^1.1.0 +- diffie-hellman: ^5.0.0 +- inherits: ^2.0.1 +- pbkdf2: ^3.0.3 +- public-encrypt: ^4.0.0 +- randombytes: ^2.0.0 +- randomfill: ^1.0.3 +- checksum: c1609af82605474262f3eaa07daa0b2140026bd264ab316d4bf1170272570dbe02f0c49e29407fe0d3634f96c507c27a19a6765fb856fed854a625f9d15618e2 ++"crypto-browserify@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz": ++ version: 1.1.3 ++ resolution: "crypto-browserify@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz" ++ checksum: e233cb660c0eac1172e3c4da249aeaae92b222e9b870d64a427c7212833a1634e56e2f7601989b1a6a6cd0e8841ff3776cd18f8b56dfc20257b893987d624920 + languageName: node + linkType: hard + +@@ -15928,15 +15733,6 @@ __metadata: + languageName: node + linkType: hard + +-"dashdash@npm:^1.12.0": +- version: 1.14.1 +- resolution: "dashdash@npm:1.14.1" +- dependencies: +- assert-plus: ^1.0.0 +- checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 +- languageName: node +- linkType: hard +- + "data-urls@npm:^2.0.0": + version: 2.0.0 + resolution: "data-urls@npm:2.0.0" +@@ -16251,16 +16047,6 @@ __metadata: + languageName: node + linkType: hard + +-"des.js@npm:^1.0.0": +- version: 1.0.1 +- resolution: "des.js@npm:1.0.1" +- dependencies: +- inherits: ^2.0.1 +- minimalistic-assert: ^1.0.0 +- checksum: 1ec2eedd7ed6bd61dd5e0519fd4c96124e93bb22de8a9d211b02d63e5dd152824853d919bb2090f965cc0e3eb9c515950a9836b332020d810f9c71feb0fd7df4 +- languageName: node +- linkType: hard +- + "destroy@npm:~1.0.4": + version: 1.0.4 + resolution: "destroy@npm:1.0.4" +@@ -16397,17 +16183,6 @@ __metadata: + languageName: node + linkType: hard + +-"diffie-hellman@npm:^5.0.0": +- version: 5.0.3 +- resolution: "diffie-hellman@npm:5.0.3" +- dependencies: +- bn.js: ^4.1.0 +- miller-rabin: ^4.0.0 +- randombytes: ^2.0.0 +- checksum: 0e620f322170c41076e70181dd1c24e23b08b47dbb92a22a644f3b89b6d3834b0f8ee19e37916164e5eb1ee26d2aa836d6129f92723995267250a0b541811065 +- languageName: node +- linkType: hard +- + "dir-glob@npm:^2.2.2": + version: 2.2.2 + resolution: "dir-glob@npm:2.2.2" +@@ -16694,16 +16469,6 @@ __metadata: + languageName: node + linkType: hard + +-"ecc-jsbn@npm:~0.1.1": +- version: 0.1.2 +- resolution: "ecc-jsbn@npm:0.1.2" +- dependencies: +- jsbn: ~0.1.0 +- safer-buffer: ^2.1.0 +- checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a +- languageName: node +- linkType: hard +- + "ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" +@@ -16748,21 +16513,6 @@ __metadata: + languageName: node + linkType: hard + +-"elliptic@npm:^6.5.3": +- version: 6.5.4 +- resolution: "elliptic@npm:6.5.4" +- dependencies: +- bn.js: ^4.11.9 +- brorand: ^1.1.0 +- hash.js: ^1.0.0 +- hmac-drbg: ^1.0.1 +- inherits: ^2.0.4 +- minimalistic-assert: ^1.0.1 +- minimalistic-crypto-utils: ^1.0.1 +- checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 +- languageName: node +- linkType: hard +- + "emitter-component@npm:^1.1.1": + version: 1.1.1 + resolution: "emitter-component@npm:1.1.1" +@@ -17716,17 +17466,6 @@ __metadata: + languageName: node + linkType: hard + +-"evp_bytestokey@npm:^1.0.0, evp_bytestokey@npm:^1.0.3": +- version: 1.0.3 +- resolution: "evp_bytestokey@npm:1.0.3" +- dependencies: +- md5.js: ^1.3.4 +- node-gyp: latest +- safe-buffer: ^5.1.1 +- checksum: ad4e1577f1a6b721c7800dcc7c733fe01f6c310732bb5bf2240245c2a5b45a38518b91d8be2c610611623160b9d1c0e91f1ce96d639f8b53e8894625cf20fa45 +- languageName: node +- linkType: hard +- + "exec-sh@npm:^0.3.2": + version: 0.3.6 + resolution: "exec-sh@npm:0.3.6" +@@ -18006,20 +17745,6 @@ __metadata: + languageName: node + linkType: hard + +-"extsprintf@npm:1.3.0": +- version: 1.3.0 +- resolution: "extsprintf@npm:1.3.0" +- checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 +- languageName: node +- linkType: hard +- +-"extsprintf@npm:^1.2.0": +- version: 1.4.0 +- resolution: "extsprintf@npm:1.4.0" +- checksum: 184dc8a413eb4b1ff16bdce797340e7ded4d28511d56a1c9afa5a95bcff6ace154063823eaf0206dbbb0d14059d74f382a15c34b7c0636fa74a7e681295eb67e +- languageName: node +- linkType: hard +- + "fast-deep-equal@npm:^3.0.0, fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" +@@ -19046,15 +18771,6 @@ __metadata: + languageName: node + linkType: hard + +-"getpass@npm:^0.1.1": +- version: 0.1.7 +- resolution: "getpass@npm:0.1.7" +- dependencies: +- assert-plus: ^1.0.0 +- checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 +- languageName: node +- linkType: hard +- + "git-raw-commits@npm:^2.0.8": + version: 2.0.10 + resolution: "git-raw-commits@npm:2.0.10" +@@ -19887,27 +19603,6 @@ __metadata: + languageName: node + linkType: hard + +-"hash-base@npm:^3.0.0": +- version: 3.1.0 +- resolution: "hash-base@npm:3.1.0" +- dependencies: +- inherits: ^2.0.4 +- readable-stream: ^3.6.0 +- safe-buffer: ^5.2.0 +- checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc +- languageName: node +- linkType: hard +- +-"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": +- version: 1.1.7 +- resolution: "hash.js@npm:1.1.7" +- dependencies: +- inherits: ^2.0.3 +- minimalistic-assert: ^1.0.1 +- checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f +- languageName: node +- linkType: hard +- + "hast-to-hyperscript@npm:^9.0.0": + version: 9.0.1 + resolution: "hast-to-hyperscript@npm:9.0.1" +@@ -20043,17 +19738,6 @@ __metadata: + languageName: node + linkType: hard + +-"hmac-drbg@npm:^1.0.1": +- version: 1.0.1 +- resolution: "hmac-drbg@npm:1.0.1" +- dependencies: +- hash.js: ^1.0.3 +- minimalistic-assert: ^1.0.0 +- minimalistic-crypto-utils: ^1.0.1 +- checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 +- languageName: node +- linkType: hard +- + "hoist-non-react-statics@npm:3.3.2, hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" +@@ -20394,25 +20078,10 @@ __metadata: + languageName: node + linkType: hard + +-"http-signature@npm:~1.2.0": +- version: 1.2.0 +- resolution: "http-signature@npm:1.2.0" +- dependencies: +- assert-plus: ^1.0.0 +- jsprim: ^1.2.2 +- sshpk: ^1.7.0 +- checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c +- languageName: node +- linkType: hard +- +-"http-signature@npm:~1.3.6": +- version: 1.3.6 +- resolution: "http-signature@npm:1.3.6" +- dependencies: +- assert-plus: ^1.0.0 +- jsprim: ^2.0.2 +- sshpk: ^1.14.1 +- checksum: 10be2af4764e71fee0281392937050201ee576ac755c543f570d6d87134ce5e858663fe999a7adb3e4e368e1e356d0d7fec6b9542295b875726ff615188e7a0c ++"http-signature@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz": ++ version: 1.1.3 ++ resolution: "http-signature@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz" ++ checksum: 78b64605540e2d25bede2d74ec9e7740ab9a466c9a562ae3a8ccc7e07e26e601a013859c94adf890679403cd337b9690f598d64bc4fbc1d2eaa2f27241ca08a1 + languageName: node + linkType: hard + +@@ -22562,13 +22231,6 @@ __metadata: + languageName: node + linkType: hard + +-"jsbn@npm:~0.1.0": +- version: 0.1.1 +- resolution: "jsbn@npm:0.1.1" +- checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 +- languageName: node +- linkType: hard +- + "jsdoc-type-pratt-parser@npm:~2.2.5": + version: 2.2.5 + resolution: "jsdoc-type-pratt-parser@npm:2.2.5" +@@ -22683,13 +22345,6 @@ __metadata: + languageName: node + linkType: hard + +-"json-schema@npm:0.2.3, json-schema@npm:0.4.0": +- version: 0.4.0 +- resolution: "json-schema@npm:0.4.0" +- checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 +- languageName: node +- linkType: hard +- + "json-source-map@npm:0.6.1": + version: 0.6.1 + resolution: "json-source-map@npm:0.6.1" +@@ -22793,30 +22448,6 @@ __metadata: + languageName: node + linkType: hard + +-"jsprim@npm:^1.2.2": +- version: 1.4.1 +- resolution: "jsprim@npm:1.4.1" +- dependencies: +- assert-plus: 1.0.0 +- extsprintf: 1.3.0 +- json-schema: 0.2.3 +- verror: 1.10.0 +- checksum: 6bcb20ec265ae18bb48e540a6da2c65f9c844f7522712d6dfcb01039527a49414816f4869000493363f1e1ea96cbad00e46188d5ecc78257a19f152467587373 +- languageName: node +- linkType: hard +- +-"jsprim@npm:^2.0.2": +- version: 2.0.2 +- resolution: "jsprim@npm:2.0.2" +- dependencies: +- assert-plus: 1.0.0 +- extsprintf: 1.3.0 +- json-schema: 0.4.0 +- verror: 1.10.0 +- checksum: d175f6b1991e160cb0aa39bc857da780e035611986b5492f32395411879fdaf4e513d98677f08f7352dac93a16b66b8361c674b86a3fa406e2e7af6b26321838 +- languageName: node +- linkType: hard +- + "jsurl@npm:^0.1.5": + version: 0.1.5 + resolution: "jsurl@npm:0.1.5" +@@ -23818,17 +23449,6 @@ __metadata: + languageName: node + linkType: hard + +-"md5.js@npm:^1.3.4": +- version: 1.3.5 +- resolution: "md5.js@npm:1.3.5" +- dependencies: +- hash-base: ^3.0.0 +- inherits: ^2.0.1 +- safe-buffer: ^5.1.2 +- checksum: 098494d885684bcc4f92294b18ba61b7bd353c23147fbc4688c75b45cb8590f5a95fd4584d742415dcc52487f7a1ef6ea611cfa1543b0dc4492fe026357f3f0c +- languageName: node +- linkType: hard +- + "mdast-squeeze-paragraphs@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-squeeze-paragraphs@npm:4.0.0" +@@ -24108,18 +23728,6 @@ __metadata: + languageName: node + linkType: hard + +-"miller-rabin@npm:^4.0.0": +- version: 4.0.1 +- resolution: "miller-rabin@npm:4.0.1" +- dependencies: +- bn.js: ^4.0.0 +- brorand: ^1.0.1 +- bin: +- miller-rabin: bin/miller-rabin +- checksum: 00cd1ab838ac49b03f236cc32a14d29d7d28637a53096bf5c6246a032a37749c9bd9ce7360cbf55b41b89b7d649824949ff12bc8eee29ac77c6b38eada619ece +- languageName: node +- linkType: hard +- + "mime-db@npm:1.50.0, mime-db@npm:>= 1.43.0 < 2": + version: 1.50.0 + resolution: "mime-db@npm:1.50.0" +@@ -24247,20 +23855,13 @@ __metadata: + languageName: node + linkType: hard + +-"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": ++"minimalistic-assert@npm:^1.0.0": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +-"minimalistic-crypto-utils@npm:^1.0.1": +- version: 1.0.1 +- resolution: "minimalistic-crypto-utils@npm:1.0.1" +- checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed +- languageName: node +- linkType: hard +- + "minimatch@npm:3.0.4, minimatch@npm:^3.0.4": + version: 3.0.4 + resolution: "minimatch@npm:3.0.4" +@@ -24903,13 +24504,6 @@ __metadata: + languageName: node + linkType: hard + +-"node-forge@npm:^1": +- version: 1.3.1 +- resolution: "node-forge@npm:1.3.1" +- checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 +- languageName: node +- linkType: hard +- + "node-gettext@npm:^3.0.0": + version: 3.0.0 + resolution: "node-gettext@npm:3.0.0" +@@ -26024,19 +25618,6 @@ __metadata: + languageName: node + linkType: hard + +-"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": +- version: 5.1.6 +- resolution: "parse-asn1@npm:5.1.6" +- dependencies: +- asn1.js: ^5.2.0 +- browserify-aes: ^1.0.0 +- evp_bytestokey: ^1.0.0 +- pbkdf2: ^3.0.3 +- safe-buffer: ^5.1.1 +- checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 +- languageName: node +- linkType: hard +- + "parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" +@@ -26258,19 +25839,6 @@ __metadata: + languageName: node + linkType: hard + +-"pbkdf2@npm:^3.0.3": +- version: 3.1.2 +- resolution: "pbkdf2@npm:3.1.2" +- dependencies: +- create-hash: ^1.1.2 +- create-hmac: ^1.1.4 +- ripemd160: ^2.0.1 +- safe-buffer: ^5.0.1 +- sha.js: ^2.4.8 +- checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 +- languageName: node +- linkType: hard +- + "pend@npm:~1.2.0": + version: 1.2.0 + resolution: "pend@npm:1.2.0" +@@ -27959,20 +27527,6 @@ __metadata: + languageName: node + linkType: hard + +-"public-encrypt@npm:^4.0.0": +- version: 4.0.3 +- resolution: "public-encrypt@npm:4.0.3" +- dependencies: +- bn.js: ^4.1.0 +- browserify-rsa: ^4.0.0 +- create-hash: ^1.1.0 +- parse-asn1: ^5.0.0 +- randombytes: ^2.0.1 +- safe-buffer: ^5.1.2 +- checksum: 215d446e43cef021a20b67c1df455e5eea134af0b1f9b8a35f9e850abf32991b0c307327bc5b9bc07162c288d5cdb3d4a783ea6c6640979ed7b5017e3e0c9935 +- languageName: node +- linkType: hard +- + "pump@npm:^2.0.0": + version: 2.0.1 + resolution: "pump@npm:2.0.1" +@@ -28181,7 +27735,7 @@ __metadata: + languageName: node + linkType: hard + +-"randombytes@npm:^2.0.0, randombytes@npm:^2.0.1, randombytes@npm:^2.0.5, randombytes@npm:^2.1.0": ++"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: +@@ -28190,16 +27744,6 @@ __metadata: + languageName: node + linkType: hard + +-"randomfill@npm:^1.0.3": +- version: 1.0.4 +- resolution: "randomfill@npm:1.0.4" +- dependencies: +- randombytes: ^2.0.5 +- safe-buffer: ^5.1.0 +- checksum: 33734bb578a868d29ee1b8555e21a36711db084065d94e019a6d03caa67debef8d6a1bfd06a2b597e32901ddc761ab483a85393f0d9a75838f1912461d4dbfc7 +- languageName: node +- linkType: hard +- + "range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" +@@ -30443,16 +29987,6 @@ __metadata: + languageName: node + linkType: hard + +-"ripemd160@npm:^2.0.0, ripemd160@npm:^2.0.1": +- version: 2.0.2 +- resolution: "ripemd160@npm:2.0.2" +- dependencies: +- hash-base: ^3.0.0 +- inherits: ^2.0.1 +- checksum: 006accc40578ee2beae382757c4ce2908a826b27e2b079efdcd2959ee544ddf210b7b5d7d5e80467807604244e7388427330f5c6d4cd61e6edaddc5773ccc393 +- languageName: node +- linkType: hard +- + "rollup-plugin-copy@npm:3.4.0": + version: 3.4.0 + resolution: "rollup-plugin-copy@npm:3.4.0" +@@ -30638,7 +30172,7 @@ __metadata: + languageName: node + linkType: hard + +-"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": ++"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 +@@ -30654,7 +30188,7 @@ __metadata: + languageName: node + linkType: hard + +-"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": ++"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 +@@ -30891,12 +30425,10 @@ __metadata: + languageName: node + linkType: hard + +-"selfsigned@npm:^2.0.1": +- version: 2.0.1 +- resolution: "selfsigned@npm:2.0.1" +- dependencies: +- node-forge: ^1 +- checksum: 864e65c2f31ca877bce3ccdaa3bdef5e1e992b63b2a03641e00c24cd305bf2acce093431d1fed2e5ae9f526558db4be5e90baa2b3474c0428fcf7e25cc86ac93 ++"selfsigned@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz": ++ version: 1.1.3 ++ resolution: "selfsigned@https://registry.yarnpkg.com/@favware/skip-dependency/-/skip-dependency-1.1.3.tgz" ++ checksum: 4988a0dbdf123fb808194a6198f5951e2df711de6fd967d72a8876baccaa23d5c260efb8f1dbfbc5bf1f852e81f897ad09267908977ab94862867ef971a3d48d + languageName: node + linkType: hard + +@@ -31133,18 +30665,6 @@ __metadata: + languageName: node + linkType: hard + +-"sha.js@npm:^2.4.0, sha.js@npm:^2.4.8": +- version: 2.4.11 +- resolution: "sha.js@npm:2.4.11" +- dependencies: +- inherits: ^2.0.1 +- safe-buffer: ^5.0.1 +- bin: +- sha.js: ./bin.js +- checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 +- languageName: node +- linkType: hard +- + "shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" +@@ -31830,27 +31350,6 @@ __metadata: + languageName: node + linkType: hard + +-"sshpk@npm:^1.14.1, sshpk@npm:^1.7.0": +- version: 1.16.1 +- resolution: "sshpk@npm:1.16.1" +- dependencies: +- asn1: ~0.2.3 +- assert-plus: ^1.0.0 +- bcrypt-pbkdf: ^1.0.0 +- dashdash: ^1.12.0 +- ecc-jsbn: ~0.1.1 +- getpass: ^0.1.1 +- jsbn: ~0.1.0 +- safer-buffer: ^2.0.2 +- tweetnacl: ~0.14.0 +- bin: +- sshpk-conv: bin/sshpk-conv +- sshpk-sign: bin/sshpk-sign +- sshpk-verify: bin/sshpk-verify +- checksum: 5e76afd1cedc780256f688b7c09327a8a650902d18e284dfeac97489a735299b03c3e72c6e8d22af03dbbe4d6f123fdfd5f3c4ed6bedbec72b9529a55051b857 +- languageName: node +- linkType: hard +- + "ssri@npm:^6.0.1": + version: 6.0.2 + resolution: "ssri@npm:6.0.2" +@@ -33509,13 +33008,6 @@ __metadata: + languageName: node + linkType: hard + +-"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": +- version: 0.14.5 +- resolution: "tweetnacl@npm:0.14.5" +- checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 +- languageName: node +- linkType: hard +- + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" +@@ -34329,17 +33821,6 @@ __metadata: + languageName: node + linkType: soft + +-"verror@npm:1.10.0": +- version: 1.10.0 +- resolution: "verror@npm:1.10.0" +- dependencies: +- assert-plus: ^1.0.0 +- core-util-is: 1.0.2 +- extsprintf: ^1.2.0 +- checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea +- languageName: node +- linkType: hard +- + "vfile-location@npm:^3.0.0, vfile-location@npm:^3.2.0": + version: 3.2.0 + resolution: "vfile-location@npm:3.2.0" diff --git a/SOURCES/0006-notifications-use-HMAC-SHA256-to-generate-password-r.patch b/SOURCES/0006-notifications-use-HMAC-SHA256-to-generate-password-r.patch new file mode 100644 index 0000000..d8a6d51 --- /dev/null +++ b/SOURCES/0006-notifications-use-HMAC-SHA256-to-generate-password-r.patch @@ -0,0 +1,358 @@ +From 5749f50533225b5d38fed1ed86b1c893cc0466b5 Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Thu, 25 Nov 2021 18:49:52 +0100 +Subject: [PATCH] notifications: use HMAC-SHA256 to generate password reset + tokens + +* changes the time limit code generation function to use HMAC-SHA256 + instead of SHA-1 +* multiple new testcases + +diff --git a/pkg/services/notifications/codes.go b/pkg/services/notifications/codes.go +index 32cd5dd7cd..72d33e3814 100644 +--- a/pkg/services/notifications/codes.go ++++ b/pkg/services/notifications/codes.go +@@ -1,48 +1,53 @@ + package notifications + + import ( +- "crypto/sha1" // #nosec ++ "crypto/hmac" ++ "crypto/sha256" + "encoding/hex" + "fmt" ++ "strconv" + "time" + +- "github.com/unknwon/com" +- + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/setting" + ) + +-const timeLimitCodeLength = 12 + 6 + 40 ++const timeLimitStartDateLength = 12 ++const timeLimitMinutesLength = 6 ++const timeLimitHmacLength = 64 ++const timeLimitCodeLength = timeLimitStartDateLength + timeLimitMinutesLength + timeLimitHmacLength + + // create a time limit code +-// code format: 12 length date time string + 6 minutes string + 40 sha1 encoded string +-func createTimeLimitCode(data string, minutes int, startInf interface{}) (string, error) { ++// code format: 12 length date time string + 6 minutes string + 64 HMAC-SHA256 encoded string ++func createTimeLimitCode(payload string, minutes int, startStr string) (string, error) { + format := "200601021504" + + var start, end time.Time +- var startStr, endStr string ++ var endStr string + +- if startInf == nil { ++ if startStr == "" { + // Use now time create code + start = time.Now() + startStr = start.Format(format) + } else { + // use start string create code +- startStr = startInf.(string) +- start, _ = time.ParseInLocation(format, startStr, time.Local) +- startStr = start.Format(format) ++ var err error ++ start, err = time.ParseInLocation(format, startStr, time.Local) ++ if err != nil { ++ return "", err ++ } + } + + end = start.Add(time.Minute * time.Duration(minutes)) + endStr = end.Format(format) + +- // create sha1 encode string +- sh := sha1.New() +- if _, err := sh.Write([]byte(data + setting.SecretKey + startStr + endStr + +- com.ToStr(minutes))); err != nil { +- return "", err ++ // create HMAC-SHA256 encoded string ++ key := []byte(setting.SecretKey) ++ h := hmac.New(sha256.New, key) ++ if _, err := h.Write([]byte(payload + startStr + endStr)); err != nil { ++ return "", fmt.Errorf("cannot create hmac: %v", err) + } +- encoded := hex.EncodeToString(sh.Sum(nil)) ++ encoded := hex.EncodeToString(h.Sum(nil)) + + code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded) + return code, nil +@@ -50,29 +55,32 @@ func createTimeLimitCode(data string, minutes int, startInf interface{}) (string + + // verify time limit code + func validateUserEmailCode(cfg *setting.Cfg, user *models.User, code string) (bool, error) { +- if len(code) <= 18 { ++ if len(code) < timeLimitCodeLength { + return false, nil + } + +- minutes := cfg.EmailCodeValidMinutes + code = code[:timeLimitCodeLength] + + // split code +- start := code[:12] +- lives := code[12:18] +- if d, err := com.StrTo(lives).Int(); err == nil { +- minutes = d ++ startStr := code[:timeLimitStartDateLength] ++ minutesStr := code[timeLimitStartDateLength : timeLimitStartDateLength+timeLimitMinutesLength] ++ minutes, err := strconv.Atoi(minutesStr) ++ if err != nil { ++ return false, fmt.Errorf("invalid time limit code: %v", err) + } + + // right active code +- data := com.ToStr(user.Id) + user.Email + user.Login + user.Password + user.Rands +- retCode, err := createTimeLimitCode(data, minutes, start) ++ payload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands ++ expectedCode, err := createTimeLimitCode(payload, minutes, startStr) + if err != nil { + return false, err + } +- if retCode == code && minutes > 0 { ++ if hmac.Equal([]byte(code), []byte(expectedCode)) && minutes > 0 { + // check time is expired or not +- before, _ := time.ParseInLocation("200601021504", start, time.Local) ++ before, err := time.ParseInLocation("200601021504", startStr, time.Local) ++ if err != nil { ++ return false, err ++ } + now := time.Now() + if before.Add(time.Minute*time.Duration(minutes)).Unix() > now.Unix() { + return true, nil +@@ -93,15 +101,15 @@ func getLoginForEmailCode(code string) string { + return string(b) + } + +-func createUserEmailCode(cfg *setting.Cfg, u *models.User, startInf interface{}) (string, error) { ++func createUserEmailCode(cfg *setting.Cfg, user *models.User, startStr string) (string, error) { + minutes := cfg.EmailCodeValidMinutes +- data := com.ToStr(u.Id) + u.Email + u.Login + u.Password + u.Rands +- code, err := createTimeLimitCode(data, minutes, startInf) ++ payload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands ++ code, err := createTimeLimitCode(payload, minutes, startStr) + if err != nil { + return "", err + } + + // add tail hex username +- code += hex.EncodeToString([]byte(u.Login)) ++ code += hex.EncodeToString([]byte(user.Login)) + return code, nil + } +diff --git a/pkg/services/notifications/codes_test.go b/pkg/services/notifications/codes_test.go +index a314c8deca..be9b68ca69 100644 +--- a/pkg/services/notifications/codes_test.go ++++ b/pkg/services/notifications/codes_test.go +@@ -1,7 +1,10 @@ + package notifications + + import ( ++ "fmt" ++ "strconv" + "testing" ++ "time" + + "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/setting" +@@ -9,18 +12,126 @@ import ( + "github.com/stretchr/testify/require" + ) + ++func TestTimeLimitCodes(t *testing.T) { ++ cfg := setting.NewCfg() ++ cfg.EmailCodeValidMinutes = 120 ++ user := &models.User{Id: 10, Email: "t@a.com", Login: "asd", Password: "1", Rands: "2"} ++ ++ format := "200601021504" ++ mailPayload := strconv.FormatInt(user.Id, 10) + user.Email + user.Login + user.Password + user.Rands ++ tenMinutesAgo := time.Now().Add(-time.Minute * 10) ++ ++ tests := []struct { ++ desc string ++ payload string ++ start time.Time ++ minutes int ++ valid bool ++ }{ ++ { ++ desc: "code generated 10 minutes ago, 5 minutes valid", ++ payload: mailPayload, ++ start: tenMinutesAgo, ++ minutes: 5, ++ valid: false, ++ }, ++ { ++ desc: "code generated 10 minutes ago, 9 minutes valid", ++ payload: mailPayload, ++ start: tenMinutesAgo, ++ minutes: 9, ++ valid: false, ++ }, ++ { ++ desc: "code generated 10 minutes ago, 10 minutes valid", ++ payload: mailPayload, ++ start: tenMinutesAgo, ++ minutes: 10, ++ // code was valid exactly 10 minutes since evaluating the tenMinutesAgo assignment ++ // by the time this test is run the code is already expired ++ valid: false, ++ }, ++ { ++ desc: "code generated 10 minutes ago, 11 minutes valid", ++ payload: mailPayload, ++ start: tenMinutesAgo, ++ minutes: 11, ++ valid: true, ++ }, ++ { ++ desc: "code generated 10 minutes ago, 20 minutes valid", ++ payload: mailPayload, ++ start: tenMinutesAgo, ++ minutes: 20, ++ valid: true, ++ }, ++ { ++ desc: "code generated 10 minutes ago, 20 minutes valid, tampered payload", ++ payload: mailPayload[:len(mailPayload)-1] + "x", ++ start: tenMinutesAgo, ++ minutes: 20, ++ valid: false, ++ }, ++ } ++ ++ for _, test := range tests { ++ t.Run(test.desc, func(t *testing.T) { ++ code, err := createTimeLimitCode(test.payload, test.minutes, test.start.Format(format)) ++ require.NoError(t, err) ++ ++ isValid, err := validateUserEmailCode(cfg, user, code) ++ require.NoError(t, err) ++ require.Equal(t, test.valid, isValid) ++ }) ++ } ++ ++ t.Run("tampered minutes", func(t *testing.T) { ++ code, err := createTimeLimitCode(mailPayload, 5, tenMinutesAgo.Format(format)) ++ require.NoError(t, err) ++ ++ // code is expired ++ isValid, err := validateUserEmailCode(cfg, user, code) ++ require.NoError(t, err) ++ require.Equal(t, false, isValid) ++ ++ // let's try to extend the code by tampering the minutes ++ code = code[:12] + fmt.Sprintf("%06d", 20) + code[18:] ++ isValid, err = validateUserEmailCode(cfg, user, code) ++ require.NoError(t, err) ++ require.Equal(t, false, isValid) ++ }) ++ ++ t.Run("tampered start string", func(t *testing.T) { ++ code, err := createTimeLimitCode(mailPayload, 5, tenMinutesAgo.Format(format)) ++ require.NoError(t, err) ++ ++ // code is expired ++ isValid, err := validateUserEmailCode(cfg, user, code) ++ require.NoError(t, err) ++ require.Equal(t, false, isValid) ++ ++ // let's try to extend the code by tampering the start string ++ oneMinuteAgo := time.Now().Add(-time.Minute) ++ ++ code = oneMinuteAgo.Format(format) + code[12:] ++ isValid, err = validateUserEmailCode(cfg, user, code) ++ require.NoError(t, err) ++ require.Equal(t, false, isValid) ++ }) ++} ++ + func TestEmailCodes(t *testing.T) { + t.Run("When generating code", func(t *testing.T) { + cfg := setting.NewCfg() + cfg.EmailCodeValidMinutes = 120 + + user := &models.User{Id: 10, Email: "t@a.com", Login: "asd", Password: "1", Rands: "2"} +- code, err := createUserEmailCode(cfg, user, nil) ++ code, err := createUserEmailCode(cfg, user, "") + require.NoError(t, err) + + t.Run("getLoginForCode should return login", func(t *testing.T) { + login := getLoginForEmailCode(code) +- require.Equal(t, login, "asd") ++ require.Equal(t, "asd", login) + }) + + t.Run("Can verify valid code", func(t *testing.T) { +@@ -29,7 +140,7 @@ func TestEmailCodes(t *testing.T) { + require.True(t, isValid) + }) + +- t.Run("Cannot verify in-valid code", func(t *testing.T) { ++ t.Run("Cannot verify invalid code", func(t *testing.T) { + code = "ASD" + isValid, err := validateUserEmailCode(cfg, user, code) + require.NoError(t, err) +diff --git a/pkg/services/notifications/notifications.go b/pkg/services/notifications/notifications.go +index 84a0d42cb6..52facd0992 100644 +--- a/pkg/services/notifications/notifications.go ++++ b/pkg/services/notifications/notifications.go +@@ -168,7 +168,7 @@ func (ns *NotificationService) SendEmailCommandHandler(ctx context.Context, cmd + } + + func (ns *NotificationService) SendResetPasswordEmail(ctx context.Context, cmd *models.SendResetPasswordEmailCommand) error { +- code, err := createUserEmailCode(ns.Cfg, cmd.User, nil) ++ code, err := createUserEmailCode(ns.Cfg, cmd.User, "") + if err != nil { + return err + } +diff --git a/pkg/services/notifications/notifications_test.go b/pkg/services/notifications/notifications_test.go +index 71970e20a0..6f4b318fe0 100644 +--- a/pkg/services/notifications/notifications_test.go ++++ b/pkg/services/notifications/notifications_test.go +@@ -2,6 +2,7 @@ package notifications + + import ( + "context" ++ "regexp" + "testing" + + "github.com/grafana/grafana/pkg/bus" +@@ -185,7 +186,8 @@ func TestSendEmailAsync(t *testing.T) { + + t.Run("When sending reset email password", func(t *testing.T) { + sut, _ := createSut(t, bus) +- err := sut.SendResetPasswordEmail(context.Background(), &models.SendResetPasswordEmailCommand{User: &models.User{Email: "asd@asd.com"}}) ++ user := models.User{Email: "asd@asd.com", Login: "asd@asd.com"} ++ err := sut.SendResetPasswordEmail(context.Background(), &models.SendResetPasswordEmailCommand{User: &user}) + require.NoError(t, err) + + sentMsg := <-sut.mailQueue +@@ -194,6 +196,21 @@ func TestSendEmailAsync(t *testing.T) { + assert.Equal(t, "Reset your Grafana password - asd@asd.com", sentMsg.Subject) + assert.NotContains(t, sentMsg.Body["text/html"], "Subject") + assert.NotContains(t, sentMsg.Body["text/plain"], "Subject") ++ ++ // find code in mail ++ r, _ := regexp.Compile(`code=(\w+)`) ++ match := r.FindString(sentMsg.Body["text/plain"]) ++ code := match[len("code="):] ++ ++ // verify code ++ query := models.ValidateResetPasswordCodeQuery{Code: code} ++ getUserByLogin := func(ctx context.Context, login string) (*models.User, error) { ++ query := models.GetUserByLoginQuery{LoginOrEmail: login} ++ query.Result = &user ++ return query.Result, nil ++ } ++ err = sut.ValidateResetPasswordCode(context.Background(), &query, getUserByLogin) ++ require.NoError(t, err) + }) + + t.Run("When SMTP disabled in configuration", func(t *testing.T) { diff --git a/SOURCES/0007-skip-marketplace-plugin-install-test.patch b/SOURCES/0007-skip-marketplace-plugin-install-test.patch new file mode 100644 index 0000000..5dff9fc --- /dev/null +++ b/SOURCES/0007-skip-marketplace-plugin-install-test.patch @@ -0,0 +1,21 @@ +From 03a5c7f452efb1dbf605bba8caf3e86e15888c25 Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Thu, 23 Jun 2022 17:00:46 +0200 +Subject: [PATCH] skip marketplace plugin install test + +This test (tries to) install a plugin from the Grafana marketplace. +Network connectivity is disabled in the build environment for security +reasons, therefore we need to disable this test. + +diff --git a/pkg/tests/api/plugins/api_plugins_test.go b/pkg/tests/api/plugins/api_plugins_test.go +index e86ce50830..fd60fbe67c 100644 +--- a/pkg/tests/api/plugins/api_plugins_test.go ++++ b/pkg/tests/api/plugins/api_plugins_test.go +@@ -55,6 +55,7 @@ func TestPlugins(t *testing.T) { + }) + + t.Run("Request is not forbidden if from an admin", func(t *testing.T) { ++ t.Skip("this test requires connectivity to the Grafana plugin marketplace (fetching metadata)") + statusCode, body := makePostRequest(t, grafanaAPIURL(usernameAdmin, grafanaListedAddr, "plugins/test/install")) + + assert.Equal(t, 404, statusCode) diff --git a/SOURCES/0008-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch b/SOURCES/0008-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch new file mode 100644 index 0000000..cb7113d --- /dev/null +++ b/SOURCES/0008-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch @@ -0,0 +1,20 @@ +From dc4e1c882d28db17064bd4fb788775a86ebfe066 Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Mon, 27 Jun 2022 17:12:27 +0200 +Subject: [PATCH] Prometheus: Fix integer overflow in rate interval calculation + on 32-bit architectures + + +diff --git a/pkg/tsdb/prometheus/buffered/time_series_query.go b/pkg/tsdb/prometheus/buffered/time_series_query.go +index 40db2d9100..0af2d3ecab 100644 +--- a/pkg/tsdb/prometheus/buffered/time_series_query.go ++++ b/pkg/tsdb/prometheus/buffered/time_series_query.go +@@ -326,7 +326,7 @@ func calculateRateInterval(interval time.Duration, scrapeInterval string, interv + return time.Duration(0) + } + +- rateInterval := time.Duration(int(math.Max(float64(interval+scrapeIntervalDuration), float64(4)*float64(scrapeIntervalDuration)))) ++ rateInterval := time.Duration(int64(math.Max(float64(interval+scrapeIntervalDuration), float64(4)*float64(scrapeIntervalDuration)))) + return rateInterval + } + diff --git a/SOURCES/0009-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch b/SOURCES/0009-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch new file mode 100644 index 0000000..9dc7e5e --- /dev/null +++ b/SOURCES/0009-Prometheus-Fix-integer-overflow-in-rate-interval-cal.patch @@ -0,0 +1,20 @@ +From 09be2f6709e7d05a2f75756c5f58b0602b54af72 Mon Sep 17 00:00:00 2001 +From: Andreas Gerstmayr +Date: Tue, 5 Jul 2022 17:04:13 +0200 +Subject: [PATCH] Prometheus: Fix integer overflow in rate interval calculation + on 32-bit architectures 2 + + +diff --git a/pkg/tsdb/prometheus/models/query.go b/pkg/tsdb/prometheus/models/query.go +index bdd48d08ed..aa2b1f9945 100644 +--- a/pkg/tsdb/prometheus/models/query.go ++++ b/pkg/tsdb/prometheus/models/query.go +@@ -181,7 +181,7 @@ func calculateRateInterval(interval time.Duration, scrapeInterval string, interv + return time.Duration(0) + } + +- rateInterval := time.Duration(int(math.Max(float64(interval+scrapeIntervalDuration), float64(4)*float64(scrapeIntervalDuration)))) ++ rateInterval := time.Duration(int64(math.Max(float64(interval+scrapeIntervalDuration), float64(4)*float64(scrapeIntervalDuration)))) + return rateInterval + } + diff --git a/SOURCES/0010-v9.0.x-Login-email-before-username-57406.patch b/SOURCES/0010-v9.0.x-Login-email-before-username-57406.patch new file mode 100644 index 0000000..427ec57 --- /dev/null +++ b/SOURCES/0010-v9.0.x-Login-email-before-username-57406.patch @@ -0,0 +1,100 @@ +From 74f3c59f7096b5c31d5c218310b20775eb111d0f Mon Sep 17 00:00:00 2001 +From: Karl Persson +Date: Fri, 21 Oct 2022 14:15:21 +0200 +Subject: [PATCH] [v9.0.x] Login email before username (#57406) + +* Add test for username/login field conflict + +* Swap order of login fields + +Co-authored-by: linoman <2051016+linoman@users.noreply.github.com> + +diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go +index 9cd80da396..00e3ddc2df 100644 +--- a/pkg/services/sqlstore/user.go ++++ b/pkg/services/sqlstore/user.go +@@ -170,20 +170,24 @@ func (ss *SQLStore) GetUserByLogin(ctx context.Context, query *models.GetUserByL + return models.ErrUserNotFound + } + +- // Try and find the user by login first. +- // It's not sufficient to assume that a LoginOrEmail with an "@" is an email. ++ var has bool ++ var err error + user := &models.User{Login: query.LoginOrEmail} +- has, err := sess.Where(notServiceAccountFilter(ss)).Get(user) +- +- if err != nil { +- return err +- } + +- if !has && strings.Contains(query.LoginOrEmail, "@") { +- // If the user wasn't found, and it contains an "@" fallback to finding the +- // user by email. ++ // Since username can be an email address, attempt login with email address ++ // first if the login field has the "@" symbol. ++ if strings.Contains(query.LoginOrEmail, "@") { + user = &models.User{Email: query.LoginOrEmail} + has, err = sess.Get(user) ++ ++ if err != nil { ++ return err ++ } ++ } ++ ++ // Lookup the login field instead of email field ++ if !has { ++ has, err = sess.Where(notServiceAccountFilter(ss)).Get(user) + } + + if err != nil { +diff --git a/pkg/services/sqlstore/user_test.go b/pkg/services/sqlstore/user_test.go +index d3803fa0c9..da23a7cca9 100644 +--- a/pkg/services/sqlstore/user_test.go ++++ b/pkg/services/sqlstore/user_test.go +@@ -51,6 +51,45 @@ func TestIntegrationUserDataAccess(t *testing.T) { + require.False(t, query.Result.IsDisabled) + }) + ++ t.Run("Get User by login - user_2 uses user_1.email as login", func(t *testing.T) { ++ ss = InitTestDB(t) ++ ++ // create user_1 ++ cmd := models.CreateUserCommand{ ++ Email: "user_1@mail.com", ++ Name: "user_1", ++ Login: "user_1", ++ Password: "user_1_password", ++ IsDisabled: true, ++ } ++ user_1, err := ss.CreateUser(context.Background(), cmd) ++ require.Nil(t, err) ++ ++ // create user_2 ++ cmd = models.CreateUserCommand{ ++ Email: "user_2@mail.com", ++ Name: "user_2", ++ Login: "user_1@mail.com", ++ Password: "user_2_password", ++ IsDisabled: true, ++ } ++ user_2, err := ss.CreateUser(context.Background(), cmd) ++ require.Nil(t, err) ++ ++ // query user database for user_1 email ++ query := models.GetUserByLoginQuery{LoginOrEmail: "user_1@mail.com"} ++ err = ss.GetUserByLogin(context.Background(), &query) ++ require.Nil(t, err) ++ ++ // expect user_1 as result ++ require.Equal(t, user_1.Email, query.Result.Email) ++ require.Equal(t, user_1.Login, query.Result.Login) ++ require.Equal(t, user_1.Name, query.Result.Name) ++ require.NotEqual(t, user_2.Email, query.Result.Email) ++ require.NotEqual(t, user_2.Login, query.Result.Login) ++ require.NotEqual(t, user_2.Name, query.Result.Name) ++ }) ++ + t.Run("Testing DB - creates and loads disabled user", func(t *testing.T) { + ss = InitTestDB(t) + cmd := models.CreateUserCommand{ diff --git a/SOURCES/1001-vendor-patch-removed-backend-crypto.patch b/SOURCES/1001-vendor-patch-removed-backend-crypto.patch new file mode 100644 index 0000000..383b6e2 --- /dev/null +++ b/SOURCES/1001-vendor-patch-removed-backend-crypto.patch @@ -0,0 +1,427 @@ +patch removed backend crypto + +the `Makefile` removed a few files containing (unused) crypto +algorithms from the vendor tarball, which are not used in Grafana. +This patch removes all references to the deleted files. + +diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go +new file mode 100644 +index 0000000000..871e612a61 +--- /dev/null ++++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go +@@ -0,0 +1,25 @@ ++package elgamal ++ ++import ( ++ "io" ++ "math/big" ++) ++ ++// PublicKey represents an ElGamal public key. ++type PublicKey struct { ++ G, P, Y *big.Int ++} ++ ++// PrivateKey represents an ElGamal private key. ++type PrivateKey struct { ++ PublicKey ++ X *big.Int ++} ++ ++func Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err error) { ++ panic("ElGamal encryption not available") ++} ++ ++func Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error) { ++ panic("ElGamal encryption not available") ++} +diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet.go b/vendor/golang.org/x/crypto/openpgp/packet/packet.go +index 0a19794a8e..25a5ee9158 100644 +--- a/vendor/golang.org/x/crypto/openpgp/packet/packet.go ++++ b/vendor/golang.org/x/crypto/openpgp/packet/packet.go +@@ -22,7 +22,6 @@ import ( + "math/big" + "math/bits" + +- "golang.org/x/crypto/cast5" + "golang.org/x/crypto/openpgp/errors" + ) + +@@ -493,7 +492,7 @@ func (cipher CipherFunction) KeySize() int { + case Cipher3DES: + return 24 + case CipherCAST5: +- return cast5.KeySize ++ panic("cast5 cipher not available") + case CipherAES128: + return 16 + case CipherAES192: +@@ -523,7 +522,7 @@ func (cipher CipherFunction) new(key []byte) (block cipher.Block) { + case Cipher3DES: + block, _ = des.NewTripleDESCipher(key) + case CipherCAST5: +- block, _ = cast5.NewCipher(key) ++ panic("cast5 cipher not available") + case CipherAES128, CipherAES192, CipherAES256: + block, _ = aes.NewCipher(key) + } +diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go +index 6126030eb9..3a54c5f2b1 100644 +--- a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go ++++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go +@@ -5,13 +5,12 @@ + package packet + + import ( +- "crypto/cipher" + "crypto/sha1" + "crypto/subtle" +- "golang.org/x/crypto/openpgp/errors" + "hash" + "io" +- "strconv" ++ ++ "golang.org/x/crypto/openpgp/errors" + ) + + // SymmetricallyEncrypted represents a symmetrically encrypted byte string. The +@@ -45,46 +44,7 @@ func (se *SymmetricallyEncrypted) parse(r io.Reader) error { + // packet can be read. An incorrect key can, with high probability, be detected + // immediately and this will result in a KeyIncorrect error being returned. + func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) { +- keySize := c.KeySize() +- if keySize == 0 { +- return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(c))) +- } +- if len(key) != keySize { +- return nil, errors.InvalidArgumentError("SymmetricallyEncrypted: incorrect key length") +- } +- +- if se.prefix == nil { +- se.prefix = make([]byte, c.blockSize()+2) +- _, err := readFull(se.contents, se.prefix) +- if err != nil { +- return nil, err +- } +- } else if len(se.prefix) != c.blockSize()+2 { +- return nil, errors.InvalidArgumentError("can't try ciphers with different block lengths") +- } +- +- ocfbResync := OCFBResync +- if se.MDC { +- // MDC packets use a different form of OCFB mode. +- ocfbResync = OCFBNoResync +- } +- +- s := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync) +- if s == nil { +- return nil, errors.ErrKeyIncorrect +- } +- +- plaintext := cipher.StreamReader{S: s, R: se.contents} +- +- if se.MDC { +- // MDC packets have an embedded hash that we need to check. +- h := sha1.New() +- h.Write(se.prefix) +- return &seMDCReader{in: plaintext, h: h}, nil +- } +- +- // Otherwise, we just need to wrap plaintext so that it's a valid ReadCloser. +- return seReader{plaintext}, nil ++ panic("OCFB cipher not available") + } + + // seReader wraps an io.Reader with a no-op Close method. +@@ -254,37 +214,5 @@ func (c noOpCloser) Close() error { + // written. + // If config is nil, sensible defaults will be used. + func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, config *Config) (contents io.WriteCloser, err error) { +- if c.KeySize() != len(key) { +- return nil, errors.InvalidArgumentError("SymmetricallyEncrypted.Serialize: bad key length") +- } +- writeCloser := noOpCloser{w} +- ciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedMDC) +- if err != nil { +- return +- } +- +- _, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion}) +- if err != nil { +- return +- } +- +- block := c.new(key) +- blockSize := block.BlockSize() +- iv := make([]byte, blockSize) +- _, err = config.Random().Read(iv) +- if err != nil { +- return +- } +- s, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync) +- _, err = ciphertext.Write(prefix) +- if err != nil { +- return +- } +- plaintext := cipher.StreamWriter{S: s, W: ciphertext} +- +- h := sha1.New() +- h.Write(iv) +- h.Write(iv[blockSize-2:]) +- contents = &seMDCWriter{w: plaintext, h: h} +- return ++ panic("OCFB cipher not available") + } +diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto.go b/vendor/golang.org/x/crypto/pkcs12/crypto.go +index 484ca51b71..5f502b8df1 100644 +--- a/vendor/golang.org/x/crypto/pkcs12/crypto.go ++++ b/vendor/golang.org/x/crypto/pkcs12/crypto.go +@@ -11,8 +11,6 @@ import ( + "crypto/x509/pkix" + "encoding/asn1" + "errors" +- +- "golang.org/x/crypto/pkcs12/internal/rc2" + ) + + var ( +@@ -46,10 +44,6 @@ func (shaWithTripleDESCBC) deriveIV(salt, password []byte, iterations int) []byt + + type shaWith40BitRC2CBC struct{} + +-func (shaWith40BitRC2CBC) create(key []byte) (cipher.Block, error) { +- return rc2.New(key, len(key)*8) +-} +- + func (shaWith40BitRC2CBC) deriveKey(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 5) + } +@@ -70,7 +64,7 @@ func pbDecrypterFor(algorithm pkix.AlgorithmIdentifier, password []byte) (cipher + case algorithm.Algorithm.Equal(oidPBEWithSHAAnd3KeyTripleDESCBC): + cipherType = shaWithTripleDESCBC{} + case algorithm.Algorithm.Equal(oidPBEWithSHAAnd40BitRC2CBC): +- cipherType = shaWith40BitRC2CBC{} ++ panic("RC2 encryption not available") + default: + return nil, 0, NotImplementedError("algorithm " + algorithm.Algorithm.String() + " is not supported") + } +diff --git a/vendor/github.com/prometheus/exporter-toolkit/web/handler.go b/vendor/github.com/prometheus/exporter-toolkit/web/handler.go +index ae3ebc03b9..11dbc3c56e 100644 +--- a/vendor/github.com/prometheus/exporter-toolkit/web/handler.go ++++ b/vendor/github.com/prometheus/exporter-toolkit/web/handler.go +@@ -16,13 +16,11 @@ + package web + + import ( +- "encoding/hex" + "fmt" + "net/http" + "sync" + + "github.com/go-kit/log" +- "golang.org/x/crypto/bcrypt" + ) + + // extraHTTPHeaders is a map of HTTP headers that can be added to HTTP +@@ -36,22 +34,6 @@ var extraHTTPHeaders = map[string][]string{ + "Content-Security-Policy": nil, + } + +-func validateUsers(configPath string) error { +- c, err := getConfig(configPath) +- if err != nil { +- return err +- } +- +- for _, p := range c.Users { +- _, err = bcrypt.Cost([]byte(p)) +- if err != nil { +- return err +- } +- } +- +- return nil +-} +- + // validateHeaderConfig checks that the provided header configuration is correct. + // It does not check the validity of all the values, only the ones which are + // well-defined enumerations. +@@ -83,55 +65,3 @@ type webHandler struct { + // only once in parallel as this is CPU intensive. + bcryptMtx sync.Mutex + } +- +-func (u *webHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { +- c, err := getConfig(u.tlsConfigPath) +- if err != nil { +- u.logger.Log("msg", "Unable to parse configuration", "err", err) +- http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) +- return +- } +- +- // Configure http headers. +- for k, v := range c.HTTPConfig.Header { +- w.Header().Set(k, v) +- } +- +- if len(c.Users) == 0 { +- u.handler.ServeHTTP(w, r) +- return +- } +- +- user, pass, auth := r.BasicAuth() +- if auth { +- hashedPassword, validUser := c.Users[user] +- +- if !validUser { +- // The user is not found. Use a fixed password hash to +- // prevent user enumeration by timing requests. +- // This is a bcrypt-hashed version of "fakepassword". +- hashedPassword = "$2y$10$QOauhQNbBCuQDKes6eFzPeMqBSjb7Mr5DUmpZ/VcEd00UAV/LDeSi" +- } +- +- cacheKey := hex.EncodeToString(append(append([]byte(user), []byte(hashedPassword)...), []byte(pass)...)) +- authOk, ok := u.cache.get(cacheKey) +- +- if !ok { +- // This user, hashedPassword, password is not cached. +- u.bcryptMtx.Lock() +- err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(pass)) +- u.bcryptMtx.Unlock() +- +- authOk = err == nil +- u.cache.set(cacheKey, authOk) +- } +- +- if authOk && validUser { +- u.handler.ServeHTTP(w, r) +- return +- } +- } +- +- w.Header().Set("WWW-Authenticate", "Basic") +- http.Error(w, http.StatusText(http.StatusUnauthorized), http.StatusUnauthorized) +-} +diff --git a/vendor/github.com/prometheus/exporter-toolkit/web/tls_config.go b/vendor/github.com/prometheus/exporter-toolkit/web/tls_config.go +index 2668964a06..291464ba7e 100644 +--- a/vendor/github.com/prometheus/exporter-toolkit/web/tls_config.go ++++ b/vendor/github.com/prometheus/exporter-toolkit/web/tls_config.go +@@ -18,12 +18,8 @@ import ( + "crypto/x509" + "fmt" + "io/ioutil" +- "net" +- "net/http" + "path/filepath" + +- "github.com/go-kit/log" +- "github.com/go-kit/log/level" + "github.com/pkg/errors" + config_util "github.com/prometheus/common/config" + "gopkg.in/yaml.v2" +@@ -177,93 +173,6 @@ func ConfigToTLSConfig(c *TLSStruct) (*tls.Config, error) { + return cfg, nil + } + +-// ListenAndServe starts the server on the given address. Based on the file +-// tlsConfigPath, TLS or basic auth could be enabled. +-func ListenAndServe(server *http.Server, tlsConfigPath string, logger log.Logger) error { +- listener, err := net.Listen("tcp", server.Addr) +- if err != nil { +- return err +- } +- defer listener.Close() +- return Serve(listener, server, tlsConfigPath, logger) +-} +- +-// Server starts the server on the given listener. Based on the file +-// tlsConfigPath, TLS or basic auth could be enabled. +-func Serve(l net.Listener, server *http.Server, tlsConfigPath string, logger log.Logger) error { +- if tlsConfigPath == "" { +- level.Info(logger).Log("msg", "TLS is disabled.", "http2", false) +- return server.Serve(l) +- } +- +- if err := validateUsers(tlsConfigPath); err != nil { +- return err +- } +- +- // Setup basic authentication. +- var handler http.Handler = http.DefaultServeMux +- if server.Handler != nil { +- handler = server.Handler +- } +- +- c, err := getConfig(tlsConfigPath) +- if err != nil { +- return err +- } +- +- server.Handler = &webHandler{ +- tlsConfigPath: tlsConfigPath, +- logger: logger, +- handler: handler, +- cache: newCache(), +- } +- +- config, err := ConfigToTLSConfig(&c.TLSConfig) +- switch err { +- case nil: +- if !c.HTTPConfig.HTTP2 { +- server.TLSNextProto = make(map[string]func(*http.Server, *tls.Conn, http.Handler)) +- } +- // Valid TLS config. +- level.Info(logger).Log("msg", "TLS is enabled.", "http2", c.HTTPConfig.HTTP2) +- case errNoTLSConfig: +- // No TLS config, back to plain HTTP. +- level.Info(logger).Log("msg", "TLS is disabled.", "http2", false) +- return server.Serve(l) +- default: +- // Invalid TLS config. +- return err +- } +- +- server.TLSConfig = config +- +- // Set the GetConfigForClient method of the HTTPS server so that the config +- // and certs are reloaded on new connections. +- server.TLSConfig.GetConfigForClient = func(*tls.ClientHelloInfo) (*tls.Config, error) { +- return getTLSConfig(tlsConfigPath) +- } +- return server.ServeTLS(l, "", "") +-} +- +-// Validate configuration file by reading the configuration and the certificates. +-func Validate(tlsConfigPath string) error { +- if tlsConfigPath == "" { +- return nil +- } +- if err := validateUsers(tlsConfigPath); err != nil { +- return err +- } +- c, err := getConfig(tlsConfigPath) +- if err != nil { +- return err +- } +- _, err = ConfigToTLSConfig(&c.TLSConfig) +- if err == errNoTLSConfig { +- return nil +- } +- return err +-} +- + type cipher uint16 + + func (c *cipher) UnmarshalYAML(unmarshal func(interface{}) error) error { +@@ -346,11 +255,3 @@ func (tv *tlsVersion) MarshalYAML() (interface{}, error) { + } + return fmt.Sprintf("%v", tv), nil + } +- +-// Listen starts the server on the given address. Based on the file +-// tlsConfigPath, TLS or basic auth could be enabled. +-// +-// Deprecated: Use ListenAndServe instead. +-func Listen(server *http.Server, tlsConfigPath string, logger log.Logger) error { +- return ListenAndServe(server, tlsConfigPath, logger) +-} diff --git a/SOURCES/1002-vendor-use-pbkdf2-from-OpenSSL.patch b/SOURCES/1002-vendor-use-pbkdf2-from-OpenSSL.patch new file mode 100644 index 0000000..6b7e257 --- /dev/null +++ b/SOURCES/1002-vendor-use-pbkdf2-from-OpenSSL.patch @@ -0,0 +1,145 @@ +use pbkdf2 from OpenSSL if FIPS mode is enabled + +This patch modifies the x/crypto/pbkdf2 function to use OpenSSL +if FIPS mode is enabled. + +diff --git a/vendor/golang.org/x/crypto/internal/boring/boring.go b/vendor/golang.org/x/crypto/internal/boring/boring.go +new file mode 100644 +index 0000000000..5a06918832 +--- /dev/null ++++ b/vendor/golang.org/x/crypto/internal/boring/boring.go +@@ -0,0 +1,74 @@ ++// Copyright 2017 The Go Authors. All rights reserved. ++// Copyright 2021 Red Hat. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build linux ++// +build !android ++// +build !no_openssl ++// +build !cmd_go_bootstrap ++// +build !msan ++ ++package boring ++ ++// #include "openssl_pbkdf2.h" ++// #cgo LDFLAGS: -ldl ++import "C" ++import ( ++ "bytes" ++ "crypto/sha1" ++ "crypto/sha256" ++ "hash" ++ "unsafe" ++) ++ ++var ( ++ emptySha1 = sha1.Sum([]byte{}) ++ emptySha256 = sha256.Sum256([]byte{}) ++) ++ ++func hashToMD(h hash.Hash) *C.GO_EVP_MD { ++ emptyHash := h.Sum([]byte{}) ++ ++ switch { ++ case bytes.Equal(emptyHash, emptySha1[:]): ++ return C._goboringcrypto_EVP_sha1() ++ case bytes.Equal(emptyHash, emptySha256[:]): ++ return C._goboringcrypto_EVP_sha256() ++ } ++ return nil ++} ++ ++// charptr returns the address of the underlying array in b, ++// being careful not to panic when b has zero length. ++func charptr(b []byte) *C.char { ++ if len(b) == 0 { ++ return nil ++ } ++ return (*C.char)(unsafe.Pointer(&b[0])) ++} ++ ++// ucharptr returns the address of the underlying array in b, ++// being careful not to panic when b has zero length. ++func ucharptr(b []byte) *C.uchar { ++ if len(b) == 0 { ++ return nil ++ } ++ return (*C.uchar)(unsafe.Pointer(&b[0])) ++} ++ ++func Pbkdf2Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { ++ // println("[debug] using pbkdf2 from OpenSSL") ++ ch := h() ++ md := hashToMD(ch) ++ if md == nil { ++ return nil ++ } ++ ++ out := make([]byte, keyLen) ++ ok := C._goboringcrypto_PKCS5_PBKDF2_HMAC(charptr(password), C.int(len(password)), ucharptr(salt), C.int(len(salt)), C.int(iter), md, C.int(keyLen), ucharptr(out)) ++ if ok != 1 { ++ panic("boringcrypto: PKCS5_PBKDF2_HMAC failed") ++ } ++ return out ++} +diff --git a/vendor/golang.org/x/crypto/internal/boring/notboring.go b/vendor/golang.org/x/crypto/internal/boring/notboring.go +new file mode 100644 +index 0000000000..e244fb5663 +--- /dev/null ++++ b/vendor/golang.org/x/crypto/internal/boring/notboring.go +@@ -0,0 +1,16 @@ ++// Copyright 2017 The Go Authors. All rights reserved. ++// Copyright 2021 Red Hat. ++// Use of this source code is governed by a BSD-style ++// license that can be found in the LICENSE file. ++ ++// +build !linux !cgo android cmd_go_bootstrap msan no_openssl ++ ++package boring ++ ++import ( ++ "hash" ++) ++ ++func Pbkdf2Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { ++ panic("boringcrypto: not available") ++} +diff --git a/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h b/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h +new file mode 100644 +index 0000000000..6dfdf10424 +--- /dev/null ++++ b/vendor/golang.org/x/crypto/internal/boring/openssl_pbkdf2.h +@@ -0,0 +1,5 @@ ++#include "/usr/lib/golang/src/vendor/github.com/golang-fips/openssl-fips/openssl/goopenssl.h" ++ ++DEFINEFUNC(int, PKCS5_PBKDF2_HMAC, ++ (const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, EVP_MD *digest, int keylen, unsigned char *out), ++ (pass, passlen, salt, saltlen, iter, digest, keylen, out)) +diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go +index 593f653008..799a611f94 100644 +--- a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go ++++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go +@@ -19,8 +19,11 @@ pbkdf2.Key. + package pbkdf2 // import "golang.org/x/crypto/pbkdf2" + + import ( ++ "crypto/boring" + "crypto/hmac" + "hash" ++ ++ xboring "golang.org/x/crypto/internal/boring" + ) + + // Key derives a key from the password, salt and iteration count, returning a +@@ -40,6 +43,10 @@ import ( + // Using a higher iteration count will increase the cost of an exhaustive + // search but will also make derivation proportionally slower. + func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { ++ if boring.Enabled() { ++ return xboring.Pbkdf2Key(password, salt, iter, keyLen, h) ++ } ++ + prf := hmac.New(h, password) + hashLen := prf.Size() + numBlocks := (keyLen + hashLen - 1) / hashLen diff --git a/SOURCES/1003-vendor-skip-goldenfiles-tests.patch b/SOURCES/1003-vendor-skip-goldenfiles-tests.patch new file mode 100644 index 0000000..8f18c0e --- /dev/null +++ b/SOURCES/1003-vendor-skip-goldenfiles-tests.patch @@ -0,0 +1,18 @@ +skip goldenfiles tests + +The golden files include memory dumps from a x86_64 machine. +Integers are stored as little endian on x86, but as big endian on s390x, +therefore loading this memory dump fails on s390x. + +diff --git a/vendor/github.com/grafana/grafana-plugin-sdk-go/experimental/golden_response_checker.go b/vendor/github.com/grafana/grafana-plugin-sdk-go/experimental/golden_response_checker.go +index 320f40f3bd..20f5fa4f46 100644 +--- a/vendor/github.com/grafana/grafana-plugin-sdk-go/experimental/golden_response_checker.go ++++ b/vendor/github.com/grafana/grafana-plugin-sdk-go/experimental/golden_response_checker.go +@@ -203,6 +203,7 @@ func CheckGoldenJSONFrame(t *testing.T, dir string, name string, f *data.Frame, + // CheckGoldenJSONResponse will verify that the stored JSON file matches the given backend.DataResponse. + func CheckGoldenJSONResponse(t *testing.T, dir string, name string, dr *backend.DataResponse, updateFile bool) { + t.Helper() ++ t.Skip("skipping test: x86_64 memory dump is not compatible with other architectures") + fpath := path.Join(dir, name+".jsonc") + + expected, err := readGoldenJSONFile(fpath) diff --git a/SOURCES/build_frontend.sh b/SOURCES/build_frontend.sh new file mode 100755 index 0000000..1117e80 --- /dev/null +++ b/SOURCES/build_frontend.sh @@ -0,0 +1,20 @@ +#!/bin/bash -eu + +# Webpack needs more than the default 4GB RAM +export NODE_OPTIONS="${NODE_OPTIONS:-} --max_old_space_size=6144" + +# Build the frontend +yarn run build + +# Build the bundled plugins +mkdir plugins-bundled/external +yarn run plugins:build-bundled +for plugin in plugins-bundled/internal/input-datasource; do + mv $plugin $plugin.tmp + mv $plugin.tmp/dist $plugin + rm -rf $plugin.tmp +done +rm plugins-bundled/README.md plugins-bundled/.gitignore plugins-bundled/external.json + +# Fix permissions (webpack sometimes outputs files with mode = 666 due to reasons unknown (race condition/umask issue afaics)) +chmod -R g-w,o-w public/build plugins-bundled diff --git a/SOURCES/create_bundles.sh b/SOURCES/create_bundles.sh new file mode 100755 index 0000000..647ad5c --- /dev/null +++ b/SOURCES/create_bundles.sh @@ -0,0 +1,85 @@ +#!/bin/bash -eux +VERSION=$(rpm --specfile ./*.spec --qf '%{VERSION}\n' | head -1) +RELEASE=$(rpm --specfile ./*.spec --qf '%{RELEASE}\n' | head -1 | cut -d. -f1) +CHANGELOGTIME=$(rpm --specfile ./*.spec --qf '%{CHANGELOGTIME}\n' | head -1) +SOURCE_DATE_EPOCH=$((CHANGELOGTIME - CHANGELOGTIME % 86400)) + +SOURCE_DIR=grafana-$VERSION +SOURCE_TAR=grafana-$VERSION.tar.gz +VENDOR_TAR=grafana-vendor-$VERSION-$RELEASE.tar.xz +WEBPACK_TAR=grafana-webpack-$VERSION-$RELEASE.tar.gz + + +## Download and extract source tarball +spectool -g grafana.spec +rm -rf "${SOURCE_DIR}" +tar xf "${SOURCE_TAR}" + + +## Create vendor bundle +pushd "${SOURCE_DIR}" + +# Vendor Go dependencies +patch -p1 --fuzz=0 < ../0004-remove-unused-backend-dependencies.patch +go mod vendor + +# Generate Go files +make gen-go + +# Remove unused crypto +rm -r vendor/golang.org/x/crypto/bcrypt +rm -r vendor/golang.org/x/crypto/blowfish +rm -r vendor/golang.org/x/crypto/cast5 +rm -r vendor/golang.org/x/crypto/openpgp/elgamal +rm vendor/golang.org/x/crypto/openpgp/packet/ocfb.go +rm -r vendor/golang.org/x/crypto/pkcs12/internal/rc2 + +# List bundled dependencies +awk '$2 ~ /^v/ && $4 != "indirect" {print "Provides: bundled(golang(" $1 ")) = " substr($2, 2)}' go.mod | \ + sed -E 's/=(.*)-(.*)-(.*)/=\1-\2.\3/g' > "../${VENDOR_TAR}.manifest" + +# Vendor Node.js dependencies +patch -p1 --fuzz=0 < ../0005-remove-unused-frontend-crypto.patch +export HUSKY=0 +yarn install --frozen-lockfile + +# Remove files with licensing issues +find .yarn -name 'node-notifier' -prune -exec rm -r {} \; +find .yarn -name 'nodemon' -prune -exec rm -r {} \; + +# List bundled dependencies +../list_bundled_nodejs_packages.py . >> "../${VENDOR_TAR}.manifest" + +popd + +# Create tarball +# shellcheck disable=SC2046 +XZ_OPT=-9 tar \ + --sort=name \ + --mtime="@${SOURCE_DATE_EPOCH}" --clamp-mtime \ + --owner=0 --group=0 --numeric-owner \ + -cJf "${VENDOR_TAR}" \ + "${SOURCE_DIR}/vendor" \ + $(find "${SOURCE_DIR}" -type f -name wire_gen.go | LC_ALL=C sort) \ + "${SOURCE_DIR}/.pnp.cjs" \ + "${SOURCE_DIR}/.yarn/cache" \ + "${SOURCE_DIR}/.yarn/unplugged" + + +## Create webpack +pushd "${SOURCE_DIR}" +../build_frontend.sh +popd + +# Create tarball +tar \ + --sort=name \ + --mtime="@${SOURCE_DATE_EPOCH}" --clamp-mtime \ + --owner=0 --group=0 --numeric-owner \ + -czf "${WEBPACK_TAR}" \ + "${SOURCE_DIR}/plugins-bundled" \ + "${SOURCE_DIR}/public/build" \ + "${SOURCE_DIR}/public/img" \ + "${SOURCE_DIR}/public/lib" \ + "${SOURCE_DIR}/public/locales" \ + "${SOURCE_DIR}/public/views" diff --git a/SOURCES/create_bundles_in_container.sh b/SOURCES/create_bundles_in_container.sh new file mode 100755 index 0000000..bbed4ca --- /dev/null +++ b/SOURCES/create_bundles_in_container.sh @@ -0,0 +1,24 @@ +#!/bin/bash -eu +# +# create vendor and webpack bundles inside a container (for reproducibility) +# using a Go cache: +# ./create_bundles_in_container.sh --security-opt label=disable -v $(pwd)/.gocache:/root/go +# + +cat <= 1.17 +BuildRequires: go-srpm-macros +BuildRequires: go-rpm-macros + +%if %{compile_frontend} +BuildRequires: nodejs >= 1:16 +BuildRequires: yarnpkg +%endif + +%if %{enable_fips_mode} +BuildRequires: openssl-devel +%endif + +%global GRAFANA_USER %{name} +%global GRAFANA_GROUP %{name} + +# grafana-server service daemon uses systemd +%{?systemd_requires} +Requires(pre): shadow-utils + +# Grafana queries the mime database (through mime.TypeByExtension, in a unit test and at runtime) +BuildRequires: shared-mime-info +Requires: shared-mime-info + +%if 0%{?fedora} || 0%{?rhel} > 7 +Recommends: grafana-pcp +%endif + +Obsoletes: grafana-cloudwatch < 7.3.6-1 +Obsoletes: grafana-elasticsearch < 7.3.6-1 +Obsoletes: grafana-azure-monitor < 7.3.6-1 +Obsoletes: grafana-graphite < 7.3.6-1 +Obsoletes: grafana-influxdb < 7.3.6-1 +Obsoletes: grafana-loki < 7.3.6-1 +Obsoletes: grafana-mssql < 7.3.6-1 +Obsoletes: grafana-mysql < 7.3.6-1 +Obsoletes: grafana-opentsdb < 7.3.6-1 +Obsoletes: grafana-postgres < 7.3.6-1 +Obsoletes: grafana-prometheus < 7.3.6-1 +Obsoletes: grafana-stackdriver < 7.3.6-1 +Provides: grafana-cloudwatch = 7.3.6-1 +Provides: grafana-elasticsearch = 7.3.6-1 +Provides: grafana-azure-monitor = 7.3.6-1 +Provides: grafana-graphite = 7.3.6-1 +Provides: grafana-influxdb = 7.3.6-1 +Provides: grafana-loki = 7.3.6-1 +Provides: grafana-mssql = 7.3.6-1 +Provides: grafana-mysql = 7.3.6-1 +Provides: grafana-opentsdb = 7.3.6-1 +Provides: grafana-postgres = 7.3.6-1 +Provides: grafana-prometheus = 7.3.6-1 +Provides: grafana-stackdriver = 7.3.6-1 + +# vendored golang and node.js build dependencies +# this is for security purposes, if nodejs-foo ever needs an update, +# affected packages can be easily identified. +# Note: generated by the Makefile (see README.md) +Provides: bundled(golang(cloud.google.com/go/storage)) = 1.21.0 +Provides: bundled(golang(cuelang.org/go)) = 0.4.3 +Provides: bundled(golang(github.com/Azure/azure-sdk-for-go)) = 59.3.0+incompatible +Provides: bundled(golang(github.com/Azure/go-autorest/autorest)) = 0.11.22 +Provides: bundled(golang(github.com/BurntSushi/toml)) = 0.3.1 +Provides: bundled(golang(github.com/Masterminds/semver)) = 1.5.0 +Provides: bundled(golang(github.com/VividCortex/mysqlerr)) = 0.0.0-20170204212430.6c6b55f8796f +Provides: bundled(golang(github.com/aws/aws-sdk-go)) = 1.44.9 +Provides: bundled(golang(github.com/beevik/etree)) = 1.1.0 +Provides: bundled(golang(github.com/benbjohnson/clock)) = 1.1.0 +Provides: bundled(golang(github.com/bradfitz/gomemcache)) = 0.0.0-20190913173617.a41fca850d0b +Provides: bundled(golang(github.com/centrifugal/centrifuge)) = 0.19.0 +Provides: bundled(golang(github.com/cortexproject/cortex)) = 1.10.1-0.20211014125347.85c378182d0d +Provides: bundled(golang(github.com/davecgh/go-spew)) = 1.1.1 +Provides: bundled(golang(github.com/denisenkom/go-mssqldb)) = 0.12.0 +Provides: bundled(golang(github.com/dop251/goja)) = 0.0.0-20210804101310.32956a348b49 +Provides: bundled(golang(github.com/fatih/color)) = 1.13.0 +Provides: bundled(golang(github.com/gchaincl/sqlhooks)) = 1.3.0 +Provides: bundled(golang(github.com/getsentry/sentry-go)) = 0.13.0 +Provides: bundled(golang(github.com/go-kit/kit)) = 0.11.0 +Provides: bundled(golang(github.com/go-openapi/strfmt)) = 0.20.2 +Provides: bundled(golang(github.com/go-redis/redis/v8)) = 8.11.4 +Provides: bundled(golang(github.com/go-sourcemap/sourcemap)) = 2.1.3+incompatible +Provides: bundled(golang(github.com/go-sql-driver/mysql)) = 1.6.0 +Provides: bundled(golang(github.com/go-stack/stack)) = 1.8.0 +Provides: bundled(golang(github.com/gobwas/glob)) = 0.2.3 +Provides: bundled(golang(github.com/gofrs/uuid)) = 4.0.0+incompatible +Provides: bundled(golang(github.com/gogo/protobuf)) = 1.3.2 +Provides: bundled(golang(github.com/golang/mock)) = 1.6.0 +Provides: bundled(golang(github.com/golang/snappy)) = 0.0.4 +Provides: bundled(golang(github.com/google/go-cmp)) = 0.5.8 +Provides: bundled(golang(github.com/google/uuid)) = 1.3.0 +Provides: bundled(golang(github.com/google/wire)) = 0.5.0 +Provides: bundled(golang(github.com/gorilla/websocket)) = 1.4.2 +Provides: bundled(golang(github.com/gosimple/slug)) = 1.9.0 +Provides: bundled(golang(github.com/grafana/cuetsy)) = 0.0.1 +Provides: bundled(golang(github.com/grafana/grafana-aws-sdk)) = 0.10.7 +Provides: bundled(golang(github.com/grafana/grafana-azure-sdk-go)) = 1.3.0 +Provides: bundled(golang(github.com/grafana/grafana-plugin-sdk-go)) = 0.138.0 +Provides: bundled(golang(github.com/grafana/loki)) = 1.6.2-0.20211015002020.7832783b1caa +Provides: bundled(golang(github.com/grpc-ecosystem/go-grpc-middleware)) = 1.3.0 +Provides: bundled(golang(github.com/hashicorp/go-hclog)) = 1.0.0 +Provides: bundled(golang(github.com/hashicorp/go-plugin)) = 1.4.3 +Provides: bundled(golang(github.com/hashicorp/go-version)) = 1.3.0 +Provides: bundled(golang(github.com/influxdata/influxdb-client-go/v2)) = 2.6.0 +Provides: bundled(golang(github.com/influxdata/line-protocol)) = 0.0.0-20210311194329.9aa0e372d097 +Provides: bundled(golang(github.com/jmespath/go-jmespath)) = 0.4.0 +Provides: bundled(golang(github.com/json-iterator/go)) = 1.1.12 +Provides: bundled(golang(github.com/lib/pq)) = 1.10.4 +Provides: bundled(golang(github.com/linkedin/goavro/v2)) = 2.10.0 +Provides: bundled(golang(github.com/m3db/prometheus_remote_client_golang)) = 0.4.4 +Provides: bundled(golang(github.com/magefile/mage)) = 1.13.0 +Provides: bundled(golang(github.com/mattn/go-isatty)) = 0.0.14 +Provides: bundled(golang(github.com/mattn/go-sqlite3)) = 1.14.7 +Provides: bundled(golang(github.com/matttproud/golang_protobuf_extensions)) = 1.0.2-0.20181231171920.c182affec369 +Provides: bundled(golang(github.com/mwitkow/go-conntrack)) = 0.0.0-20190716064945.2f068394615f +Provides: bundled(golang(github.com/ohler55/ojg)) = 1.12.9 +Provides: bundled(golang(github.com/opentracing/opentracing-go)) = 1.2.0 +Provides: bundled(golang(github.com/patrickmn/go-cache)) = 2.1.0+incompatible +Provides: bundled(golang(github.com/pkg/errors)) = 0.9.1 +Provides: bundled(golang(github.com/prometheus/alertmanager)) = 0.23.1-0.20211116083607.e2a10119aaf7 +Provides: bundled(golang(github.com/prometheus/client_golang)) = 1.12.1 +Provides: bundled(golang(github.com/prometheus/client_model)) = 0.2.0 +Provides: bundled(golang(github.com/prometheus/common)) = 0.32.1 +Provides: bundled(golang(github.com/prometheus/prometheus)) = 1.8.2-0.20211011171444.354d8d2ecfac +Provides: bundled(golang(github.com/robfig/cron/v3)) = 3.0.1 +Provides: bundled(golang(github.com/russellhaering/goxmldsig)) = 1.1.1 +Provides: bundled(golang(github.com/stretchr/testify)) = 1.7.2 +Provides: bundled(golang(github.com/teris-io/shortid)) = 0.0.0-20171029131806.771a37caa5cf +Provides: bundled(golang(github.com/ua-parser/uap-go)) = 0.0.0-20211112212520.00c877edfe0f +Provides: bundled(golang(github.com/uber/jaeger-client-go)) = 2.29.1+incompatible +Provides: bundled(golang(github.com/unknwon/com)) = 1.0.1 +Provides: bundled(golang(github.com/urfave/cli/v2)) = 2.3.0 +Provides: bundled(golang(github.com/vectordotdev/go-datemath)) = 0.1.1-0.20220323213446.f3954d0b18ae +Provides: bundled(golang(github.com/xorcare/pointer)) = 1.1.0 +Provides: bundled(golang(github.com/yudai/gojsondiff)) = 1.0.0 +Provides: bundled(golang(go.opentelemetry.io/collector)) = 0.31.0 +Provides: bundled(golang(go.opentelemetry.io/collector/model)) = 0.31.0 +Provides: bundled(golang(go.opentelemetry.io/otel)) = 1.6.3 +Provides: bundled(golang(go.opentelemetry.io/otel/exporters/jaeger)) = 1.0.0 +Provides: bundled(golang(go.opentelemetry.io/otel/sdk)) = 1.6.3 +Provides: bundled(golang(go.opentelemetry.io/otel/trace)) = 1.6.3 +Provides: bundled(golang(golang.org/x/crypto)) = 0.0.0-20220331220935.ae2d96664a29 +Provides: bundled(golang(golang.org/x/exp)) = 0.0.0-20210220032938.85be41e4509f +Provides: bundled(golang(golang.org/x/oauth2)) = 0.0.0-20220309155454.6242fa91716a +Provides: bundled(golang(golang.org/x/sync)) = 0.0.0-20210220032951.036812b2e83c +Provides: bundled(golang(golang.org/x/time)) = 0.0.0-20220224211638.0e9765cccd65 +Provides: bundled(golang(golang.org/x/tools)) = 0.1.10 +Provides: bundled(golang(gonum.org/v1/gonum)) = 0.11.0 +Provides: bundled(golang(google.golang.org/api)) = 0.74.0 +Provides: bundled(golang(google.golang.org/grpc)) = 1.45.0 +Provides: bundled(golang(google.golang.org/protobuf)) = 1.28.0 +Provides: bundled(golang(gopkg.in/ini.v1)) = 1.66.2 +Provides: bundled(golang(gopkg.in/ldap.v3)) = 3.1.0 +Provides: bundled(golang(gopkg.in/mail.v2)) = 2.3.1 +Provides: bundled(golang(gopkg.in/square/go-jose.v2)) = 2.5.1 +Provides: bundled(golang(gopkg.in/yaml.v2)) = 2.4.0 +Provides: bundled(golang(gopkg.in/yaml.v3)) = 3.0.1 +Provides: bundled(golang(xorm.io/builder)) = 0.3.6 +Provides: bundled(golang(xorm.io/core)) = 0.7.3 +Provides: bundled(golang(xorm.io/xorm)) = 0.8.2 +Provides: bundled(golang(github.com/andybalholm/brotli)) = 1.0.3 +Provides: bundled(golang(github.com/go-kit/log)) = 0.1.0 +Provides: bundled(golang(github.com/go-openapi/loads)) = 0.20.2 +Provides: bundled(golang(github.com/go-openapi/spec)) = 0.20.4 +Provides: bundled(golang(github.com/googleapis/gax-go/v2)) = 2.2.0 +Provides: bundled(golang(github.com/grafana/grafana-google-sdk-go)) = 0.0.0-20211104130251.b190293eaf58 +Provides: bundled(golang(github.com/hashicorp/golang-lru)) = 0.5.4 +Provides: bundled(golang(github.com/segmentio/encoding)) = 0.3.2 +Provides: bundled(golang(go.uber.org/atomic)) = 1.9.0 +Provides: bundled(golang(golang.org/x/text)) = 0.3.7 +Provides: bundled(golang(google.golang.org/genproto)) = 0.0.0-20220421151946.72621c1f0bd3 +Provides: bundled(golang(cloud.google.com/go/kms)) = 1.4.0 +Provides: bundled(golang(github.com/Azure/azure-sdk-for-go/sdk/azidentity)) = 0.13.2 +Provides: bundled(golang(github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys)) = 0.4.0 +Provides: bundled(golang(github.com/Azure/go-autorest/autorest/adal)) = 0.9.17 +Provides: bundled(golang(github.com/armon/go-radix)) = 1.0.0 +Provides: bundled(golang(github.com/blugelabs/bluge)) = 0.1.9 +Provides: bundled(golang(github.com/golang-migrate/migrate/v4)) = 4.7.0 +Provides: bundled(golang(github.com/grafana/dskit)) = 0.0.0-20211011144203.3a88ec0b675f +Provides: bundled(golang(github.com/grafana/thema)) = 0.0.0-20220523183731.72aebd14e751 +Provides: bundled(golang(github.com/laher/mergefs)) = 0.1.1 +Provides: bundled(golang(go.etcd.io/etcd/api/v3)) = 3.5.4 +Provides: bundled(golang(go.opentelemetry.io/contrib/propagators/jaeger)) = 1.6.0 +Provides: bundled(golang(go.opentelemetry.io/otel/exporters/otlp/otlptrace)) = 1.6.3 +Provides: bundled(golang(go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc)) = 1.6.3 +Provides: bundled(golang(gocloud.dev)) = 0.25.0 +Provides: bundled(npm(@babel/core)) = 7.12.9 +Provides: bundled(npm(@babel/plugin-proposal-class-properties)) = 7.16.7 +Provides: bundled(npm(@babel/plugin-proposal-nullish-coalescing-operator)) = 7.16.7 +Provides: bundled(npm(@babel/plugin-proposal-object-rest-spread)) = 7.12.1 +Provides: bundled(npm(@babel/plugin-proposal-optional-chaining)) = 7.16.7 +Provides: bundled(npm(@babel/plugin-syntax-dynamic-import)) = 7.8.3 +Provides: bundled(npm(@babel/plugin-transform-react-constant-elements)) = 7.17.6 +Provides: bundled(npm(@babel/plugin-transform-runtime)) = 7.17.0 +Provides: bundled(npm(@babel/plugin-transform-typescript)) = 7.16.7 +Provides: bundled(npm(@babel/preset-env)) = 7.16.11 +Provides: bundled(npm(@babel/preset-react)) = 7.16.7 +Provides: bundled(npm(@babel/preset-typescript)) = 7.16.7 +Provides: bundled(npm(@betterer/betterer)) = 5.3.5 +Provides: bundled(npm(@betterer/cli)) = 5.3.5 +Provides: bundled(npm(@betterer/eslint)) = 5.3.5 +Provides: bundled(npm(@betterer/regexp)) = 5.3.5 +Provides: bundled(npm(@braintree/sanitize-url)) = 6.0.0 +Provides: bundled(npm(@cypress/webpack-preprocessor)) = 5.11.1 +Provides: bundled(npm(@emotion/css)) = 10.0.27 +Provides: bundled(npm(@emotion/eslint-plugin)) = 11.7.0 +Provides: bundled(npm(@emotion/react)) = 11.9.0 +Provides: bundled(npm(@grafana/api-documenter)) = 7.11.2 +Provides: bundled(npm(@grafana/aws-sdk)) = 0.0.36 +Provides: bundled(npm(@grafana/data)) = 0.0.0-use.local +Provides: bundled(npm(@grafana/e2e)) = 0.0.0-use.local +Provides: bundled(npm(@grafana/e2e-selectors)) = 0.0.0-use.local +Provides: bundled(npm(@grafana/eslint-config)) = 4.0.0 +Provides: bundled(npm(@grafana/experimental)) = 0.0.2-canary.30 +Provides: bundled(npm(@grafana/google-sdk)) = 0.0.3 +Provides: bundled(npm(@grafana/lezer-logql)) = 0.0.12 +Provides: bundled(npm(@grafana/runtime)) = 0.0.0-use.local +Provides: bundled(npm(@grafana/schema)) = 0.0.0-use.local +Provides: bundled(npm(@grafana/toolkit)) = 0.0.0-use.local +Provides: bundled(npm(@grafana/tsconfig)) = 1.2.0rc1 +Provides: bundled(npm(@grafana/ui)) = 0.0.0-use.local +Provides: bundled(npm(@jaegertracing/jaeger-ui-components)) = 0.0.0-use.local +Provides: bundled(npm(@jest/core)) = 27.5.1 +Provides: bundled(npm(@kusto/monaco-kusto)) = 5.1.3 +Provides: bundled(npm(@lezer/common)) = 0.15.12 +Provides: bundled(npm(@lezer/lr)) = 0.15.8 +Provides: bundled(npm(@lingui/cli)) = 3.13.3 +Provides: bundled(npm(@lingui/core)) = 3.13.3 +Provides: bundled(npm(@lingui/macro)) = 3.12.1 +Provides: bundled(npm(@lingui/react)) = 3.13.3 +Provides: bundled(npm(@mdx-js/react)) = 1.6.22 +Provides: bundled(npm(@microsoft/api-extractor)) = 7.24.1 +Provides: bundled(npm(@mochajs/json-file-reporter)) = 1.3.0 +Provides: bundled(npm(@monaco-editor/react)) = 4.3.1 +Provides: bundled(npm(@opentelemetry/api)) = 1.1.0 +Provides: bundled(npm(@opentelemetry/exporter-collector)) = 0.25.0 +Provides: bundled(npm(@opentelemetry/semantic-conventions)) = 0.25.0 +Provides: bundled(npm(@pmmmwh/react-refresh-webpack-plugin)) = 0.5.4 +Provides: bundled(npm(@popperjs/core)) = 2.11.2 +Provides: bundled(npm(@react-aria/button)) = 3.4.4 +Provides: bundled(npm(@react-aria/dialog)) = 3.1.9 +Provides: bundled(npm(@react-aria/focus)) = 3.5.5 +Provides: bundled(npm(@react-aria/interactions)) = 3.8.4 +Provides: bundled(npm(@react-aria/menu)) = 3.4.4 +Provides: bundled(npm(@react-aria/overlays)) = 3.8.2 +Provides: bundled(npm(@react-aria/utils)) = 3.12.0 +Provides: bundled(npm(@react-stately/collections)) = 3.3.8 +Provides: bundled(npm(@react-stately/menu)) = 3.2.7 +Provides: bundled(npm(@react-stately/tree)) = 3.2.4 +Provides: bundled(npm(@react-types/button)) = 3.4.5 +Provides: bundled(npm(@react-types/menu)) = 3.5.3 +Provides: bundled(npm(@react-types/overlays)) = 3.5.5 +Provides: bundled(npm(@react-types/shared)) = 3.12.0 +Provides: bundled(npm(@reduxjs/toolkit)) = 1.8.1 +Provides: bundled(npm(@rollup/plugin-alias)) = 3.1.9 +Provides: bundled(npm(@rollup/plugin-commonjs)) = 22.0.0 +Provides: bundled(npm(@rollup/plugin-json)) = 4.1.0 +Provides: bundled(npm(@rollup/plugin-node-resolve)) = 13.3.0 +Provides: bundled(npm(@rtsao/plugin-proposal-class-properties)) = 7.0.1-patch.1 +Provides: bundled(npm(@sentry/browser)) = 6.19.7 +Provides: bundled(npm(@sentry/types)) = 6.19.7 +Provides: bundled(npm(@sentry/utils)) = 6.19.7 +Provides: bundled(npm(@storybook/addon-a11y)) = 6.4.21 +Provides: bundled(npm(@storybook/addon-actions)) = 6.4.21 +Provides: bundled(npm(@storybook/addon-docs)) = 6.4.21 +Provides: bundled(npm(@storybook/addon-essentials)) = 6.4.21 +Provides: bundled(npm(@storybook/addon-knobs)) = 6.4.0 +Provides: bundled(npm(@storybook/addon-storysource)) = 6.4.21 +Provides: bundled(npm(@storybook/addons)) = 6.4.21 +Provides: bundled(npm(@storybook/api)) = 6.4.21 +Provides: bundled(npm(@storybook/builder-webpack5)) = 6.4.21 +Provides: bundled(npm(@storybook/components)) = 6.4.21 +Provides: bundled(npm(@storybook/core-events)) = 6.4.21 +Provides: bundled(npm(@storybook/manager-webpack5)) = 6.4.21 +Provides: bundled(npm(@storybook/react)) = 6.4.21 +Provides: bundled(npm(@storybook/theming)) = 6.4.21 +Provides: bundled(npm(@swc/core)) = 1.2.187 +Provides: bundled(npm(@swc/helpers)) = 0.3.13 +Provides: bundled(npm(@testing-library/dom)) = 8.13.0 +Provides: bundled(npm(@testing-library/jest-dom)) = 5.16.4 +Provides: bundled(npm(@testing-library/react)) = 12.1.4 +Provides: bundled(npm(@testing-library/react-hooks)) = 8.0.0 +Provides: bundled(npm(@testing-library/user-event)) = 14.2.0 +Provides: bundled(npm(@types/angular)) = 1.8.3 +Provides: bundled(npm(@types/angular-route)) = 1.7.2 +Provides: bundled(npm(@types/chrome-remote-interface)) = 0.31.4 +Provides: bundled(npm(@types/classnames)) = 2.3.0 +Provides: bundled(npm(@types/command-exists)) = 1.2.0 +Provides: bundled(npm(@types/common-tags)) = 1.8.1 +Provides: bundled(npm(@types/d3)) = 7.1.0 +Provides: bundled(npm(@types/d3-force)) = 2.1.4 +Provides: bundled(npm(@types/d3-interpolate)) = 1.4.2 +Provides: bundled(npm(@types/d3-scale-chromatic)) = 1.3.1 +Provides: bundled(npm(@types/debounce-promise)) = 3.1.4 +Provides: bundled(npm(@types/deep-freeze)) = 0.1.2 +Provides: bundled(npm(@types/enzyme)) = 3.10.10 +Provides: bundled(npm(@types/enzyme-adapter-react-16)) = 1.0.6 +Provides: bundled(npm(@types/eslint)) = 7.28.2 +Provides: bundled(npm(@types/file-saver)) = 2.0.5 +Provides: bundled(npm(@types/fs-extra)) = 8.1.2 +Provides: bundled(npm(@types/google.analytics)) = 0.0.42 +Provides: bundled(npm(@types/history)) = 4.7.9 +Provides: bundled(npm(@types/hoist-non-react-statics)) = 3.3.1 +Provides: bundled(npm(@types/inquirer)) = 8.2.1 +Provides: bundled(npm(@types/is-hotkey)) = 0.1.7 +Provides: bundled(npm(@types/jest)) = 26.0.15 +Provides: bundled(npm(@types/jquery)) = 3.5.14 +Provides: bundled(npm(@types/js-yaml)) = 4.0.5 +Provides: bundled(npm(@types/jsurl)) = 1.2.30 +Provides: bundled(npm(@types/lingui__macro)) = 3.0.0 +Provides: bundled(npm(@types/lodash)) = 4.14.149 +Provides: bundled(npm(@types/logfmt)) = 1.2.2 +Provides: bundled(npm(@types/marked)) = 4.0.3 +Provides: bundled(npm(@types/mock-raf)) = 1.0.3 +Provides: bundled(npm(@types/mousetrap)) = 1.6.9 +Provides: bundled(npm(@types/node)) = 12.20.24 +Provides: bundled(npm(@types/papaparse)) = 5.3.2 +Provides: bundled(npm(@types/pluralize)) = 0.0.29 +Provides: bundled(npm(@types/prettier)) = 2.4.2 +Provides: bundled(npm(@types/prismjs)) = 1.26.0 +Provides: bundled(npm(@types/prop-types)) = 15.7.4 +Provides: bundled(npm(@types/rc-time-picker)) = 3.4.1 +Provides: bundled(npm(@types/react)) = 17.0.30 +Provides: bundled(npm(@types/react-beautiful-dnd)) = 13.1.2 +Provides: bundled(npm(@types/react-calendar)) = 3.5.1 +Provides: bundled(npm(@types/react-color)) = 3.0.6 +Provides: bundled(npm(@types/react-dev-utils)) = 9.0.10 +Provides: bundled(npm(@types/react-dom)) = 17.0.10 +Provides: bundled(npm(@types/react-grid-layout)) = 1.3.2 +Provides: bundled(npm(@types/react-highlight-words)) = 0.16.4 +Provides: bundled(npm(@types/react-icons)) = 2.2.7 +Provides: bundled(npm(@types/react-loadable)) = 5.5.6 +Provides: bundled(npm(@types/react-redux)) = 7.1.20 +Provides: bundled(npm(@types/react-resizable)) = 3.0.0 +Provides: bundled(npm(@types/react-router-dom)) = 5.3.3 +Provides: bundled(npm(@types/react-table)) = 7.7.12 +Provides: bundled(npm(@types/react-test-renderer)) = 17.0.1 +Provides: bundled(npm(@types/react-transition-group)) = 4.4.4 +Provides: bundled(npm(@types/react-virtualized-auto-sizer)) = 1.0.1 +Provides: bundled(npm(@types/react-window)) = 1.8.5 +Provides: bundled(npm(@types/react-window-infinite-loader)) = 1.0.6 +Provides: bundled(npm(@types/redux-mock-store)) = 1.0.3 +Provides: bundled(npm(@types/reselect)) = 2.2.0 +Provides: bundled(npm(@types/rimraf)) = 3.0.2 +Provides: bundled(npm(@types/semver)) = 7.3.9 +Provides: bundled(npm(@types/sinon)) = 10.0.11 +Provides: bundled(npm(@types/slate)) = 0.47.9 +Provides: bundled(npm(@types/slate-plain-serializer)) = 0.7.2 +Provides: bundled(npm(@types/slate-react)) = 0.22.9 +Provides: bundled(npm(@types/systemjs)) = 0.20.8 +Provides: bundled(npm(@types/testing-library__jest-dom)) = 5.14.1 +Provides: bundled(npm(@types/testing-library__react-hooks)) = 3.4.1 +Provides: bundled(npm(@types/tinycolor2)) = 1.4.3 +Provides: bundled(npm(@types/tmp)) = 0.2.3 +Provides: bundled(npm(@types/uuid)) = 8.3.3 +Provides: bundled(npm(@typescript-eslint/eslint-plugin)) = 5.16.0 +Provides: bundled(npm(@typescript-eslint/parser)) = 5.16.0 +Provides: bundled(npm(@visx/event)) = 2.6.0 +Provides: bundled(npm(@visx/gradient)) = 2.10.0 +Provides: bundled(npm(@visx/group)) = 2.10.0 +Provides: bundled(npm(@visx/scale)) = 2.2.2 +Provides: bundled(npm(@visx/shape)) = 2.10.0 +Provides: bundled(npm(@visx/tooltip)) = 2.10.0 +Provides: bundled(npm(@welldone-software/why-did-you-render)) = 7.0.1 +Provides: bundled(npm(@wojtekmaj/enzyme-adapter-react-17)) = 0.6.7 +Provides: bundled(npm(angular)) = 1.8.3 +Provides: bundled(npm(angular-bindonce)) = 0.3.1 +Provides: bundled(npm(angular-route)) = 1.8.3 +Provides: bundled(npm(angular-sanitize)) = 1.8.3 +Provides: bundled(npm(ansicolor)) = 1.1.100 +Provides: bundled(npm(app)) = 0.0.0-use.local +Provides: bundled(npm(autoprefixer)) = 9.8.8 +Provides: bundled(npm(axios)) = 0.25.0 +Provides: bundled(npm(babel-jest)) = 27.5.1 +Provides: bundled(npm(babel-loader)) = 8.2.3 +Provides: bundled(npm(babel-plugin-angularjs-annotate)) = 0.10.0 +Provides: bundled(npm(babel-plugin-macros)) = 2.8.0 +Provides: bundled(npm(baron)) = 3.0.3 +Provides: bundled(npm(blink-diff)) = 1.0.13 +Provides: bundled(npm(brace)) = 0.11.1 +Provides: bundled(npm(calculate-size)) = 1.1.1 +Provides: bundled(npm(centrifuge)) = 2.8.5 +Provides: bundled(npm(chalk)) = 2.4.2 +Provides: bundled(npm(chance)) = 1.1.8 +Provides: bundled(npm(chrome-remote-interface)) = 0.31.2 +Provides: bundled(npm(classnames)) = 2.3.1 +Provides: bundled(npm(combokeys)) = 3.0.1 +Provides: bundled(npm(comlink)) = 4.3.1 +Provides: bundled(npm(command-exists)) = 1.2.9 +Provides: bundled(npm(commander)) = 2.11.0 +Provides: bundled(npm(common-tags)) = 1.8.0 +Provides: bundled(npm(copy-to-clipboard)) = 3.3.1 +Provides: bundled(npm(copy-webpack-plugin)) = 9.0.1 +Provides: bundled(npm(core-js)) = 2.6.12 +Provides: bundled(npm(css-loader)) = 3.6.0 +Provides: bundled(npm(css-minimizer-webpack-plugin)) = 3.4.1 +Provides: bundled(npm(csstype)) = 2.6.18 +Provides: bundled(npm(cypress)) = 9.5.1 +Provides: bundled(npm(cypress-file-upload)) = 5.0.8 +Provides: bundled(npm(d3)) = 5.15.0 +Provides: bundled(npm(d3-force)) = 1.2.1 +Provides: bundled(npm(d3-interpolate)) = 1.4.0 +Provides: bundled(npm(d3-scale-chromatic)) = 1.5.0 +Provides: bundled(npm(dangerously-set-html-content)) = 1.0.9 +Provides: bundled(npm(date-fns)) = 2.25.0 +Provides: bundled(npm(debounce-promise)) = 3.1.2 +Provides: bundled(npm(deep-freeze)) = 0.0.1 +Provides: bundled(npm(devtools-protocol)) = 0.0.927104 +Provides: bundled(npm(emotion)) = 10.0.27 +Provides: bundled(npm(enzyme)) = 3.11.0 +Provides: bundled(npm(enzyme-to-json)) = 3.6.2 +Provides: bundled(npm(eslint)) = 8.11.0 +Provides: bundled(npm(eslint-config-prettier)) = 8.5.0 +Provides: bundled(npm(eslint-plugin-import)) = 2.26.0 +Provides: bundled(npm(eslint-plugin-jest)) = 26.2.2 +Provides: bundled(npm(eslint-plugin-jsdoc)) = 38.0.6 +Provides: bundled(npm(eslint-plugin-lodash)) = 7.4.0 +Provides: bundled(npm(eslint-plugin-react)) = 7.29.4 +Provides: bundled(npm(eslint-plugin-react-hooks)) = 4.3.0 +Provides: bundled(npm(eslint-webpack-plugin)) = 3.1.1 +Provides: bundled(npm(eventemitter3)) = 4.0.7 +Provides: bundled(npm(execa)) = 1.0.0 +Provides: bundled(npm(expose-loader)) = 4.0.0 +Provides: bundled(npm(fast-deep-equal)) = 3.1.3 +Provides: bundled(npm(fast-json-patch)) = 3.1.1 +Provides: bundled(npm(file-loader)) = 6.2.0 +Provides: bundled(npm(file-saver)) = 2.0.5 +Provides: bundled(npm(fork-ts-checker-webpack-plugin)) = 4.1.6 +Provides: bundled(npm(fs-extra)) = 0.30.0 +Provides: bundled(npm(fuzzy)) = 0.1.3 +Provides: bundled(npm(glob)) = 7.2.0 +Provides: bundled(npm(globby)) = 9.2.0 +Provides: bundled(npm(history)) = 4.10.1 +Provides: bundled(npm(hoist-non-react-statics)) = 3.3.2 +Provides: bundled(npm(html-loader)) = 3.1.0 +Provides: bundled(npm(html-webpack-plugin)) = 4.5.2 +Provides: bundled(npm(http-server)) = 14.1.0 +Provides: bundled(npm(husky)) = 8.0.1 +Provides: bundled(npm(iconscout-unicons-tarball)) = 1.0.0 +Provides: bundled(npm(immer)) = 9.0.7 +Provides: bundled(npm(immutable)) = 3.8.2 +Provides: bundled(npm(inquirer)) = 7.3.3 +Provides: bundled(npm(is-hotkey)) = 0.1.4 +Provides: bundled(npm(jest)) = 27.5.1 +Provides: bundled(npm(jest-canvas-mock)) = 2.3.1 +Provides: bundled(npm(jest-coverage-badges)) = 1.1.2 +Provides: bundled(npm(jest-date-mock)) = 1.0.8 +Provides: bundled(npm(jest-fail-on-console)) = 2.4.1 +Provides: bundled(npm(jest-junit)) = 13.1.0 +Provides: bundled(npm(jest-matcher-utils)) = 27.5.1 +Provides: bundled(npm(jest-mock-console)) = 1.2.3 +Provides: bundled(npm(jquery)) = 3.5.1 +Provides: bundled(npm(js-yaml)) = 3.13.1 +Provides: bundled(npm(json-markup)) = 1.1.3 +Provides: bundled(npm(json-source-map)) = 0.6.1 +Provides: bundled(npm(jsurl)) = 0.1.5 +Provides: bundled(npm(kbar)) = 0.1.0b34 +Provides: bundled(npm(lerna)) = 4.0.0 +Provides: bundled(npm(less)) = 4.1.2 +Provides: bundled(npm(less-loader)) = 10.2.0 +Provides: bundled(npm(lezer-promql)) = 0.22.0 +Provides: bundled(npm(lint-staged)) = 12.4.1 +Provides: bundled(npm(lodash)) = 4.17.21 +Provides: bundled(npm(logfmt)) = 1.3.2 +Provides: bundled(npm(lru-cache)) = 5.1.1 +Provides: bundled(npm(lru-memoize)) = 1.1.0 +Provides: bundled(npm(marked)) = 4.0.16 +Provides: bundled(npm(md5-file)) = 5.0.0 +Provides: bundled(npm(memoize-one)) = 4.0.3 +Provides: bundled(npm(mini-css-extract-plugin)) = 2.6.0 +Provides: bundled(npm(mocha)) = 10.0.0 +Provides: bundled(npm(mock-raf)) = 1.0.1 +Provides: bundled(npm(moment)) = 2.29.4 +Provides: bundled(npm(moment-timezone)) = 0.5.34 +Provides: bundled(npm(monaco-editor)) = 0.31.1 +Provides: bundled(npm(monaco-promql)) = 1.7.4 +Provides: bundled(npm(mousetrap)) = 1.6.5 +Provides: bundled(npm(mousetrap-global-bind)) = 1.1.0 +Provides: bundled(npm(moveable)) = 0.29.8 +Provides: bundled(npm(mutationobserver-shim)) = 0.3.7 +Provides: bundled(npm(ngtemplate-loader)) = 2.1.0 +Provides: bundled(npm(node-notifier)) = 10.0.1 +Provides: bundled(npm(nodemon)) = 2.0.16 +Provides: bundled(npm(ol)) = 6.14.1 +Provides: bundled(npm(ora)) = 5.4.1 +Provides: bundled(npm(papaparse)) = 5.3.1 +Provides: bundled(npm(pixelmatch)) = 5.2.1 +Provides: bundled(npm(pluralize)) = 8.0.0 +Provides: bundled(npm(pngjs)) = 2.3.1 +Provides: bundled(npm(postcss)) = 7.0.39 +Provides: bundled(npm(postcss-flexbugs-fixes)) = 4.2.1 +Provides: bundled(npm(postcss-loader)) = 4.3.0 +Provides: bundled(npm(postcss-preset-env)) = 7.4.3 +Provides: bundled(npm(postcss-reporter)) = 7.0.5 +Provides: bundled(npm(postcss-scss)) = 4.0.2 +Provides: bundled(npm(prettier)) = 2.3.0 +Provides: bundled(npm(prismjs)) = 1.27.0 +Provides: bundled(npm(process)) = 0.11.10 +Provides: bundled(npm(prop-types)) = 15.7.2 +Provides: bundled(npm(raw-loader)) = 4.0.2 +Provides: bundled(npm(rc-cascader)) = 3.5.0 +Provides: bundled(npm(rc-drawer)) = 4.4.3 +Provides: bundled(npm(rc-slider)) = 9.7.5 +Provides: bundled(npm(rc-time-picker)) = 3.7.3 +Provides: bundled(npm(re-resizable)) = 6.9.9 +Provides: bundled(npm(react)) = 17.0.1 +Provides: bundled(npm(react-beautiful-dnd)) = 13.1.0 +Provides: bundled(npm(react-calendar)) = 3.7.0 +Provides: bundled(npm(react-colorful)) = 5.5.1 +Provides: bundled(npm(react-custom-scrollbars-2)) = 4.4.0 +Provides: bundled(npm(react-dev-utils)) = 12.0.0 +Provides: bundled(npm(react-diff-viewer)) = 3.1.1 +Provides: bundled(npm(react-docgen-typescript-loader)) = 3.7.2 +Provides: bundled(npm(react-dom)) = 17.0.1 +Provides: bundled(npm(react-draggable)) = 4.4.4 +Provides: bundled(npm(react-dropzone)) = 12.0.4 +Provides: bundled(npm(react-grid-layout)) = 1.3.4 +Provides: bundled(npm(react-highlight-words)) = 0.18.0 +Provides: bundled(npm(react-hook-form)) = 7.5.3 +Provides: bundled(npm(react-icons)) = 2.2.7 +Provides: bundled(npm(react-inlinesvg)) = 2.3.0 +Provides: bundled(npm(react-loadable)) = 5.5.0 +Provides: bundled(npm(react-moveable)) = 0.32.7 +Provides: bundled(npm(react-popper)) = 2.2.5 +Provides: bundled(npm(react-popper-tooltip)) = 3.1.1 +Provides: bundled(npm(react-redux)) = 7.2.6 +Provides: bundled(npm(react-refresh)) = 0.11.0 +Provides: bundled(npm(react-resizable)) = 3.0.4 +Provides: bundled(npm(react-reverse-portal)) = 2.1.0 +Provides: bundled(npm(react-router-dom)) = 5.3.0 +Provides: bundled(npm(react-select)) = 3.2.0 +Provides: bundled(npm(react-select-event)) = 5.3.0 +Provides: bundled(npm(react-split-pane)) = 0.1.92 +Provides: bundled(npm(react-table)) = 7.8.0 +Provides: bundled(npm(react-test-renderer)) = 17.0.2 +Provides: bundled(npm(react-transition-group)) = 4.4.2 +Provides: bundled(npm(react-use)) = 17.3.2 +Provides: bundled(npm(react-virtualized-auto-sizer)) = 1.0.6 +Provides: bundled(npm(react-window)) = 1.8.7 +Provides: bundled(npm(react-window-infinite-loader)) = 1.0.7 +Provides: bundled(npm(redux)) = 4.1.1 +Provides: bundled(npm(redux-mock-store)) = 1.5.4 +Provides: bundled(npm(redux-thunk)) = 2.4.1 +Provides: bundled(npm(regenerator-runtime)) = 0.11.1 +Provides: bundled(npm(replace-in-file-webpack-plugin)) = 1.0.6 +Provides: bundled(npm(reselect)) = 4.1.0 +Provides: bundled(npm(resolve-as-bin)) = 2.1.0 +Provides: bundled(npm(rimraf)) = 2.7.1 +Provides: bundled(npm(rollup)) = 2.74.1 +Provides: bundled(npm(rollup-plugin-copy)) = 3.4.0 +Provides: bundled(npm(rollup-plugin-sourcemaps)) = 0.6.3 +Provides: bundled(npm(rollup-plugin-svg-import)) = 1.6.0 +Provides: bundled(npm(rollup-plugin-terser)) = 7.0.2 +Provides: bundled(npm(rst2html)) = 1.0.4 +Provides: bundled(npm(rxjs)) = 6.6.7 +Provides: bundled(npm(sass)) = 1.50.1 +Provides: bundled(npm(sass-loader)) = 12.6.0 +Provides: bundled(npm(search-query-parser)) = 1.6.0 +Provides: bundled(npm(selecto)) = 1.16.2 +Provides: bundled(npm(semver)) = 5.7.1 +Provides: bundled(npm(simple-git)) = 3.7.1 +Provides: bundled(npm(sinon)) = 14.0.0 +Provides: bundled(npm(slate)) = 0.47.9 +Provides: bundled(npm(slate-plain-serializer)) = 0.7.11 +Provides: bundled(npm(slate-react)) = 0.22.10 +Provides: bundled(npm(storybook-dark-mode)) = 1.1.0 +Provides: bundled(npm(style-loader)) = 1.3.0 +Provides: bundled(npm(stylelint)) = 14.8.2 +Provides: bundled(npm(stylelint-config-prettier)) = 9.0.3 +Provides: bundled(npm(stylelint-config-sass-guidelines)) = 9.0.1 +Provides: bundled(npm(symbol-observable)) = 4.0.0 +Provides: bundled(npm(systemjs)) = 0.20.19 +Provides: bundled(npm(terser-webpack-plugin)) = 1.4.5 +Provides: bundled(npm(test)) = 0.0.0-use.local +Provides: bundled(npm(testing-library-selector)) = 0.2.1 +Provides: bundled(npm(tether-drop)) = 1.5.0 +Provides: bundled(npm(tinycolor2)) = 1.4.2 +Provides: bundled(npm(tracelib)) = 1.0.1 +Provides: bundled(npm(ts-jest)) = 27.1.3 +Provides: bundled(npm(ts-loader)) = 6.2.1 +Provides: bundled(npm(ts-node)) = 9.1.1 +Provides: bundled(npm(tslib)) = 1.14.1 +Provides: bundled(npm(tween-functions)) = 1.2.0 +Provides: bundled(npm(typescript)) = 4.5.5 +Provides: bundled(npm(uplot)) = 1.6.22 +Provides: bundled(npm(url-loader)) = 4.1.1 +Provides: bundled(npm(uuid)) = 3.4.0 +Provides: bundled(npm(vendor)) = 0.0.0-use.local +Provides: bundled(npm(visjs-network)) = 4.25.0 +Provides: bundled(npm(wait-on)) = 6.0.1 +Provides: bundled(npm(webpack)) = 4.46.0 +Provides: bundled(npm(webpack-bundle-analyzer)) = 4.5.0 +Provides: bundled(npm(webpack-cli)) = 4.9.2 +Provides: bundled(npm(webpack-dev-server)) = 4.9.0 +Provides: bundled(npm(webpack-filter-warnings-plugin)) = 1.2.1 +Provides: bundled(npm(webpack-merge)) = 5.8.0 +Provides: bundled(npm(whatwg-fetch)) = 3.6.2 +Provides: bundled(npm(xss)) = 1.0.11 +Provides: bundled(npm(yaml)) = 1.10.2 + + +%description +Grafana is an open source, feature rich metrics dashboard and graph editor for +Graphite, InfluxDB & OpenTSDB. + + +%prep +%setup -q -T -D -b 0 +%setup -q -T -D -b 1 +%if %{compile_frontend} == 0 +# remove bundled plugins source, otherwise they'll get merged +# with the compiled bundled plugins when extracting the webpack +rm -r plugins-bundled +%setup -q -T -D -b 2 +%endif + +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%if 0%{?fedora} || 0%{?rhel} > 8 +%patch6 -p1 +%endif +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 + +%patch1001 -p1 +%if %{enable_fips_mode} +%patch1002 -p1 +%endif +%ifarch s390x i686 armv7hl +%patch1003 -p1 +%endif + + +%build +# Build the frontend +%if %{compile_frontend} +%{SOURCE5} +%endif + +# Build the backend + +# required since RHEL 8.8 to fix the following error: +# "imports crypto/boring: build constraints exclude all Go files in /usr/lib/golang/src/crypto/boring" +# can be removed in a future Go release +export GOEXPERIMENT=boringcrypto +# see grafana-X.Y.Z/pkg/build/cmd.go +export LDFLAGS="-X main.version=%{version} -X main.buildstamp=${SOURCE_DATE_EPOCH}" +for cmd in grafana-cli grafana-server; do + %gobuild -o %{_builddir}/bin/${cmd} ./pkg/cmd/${cmd} +done + + +%install +# dirs, shared files, public html, webpack +install -d %{buildroot}%{_sbindir} +install -d %{buildroot}%{_datadir}/%{name} +install -d %{buildroot}%{_libexecdir}/%{name} +cp -a conf public plugins-bundled %{buildroot}%{_datadir}/%{name} +rm %{buildroot}%{_datadir}/%{name}/public/img/icons/.gitignore +rm %{buildroot}%{_datadir}/%{name}/public/lib/.gitignore + +# wrappers +install -p -m 755 packaging/wrappers/grafana-cli %{buildroot}%{_sbindir}/%{name}-cli + +# binaries +install -p -m 755 %{_builddir}/bin/%{name}-server %{buildroot}%{_sbindir} +install -p -m 755 %{_builddir}/bin/%{name}-cli %{buildroot}%{_libexecdir}/%{name} + +# man pages +install -d %{buildroot}%{_mandir}/man1 +install -p -m 644 docs/man/man1/* %{buildroot}%{_mandir}/man1 + +# config dirs +install -d %{buildroot}%{_sysconfdir}/%{name} +install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning +install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/access-control +install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/dashboards +install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/datasources +install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/notifiers +install -d %{buildroot}%{_sysconfdir}/%{name}/provisioning/plugins +install -d %{buildroot}%{_sysconfdir}/sysconfig + +# config defaults +install -p -m 640 conf/sample.ini %{buildroot}%{_sysconfdir}/%{name}/grafana.ini +install -p -m 640 conf/ldap.toml %{buildroot}%{_sysconfdir}/%{name}/ldap.toml +install -p -m 644 conf/defaults.ini %{buildroot}%{_datadir}/%{name}/conf/defaults.ini +install -p -m 644 conf/sample.ini %{buildroot}%{_datadir}/%{name}/conf/sample.ini +install -p -m 644 packaging/rpm/sysconfig/grafana-server \ + %{buildroot}%{_sysconfdir}/sysconfig/grafana-server + +# config database directory and plugins +install -d -m 750 %{buildroot}%{_sharedstatedir}/%{name} +install -d -m 755 %{buildroot}%{_sharedstatedir}/%{name}/plugins + +# log directory +install -d %{buildroot}%{_localstatedir}/log/%{name} + +# systemd service files +install -d %{buildroot}%{_unitdir} # only needed for manual rpmbuilds +install -p -m 644 packaging/rpm/systemd/grafana-server.service \ + %{buildroot}%{_unitdir} + +# daemon run pid file config for using tmpfs +install -d %{buildroot}%{_tmpfilesdir} +echo "d %{_rundir}/%{name} 0755 %{GRAFANA_USER} %{GRAFANA_GROUP} -" \ + > %{buildroot}%{_tmpfilesdir}/%{name}.conf + +# systemd-sysusers configuration +install -p -m 644 -D %{SOURCE3} %{buildroot}%{_sysusersdir}/%{name}.conf + +%pre +%sysusers_create_compat %{SOURCE3} + +%preun +%systemd_preun grafana-server.service + +%post +%systemd_post grafana-server.service +# create grafana.db with secure permissions on new installations +# otherwise grafana-server is creating grafana.db on first start +# with world-readable permissions, which may leak encrypted datasource +# passwords to all users (if the secret_key in grafana.ini was not changed) + +# https://bugzilla.redhat.com/show_bug.cgi?id=1805472 +if [ "$1" = 1 ] && [ ! -f %{_sharedstatedir}/%{name}/grafana.db ]; then + touch %{_sharedstatedir}/%{name}/grafana.db +fi + +# apply secure permissions to grafana.db if it exists +# (may not exist on upgrades, because users can choose between sqlite/mysql/postgres) +if [ -f %{_sharedstatedir}/%{name}/grafana.db ]; then + chown %{GRAFANA_USER}:%{GRAFANA_GROUP} %{_sharedstatedir}/%{name}/grafana.db + chmod 640 %{_sharedstatedir}/%{name}/grafana.db +fi + +# required for upgrades +chmod 640 %{_sysconfdir}/%{name}/grafana.ini +chmod 640 %{_sysconfdir}/%{name}/ldap.toml + +%postun +%systemd_postun_with_restart grafana-server.service + + +%check +# Test frontend +%if %{compile_frontend} +yarn run jest +%endif + +# Test backend + +# in setting_test.go there is a unit test which checks if 10 days are 240 hours +# which is usually true except if the daylight saving time change falls into the last 10 days, then it's either 239 or 241 hours... +# let's set the time zone to a time zone without daylight saving time +export TZ=GMT + +# required since RHEL 8.8 to fix the following error: +# "imports crypto/boring: build constraints exclude all Go files in /usr/lib/golang/src/crypto/boring" +# can be removed in a future Go release +export GOEXPERIMENT=boringcrypto +%gotest ./pkg/... + +%if %{enable_fips_mode} +OPENSSL_FORCE_FIPS_MODE=1 GOLANG_FIPS=1 go test -v ./pkg/util -run TestEncryption +%endif + +%files +# binaries and wrappers +%{_sbindir}/%{name}-server +%{_sbindir}/%{name}-cli +%{_libexecdir}/%{name} + +# config files +%config(noreplace) %{_sysconfdir}/sysconfig/grafana-server +%dir %{_sysconfdir}/%{name} +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/access-control +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/dashboards +%attr(0750, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/datasources +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/notifiers +%attr(0755, root, %{GRAFANA_GROUP}) %dir %{_sysconfdir}/%{name}/provisioning/plugins +%attr(0640, root, %{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/grafana.ini +%attr(0640, root, %{GRAFANA_GROUP}) %config(noreplace) %{_sysconfdir}/%{name}/ldap.toml + +# config database directory and plugins +%attr(0750, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_sharedstatedir}/%{name} +%attr(-, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_sharedstatedir}/%{name}/plugins + +# shared directory and all files therein +%{_datadir}/%{name} + +# systemd service file +%{_unitdir}/grafana-server.service + +# Grafana configuration to dynamically create /run/grafana/grafana.pid on tmpfs +%{_tmpfilesdir}/%{name}.conf + +# systemd-sysusers configuration file +%{_sysusersdir}/%{name}.conf + +# log directory - grafana.log is created by grafana-server, and it does it's own log rotation +%attr(0755, %{GRAFANA_USER}, %{GRAFANA_GROUP}) %dir %{_localstatedir}/log/%{name} + +# man pages for grafana binaries +%{_mandir}/man1/%{name}-server.1* +%{_mandir}/man1/%{name}-cli.1* + +# other docs and license +%license LICENSE LICENSING.md NOTICE.md +%doc CHANGELOG.md CODE_OF_CONDUCT.md CONTRIBUTING.md GOVERNANCE.md HALL_OF_FAME.md ISSUE_TRIAGE.md MAINTAINERS.md +%doc PLUGIN_DEV.md README.md ROADMAP.md SECURITY.md SUPPORT.md UPGRADING_DEPENDENCIES.md WORKFLOW.md + + +%changelog +* Tue Nov 01 2022 Stan Cox 9.0.9-2 +- resolve CVE-2022-39229 grafana: Using email as a username can prevent other users from signing in +- resolve CVE-2022-2880 CVE-2022-41715 grafana: various flaws + +* Wed Sep 21 2022 Andreas Gerstmayr 9.0.9-1 +- update to 9.0.9 tagged upstream community sources, see CHANGELOG +- resolve CVE-2022-35957 grafana: Escalation from admin to server admin when auth proxy is used (rhbz#2125530) + +* Tue Sep 20 2022 Andreas Gerstmayr 9.0.8-2 +- bump NVR + +* Thu Sep 15 2022 Andreas Gerstmayr 9.0.8-1 +- update to 9.0.8 tagged upstream community sources, see CHANGELOG +- do not list /usr/share/grafana/conf twice +- drop makefile in favor of create_bundles.sh script +- sync provides/obsoletes with CentOS versions +- drop husky patch + +* Thu Aug 11 2022 Andreas Gerstmayr 7.5.15-3 +- resolve CVE-2022-1962 golang: go/parser: stack exhaustion in all Parse* functions +- resolve CVE-2022-1705 golang: net/http: improper sanitization of Transfer-Encoding header +- resolve CVE-2022-32148 golang: net/http/httputil: NewSingleHostReverseProxy - omit X-Forwarded-For not working +- resolve CVE-2022-30631 golang: compress/gzip: stack exhaustion in Reader.Read +- resolve CVE-2022-30630 golang: io/fs: stack exhaustion in Glob +- resolve CVE-2022-30632 golang: path/filepath: stack exhaustion in Glob +- resolve CVE-2022-30635 golang: encoding/gob: stack exhaustion in Decoder.Decode +- resolve CVE-2022-28131 golang: encoding/xml: stack exhaustion in Decoder.Skip +- resolve CVE-2022-30633 golang: encoding/xml: stack exhaustion in Unmarshal + +* Tue Jul 26 2022 Andreas Gerstmayr 7.5.15-2 +- resolve CVE-2022-31107 grafana: OAuth account takeover + +* Fri Apr 22 2022 Andreas Gerstmayr 7.5.15-1 +- update to 7.5.15 tagged upstream community sources, see CHANGELOG +- resolve CVE-2022-21673 grafana: Forward OAuth Identity Token can allow users to access some data sources +- resolve CVE-2022-21702 grafana: XSS vulnerability in data source handling +- resolve CVE-2022-21703 grafana: CSRF vulnerability can lead to privilege escalation +- resolve CVE-2022-21713 grafana: IDOR vulnerability can lead to information disclosure +- resolve CVE-2021-23648 sanitize-url: XSS +- resolve CVE-2022-21698 prometheus/client_golang: Denial of service using InstrumentHandlerCounter +- declare Node.js dependencies of subpackages +- make vendor and webpack tarballs reproducible + +* Tue Jan 18 2022 Andreas Gerstmayr 7.5.11-3 +- use HMAC-SHA-256 instead of SHA-1 to generate password reset tokens +- update FIPS tests in check phase + +* Thu Dec 16 2021 Andreas Gerstmayr 7.5.11-2 +- resolve CVE-2021-44716 golang: net/http: limit growth of header canonicalization cache +- resolve CVE-2021-43813 grafana: directory traversal vulnerability for *.md files + +* Mon Oct 11 2021 Andreas Gerstmayr 7.5.11-1 +- update to 7.5.11 tagged upstream community sources, see CHANGELOG +- resolve CVE-2021-39226 + +* Thu Sep 30 2021 Andreas Gerstmayr 7.5.10-1 +- update to 7.5.10 tagged upstream community sources, see CHANGELOG + +* Mon Aug 09 2021 Mohan Boddu - 7.5.9-3 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Thu Jul 08 2021 Andreas Gerstmayr 7.5.9-2 +- remove unused dependency property-information +- always include FIPS patch in SRPM + +* Fri Jun 25 2021 Andreas Gerstmayr 7.5.9-1 +- update to 7.5.9 tagged upstream community sources, see CHANGELOG + +* Tue Jun 22 2021 Mohan Boddu - 7.5.8-2 +- Rebuilt for RHEL 9 BETA for openssl 3.0 + Related: rhbz#1971065 + +* Mon Jun 21 2021 Andreas Gerstmayr 7.5.8-1 +- update to 7.5.8 tagged upstream community sources, see CHANGELOG +- remove unused dependencies selfsigned, http-signature and gofpdf + +* Fri Jun 11 2021 Andreas Gerstmayr 7.5.7-2 +- remove unused cryptographic implementations +- use cryptographic functions from OpenSSL if FIPS mode is enabled + +* Tue May 25 2021 Andreas Gerstmayr 7.5.7-1 +- update to 7.5.7 tagged upstream community sources, see CHANGELOG + +* Thu Apr 15 2021 Mohan Boddu - 7.3.6-4 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Tue Jan 26 2021 Fedora Release Engineering - 7.3.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Fri Jan 22 2021 Andreas Gerstmayr 7.3.6-2 +- change working dir to $GRAFANA_HOME in grafana-cli wrapper (fixes Red Hat BZ #1916083) +- add pcp-redis-datasource to allow_loading_unsigned_plugins config option + +* Mon Dec 21 2020 Andreas Gerstmayr 7.3.6-1 +- update to 7.3.6 tagged upstream community sources, see CHANGELOG +- remove dependency on SAML (not supported in the open source version of Grafana) + +* Wed Nov 25 2020 Andreas Gerstmayr 7.3.4-1 +- update to 7.3.4 tagged upstream community sources, see CHANGELOG + +* Tue Nov 10 2020 Andreas Gerstmayr 7.3.1-1 +- update to 7.3.1 tagged upstream community sources, see CHANGELOG +- optionally bundle node.js dependencies and build and test frontend as part of the specfile +- change default provisioning path to /etc/grafana/provisioning (changed in version 7.1.1-1) +- resolve https://bugzilla.redhat.com/show_bug.cgi?id=1843170 + +* Sat Aug 01 2020 Fedora Release Engineering - 7.1.1-2 +- Second attempt - Rebuilt for + https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Thu Jul 30 2020 Andreas Gerstmayr 7.1.1-1 +- update to 7.1.1 tagged upstream community sources, see CHANGELOG +- merge all datasources into main grafana package +- bundle golang dependencies + +* Tue Jul 28 2020 Fedora Release Engineering - 6.7.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri Jun 05 2020 Andreas Gerstmayr 6.7.4-1 +- update to 6.7.4 tagged upstream community sources, see CHANGELOG +- security fix for CVE-2020-13379 + +* Tue Apr 28 2020 Andreas Gerstmayr 6.7.3-1 +- update to 6.7.3 tagged upstream community sources, see CHANGELOG +- add scripts to list Go dependencies and bundled npmjs dependencies +- set Grafana version in Grafana UI and grafana-cli --version +- declare README.md as documentation of datasource plugins +- create grafana.db on first installation (fixes RH BZ #1805472) +- change permissions of /var/lib/grafana to 750 (CVE-2020-12458) +- change permissions of /var/lib/grafana/grafana.db to 640 and + user/group grafana:grafana (CVE-2020-12458) +- change permissions of grafana.ini and ldap.toml to 640 (CVE-2020-12459) + +* Wed Feb 26 2020 Mark Goodwin 6.6.2-1 +- added patch0 to set the version string correctly +- removed patch 004-xerrors.patch, it's now upstream +- added several patches for golang vendored vrs build dep differences +- added patch to move grafana-cli binary to libexec dir +- update to 6.6.2 tagged upstream community sources, see CHANGELOG + +* Wed Nov 20 2019 Mark Goodwin 6.3.6-1 +- add weak depenency on grafana-pcp +- add patch to mute shellcheck SC1090 for grafana-cli +- update to 6.3.6 upstream community sources, see CHANGELOG + +* Thu Sep 05 2019 Mark Goodwin 6.3.5-1 +- drop uaparser patch now it's upstream +- add xerrors patch, see https://github.com/golang/go/issues/32246 +- use vendor sources on rawhide until modules are fully supported +- update to latest upstream community sources, see CHANGELOG + +* Fri Aug 30 2019 Mark Goodwin 6.3.4-1 +- include fix for CVE-2019-15043 +- add patch for uaparser on 32bit systems +- update to latest upstream community sources, see CHANGELOG + +* Wed Jul 31 2019 Mark Goodwin 6.2.5-1 +- update to latest upstream community sources, see CHANGELOG + +* Thu Jul 25 2019 Fedora Release Engineering - 6.2.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Fri Jun 07 2019 Mark Goodwin 6.2.2-1 +- split out some datasource plugins to sub-packages +- update to latest upstream community sources, see CHANGELOG + +* Wed Jun 05 2019 Mark Goodwin 6.2.1-1 +- update to latest upstream community sources, see CHANGELOG + +* Fri May 24 2019 Mark Goodwin 6.2.0-1 +- update to latest upstream community sources +- drop a couple of patches + +* Wed May 08 2019 Mark Goodwin 6.1.6-2 +- add conditional unbundle_vendor_sources macro + +* Tue Apr 30 2019 Mark Goodwin 6.1.6-1 +- update to latest upstream stable release 6.1.6, see CHANGELOG +- includes jQuery 3.4.0 security update + +* Wed Apr 24 2019 Mark Goodwin 6.1.4-1 +- update to latest upstream stable release 6.1.4, see CHANGELOG +- use gobuild and gochecks macros, eliminate arch symlinks +- re-enable grafana-debugsource package +- fix GRAFANA_GROUP typo +- fix more modes for brp-mangle-shebangs +- vendor source unbundling now done in prep after patches +- remove all rhel and fedora conditional guff + +* Tue Apr 16 2019 Mark Goodwin 6.1.3-1 +- update to latest upstream stable release 6.1.3, see CHANGELOG +- unbundle all vendor sources, replace with BuildRequires, see + the long list of blocker BZs linked to BZ#1670656 +- BuildRequires go-plugin >= v1.0.0 for grpc_broker (thanks eclipseo) +- tweak make_webpack to no longer use grunt, switch to prod build +- add ExclusiveArch lua script (thanks quantum.analyst) +- move db directory and plugins to /var/lib/grafana +- split out into 6 patches, ready for upstream PRs +- add check to run go tests for gating checks + +* Thu Apr 04 2019 Mark Goodwin 6.1.0-1 +- update to latest upstream stable release 6.1.0, see CHANGELOG + +* Thu Mar 21 2019 Mark Goodwin 6.0.2-1 +- bump to latest upstream stable release 6.0.2-1 +- unbundle almost all remaining vendor code, see linked blockers in BZ#1670656 + +* Fri Mar 15 2019 Mark Goodwin 6.0.1-3 +- bump to latest upstream stable release 6.0.1-1 + +* Thu Mar 14 2019 Mark Goodwin 6.0.1-2 +- unbundle and add BuildRequires for golang-github-rainycape-unidecode-devel + +* Thu Mar 07 2019 Mark Goodwin 6.0.1-1 +- update to v6.0.1 upstream sources, tweak distro config, re-do patch +- simplify make_webpack.sh script (Elliott Sales de Andrade) +- vendor/github.com/go-ldap is now gone, so don't unbundle it + +* Thu Mar 07 2019 Mark Goodwin 5.4.3-11 +- tweak after latest feedback, bump to 5.4.3-11 (BZ 1670656) +- build debuginfo package again +- unbundle BuildRequires for golang-github-hashicorp-version-devel +- remove some unneeded development files +- remove macros from changelog and other rpmlint tweaks + +* Fri Feb 22 2019 Mark Goodwin 5.4.3-10 +- tweak spec for available and unavailable (bundled) golang packages + +* Wed Feb 20 2019 Xavier Bachelot 5.4.3-9 +- Remove extraneous slash (cosmetic) +- Create directories just before moving stuff in them +- Truncate long lines +- Group all golang stuff +- Simplify BuildRequires/bundled Provides +- Sort BuildRequires/bundled Provides +- Fix bundled go packages Provides + +* Fri Feb 15 2019 Mark Goodwin 5.4.3-8 +- add BuildRequires (and unbundle) vendor sources available in Fedora +- declare Provides for remaining (bundled) vendor go sources +- do not attempt to unbundle anything on RHEL < 7 or Fedora < 28 + +* Thu Feb 07 2019 Mark Goodwin 5.4.3-7 +- further refinement for spec doc section from Xavier Bachelot +- disable debug_package to avoid empty debugsourcefiles.list + +* Wed Feb 06 2019 Mark Goodwin 5.4.3-6 +- further refinement following review by Xavier Bachelot + +* Tue Feb 05 2019 Mark Goodwin 5.4.3-5 +- further refinement following review by Xavier Bachelot + +* Fri Feb 01 2019 Mark Goodwin 5.4.3-4 +- further spec updates after packaging review +- reworked post-install scriplets + +* Thu Jan 31 2019 Mark Goodwin 5.4.3-3 +- tweak FHS patch, update spec after packaging review + +* Wed Jan 30 2019 Mark Goodwin 5.4.3-2 +- add patch to be standard FHS compliant, remove phantomjs +- update to v5.4.3 upstream community sources + +* Wed Jan 09 2019 Mark Goodwin 5.4.2-1 +- update to v5.4.2 upstream community sources + +* Thu Oct 18 2018 Mark Goodwin 5.3.1-1 +- update to v5.3.1 upstream community sources + +* Tue Oct 02 2018 Mark Goodwin 5.2.5-1 +- native RPM spec build with current tagged v5.2.5 sources