parent
322255bed7
commit
b17a96400d
@ -0,0 +1,25 @@ |
||||
# Portainer - Unmetered Edition |
||||
|
||||
Unofficial build of Portainer 100% telemetry-free! |
||||
|
||||
## Run |
||||
|
||||
Build the patched images and run: |
||||
|
||||
```sh |
||||
docker-compose build --pull && docker-compose up -d |
||||
``` |
||||
|
||||
## Sources |
||||
|
||||
+ **GitHub - Official Repo** |
||||
+ **Files** |
||||
+ [package.json](https://github.com/portainer/portainer/blob/develop/package.json) |
||||
+ [gruntfile.js](https://github.com/portainer/portainer/blob/develop/gruntfile.js) |
||||
+ [build.sh](https://github.com/portainer/portainer/blob/develop/build.sh) |
||||
+ [api/cmd/portainer/main.go](https://github.com/portainer/portainer/blob/develop/api/cmd/portainer/main.go) |
||||
+ [build/build_binary.sh](https://github.com/portainer/portainer/blob/develop/build/build_binary.sh) |
||||
+ **PR & Other stuff...** |
||||
+ [feat(core/telemetry): matomo usage POC #4135](https://github.com/portainer/portainer/pull/4135/files) |
||||
+ [feat(telemetry): replace GA with matomo #4140](https://github.com/portainer/portainer/pull/4140/files) |
||||
+ [Search by key "matomo"](https://github.com/portainer/portainer/search?q=matomo&unscoped_q=matomo) |
@ -0,0 +1,41 @@ |
||||
FROM golang:alpine AS builder-bin |
||||
|
||||
ARG GOOS |
||||
ARG GOARCH |
||||
ARG GIT_TAG |
||||
|
||||
COPY remove_telemetry.patch / |
||||
|
||||
RUN apk --update add git patch && \ |
||||
git clone --depth 1 --branch $GIT_TAG https://github.com/portainer/portainer.git && \ |
||||
cd portainer && \ |
||||
git apply /remove_telemetry.patch && \ |
||||
sh ./build/build_binary.sh $GOOS $GOARCH |
||||
|
||||
FROM node:latest AS builder-client |
||||
|
||||
ARG GIT_TAG |
||||
|
||||
COPY *.patch / |
||||
|
||||
RUN apt-get update && apt-get install git && \ |
||||
git clone --depth 1 --branch $GIT_TAG https://github.com/portainer/portainer.git && \ |
||||
cd portainer && \ |
||||
patch -p0 < /client_build_prod.patch && \ |
||||
git apply /remove_telemetry.patch && \ |
||||
yarn && \ |
||||
yarn build:client |
||||
|
||||
FROM alpine:latest AS portainer |
||||
|
||||
LABEL maintainer="Meliurwen <meliruwen@gmail.com>" |
||||
|
||||
COPY --from=builder-bin /go/portainer/dist / |
||||
COPY --from=builder-client /portainer/dist / |
||||
|
||||
WORKDIR / |
||||
|
||||
EXPOSE 9000 |
||||
EXPOSE 8000 |
||||
|
||||
ENTRYPOINT ["/portainer"] |
@ -0,0 +1,11 @@ |
||||
--- gruntfile.js.original 2020-08-31 18:53:26.765587327 +0200
|
||||
+++ gruntfile.js 2020-08-31 18:54:44.121105223 +0200
|
||||
@@ -41,7 +41,7 @@
|
||||
'shell:download_kubectl_binary:linux:' + arch,
|
||||
]);
|
||||
|
||||
- grunt.registerTask('build:client', ['config:dev', 'env:dev', 'webpack:dev']);
|
||||
+ grunt.registerTask('build:client', ['config:prod', 'env:prod', 'webpack:prod']);
|
||||
|
||||
grunt.registerTask('build', ['build:server', 'build:client', 'copy:assets']);
|
||||
|
@ -0,0 +1,618 @@ |
||||
diff --git a/api/bolt/migrator/migrate_dbversion24.go b/api/bolt/migrator/migrate_dbversion24.go
|
||||
index b4843f2..4749607 100644
|
||||
--- a/api/bolt/migrator/migrate_dbversion24.go
|
||||
+++ b/api/bolt/migrator/migrate_dbversion24.go
|
||||
@@ -15,7 +15,6 @@ func (m *Migrator) updateSettingsToDB25() error {
|
||||
}
|
||||
|
||||
legacySettings.UserSessionTimeout = portainer.DefaultUserSessionTimeout
|
||||
- legacySettings.EnableTelemetry = true
|
||||
|
||||
legacySettings.AllowContainerCapabilitiesForRegularUsers = true
|
||||
|
||||
diff --git a/api/cli/cli.go b/api/cli/cli.go
|
||||
index ca65348..9b4864d 100644
|
||||
--- a/api/cli/cli.go
|
||||
+++ b/api/cli/cli.go
|
||||
@@ -2,7 +2,6 @@ package cli
|
||||
|
||||
import (
|
||||
"errors"
|
||||
- "log"
|
||||
"time"
|
||||
|
||||
"github.com/portainer/portainer/api"
|
||||
@@ -36,7 +35,6 @@ func (*Service) ParseFlags(version string) (*portainer.CLIFlags, error) {
|
||||
Data: kingpin.Flag("data", "Path to the folder where the data is stored").Default(defaultDataDirectory).Short('d').String(),
|
||||
EndpointURL: kingpin.Flag("host", "Endpoint URL").Short('H').String(),
|
||||
EnableEdgeComputeFeatures: kingpin.Flag("edge-compute", "Enable Edge Compute features").Bool(),
|
||||
- NoAnalytics: kingpin.Flag("no-analytics", "Disable Analytics in app (deprecated)").Bool(),
|
||||
TLS: kingpin.Flag("tlsverify", "TLS support").Default(defaultTLS).Bool(),
|
||||
TLSSkipVerify: kingpin.Flag("tlsskipverify", "Disable TLS server verification").Default(defaultTLSSkipVerify).Bool(),
|
||||
TLSCacert: kingpin.Flag("tlscacert", "Path to the CA").Default(defaultTLSCACertPath).String(),
|
||||
@@ -69,8 +67,6 @@ func (*Service) ParseFlags(version string) (*portainer.CLIFlags, error) {
|
||||
// ValidateFlags validates the values of the flags.
|
||||
func (*Service) ValidateFlags(flags *portainer.CLIFlags) error {
|
||||
|
||||
- displayDeprecationWarnings(flags)
|
||||
-
|
||||
err := validateEndpointURL(*flags.EndpointURL)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -88,12 +84,6 @@ func (*Service) ValidateFlags(flags *portainer.CLIFlags) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
-func displayDeprecationWarnings(flags *portainer.CLIFlags) {
|
||||
- if *flags.NoAnalytics {
|
||||
- log.Println("Warning: The --no-analytics flag has been kept to allow migration of instances running a previous version of Portainer with this flag enabled, to version 2.0 where enabling this flag will have no effect.")
|
||||
- }
|
||||
-}
|
||||
-
|
||||
func validateEndpointURL(endpointURL string) error {
|
||||
if endpointURL != "" {
|
||||
if !strings.HasPrefix(endpointURL, "unix://") && !strings.HasPrefix(endpointURL, "tcp://") && !strings.HasPrefix(endpointURL, "npipe://") {
|
||||
diff --git a/api/cmd/portainer/main.go b/api/cmd/portainer/main.go
|
||||
index 5d83916..b24277a 100644
|
||||
--- a/api/cmd/portainer/main.go
|
||||
+++ b/api/cmd/portainer/main.go
|
||||
@@ -166,7 +166,6 @@ func updateSettingsFromFlags(dataStore portainer.DataStore, flags *portainer.CLI
|
||||
settings.LogoURL = *flags.Logo
|
||||
settings.SnapshotInterval = *flags.SnapshotInterval
|
||||
settings.EnableEdgeComputeFeatures = *flags.EnableEdgeComputeFeatures
|
||||
- settings.EnableTelemetry = true
|
||||
|
||||
if *flags.Templates != "" {
|
||||
settings.TemplatesURL = *flags.Templates
|
||||
diff --git a/api/http/handler/settings/settings_public.go b/api/http/handler/settings/settings_public.go
|
||||
index e94f501..f0d4f42 100644
|
||||
--- a/api/http/handler/settings/settings_public.go
|
||||
+++ b/api/http/handler/settings/settings_public.go
|
||||
@@ -22,7 +22,6 @@ type publicSettingsResponse struct {
|
||||
EnableHostManagementFeatures bool `json:"EnableHostManagementFeatures"`
|
||||
EnableEdgeComputeFeatures bool `json:"EnableEdgeComputeFeatures"`
|
||||
OAuthLoginURI string `json:"OAuthLoginURI"`
|
||||
- EnableTelemetry bool `json:"EnableTelemetry"`
|
||||
}
|
||||
|
||||
// GET request on /api/settings/public
|
||||
@@ -44,7 +43,6 @@ func (handler *Handler) settingsPublic(w http.ResponseWriter, r *http.Request) *
|
||||
AllowContainerCapabilitiesForRegularUsers: settings.AllowContainerCapabilitiesForRegularUsers,
|
||||
EnableHostManagementFeatures: settings.EnableHostManagementFeatures,
|
||||
EnableEdgeComputeFeatures: settings.EnableEdgeComputeFeatures,
|
||||
- EnableTelemetry: settings.EnableTelemetry,
|
||||
OAuthLoginURI: fmt.Sprintf("%s?response_type=code&client_id=%s&redirect_uri=%s&scope=%s&prompt=login",
|
||||
settings.OAuthSettings.AuthorizationURI,
|
||||
settings.OAuthSettings.ClientID,
|
||||
diff --git a/api/http/handler/settings/settings_update.go b/api/http/handler/settings/settings_update.go
|
||||
index fbdf47b..b44b825 100644
|
||||
--- a/api/http/handler/settings/settings_update.go
|
||||
+++ b/api/http/handler/settings/settings_update.go
|
||||
@@ -32,7 +32,6 @@ type settingsUpdatePayload struct {
|
||||
EdgeAgentCheckinInterval *int
|
||||
EnableEdgeComputeFeatures *bool
|
||||
UserSessionTimeout *string
|
||||
- EnableTelemetry *bool
|
||||
}
|
||||
|
||||
func (payload *settingsUpdatePayload) Validate(r *http.Request) error {
|
||||
@@ -162,10 +161,6 @@ func (handler *Handler) settingsUpdate(w http.ResponseWriter, r *http.Request) *
|
||||
settings.AllowDeviceMappingForRegularUsers = *payload.AllowDeviceMappingForRegularUsers
|
||||
}
|
||||
|
||||
- if payload.EnableTelemetry != nil {
|
||||
- settings.EnableTelemetry = *payload.EnableTelemetry
|
||||
- }
|
||||
-
|
||||
tlsError := handler.updateTLS(settings)
|
||||
if tlsError != nil {
|
||||
return tlsError
|
||||
diff --git a/api/portainer.go b/api/portainer.go
|
||||
index e68e0c2..5e49027 100644
|
||||
--- a/api/portainer.go
|
||||
+++ b/api/portainer.go
|
||||
@@ -44,7 +44,6 @@ type (
|
||||
EndpointURL *string
|
||||
Labels *[]Pair
|
||||
Logo *string
|
||||
- NoAnalytics *bool
|
||||
Templates *string
|
||||
TLS *bool
|
||||
TLSSkipVerify *bool
|
||||
@@ -533,7 +532,6 @@ type (
|
||||
EdgeAgentCheckinInterval int `json:"EdgeAgentCheckinInterval"`
|
||||
EnableEdgeComputeFeatures bool `json:"EnableEdgeComputeFeatures"`
|
||||
UserSessionTimeout string `json:"UserSessionTimeout"`
|
||||
- EnableTelemetry bool `json:"EnableTelemetry"`
|
||||
|
||||
// Deprecated fields
|
||||
DisplayDonationHeader bool
|
||||
diff --git a/app/__module.js b/app/__module.js
|
||||
index bc835f9..dadda0f 100644
|
||||
--- a/app/__module.js
|
||||
+++ b/app/__module.js
|
||||
@@ -3,9 +3,6 @@ import '@babel/polyfill';
|
||||
|
||||
import angular from 'angular';
|
||||
|
||||
-import './matomo-setup';
|
||||
-import './assets/js/angulartics-matomo';
|
||||
-
|
||||
import './agent';
|
||||
import './azure/_module';
|
||||
import './docker/__module';
|
||||
@@ -38,8 +35,6 @@ angular.module('portainer', [
|
||||
'portainer.integrations',
|
||||
'rzModule',
|
||||
'moment-picker',
|
||||
- 'angulartics',
|
||||
- 'angulartics.matomo',
|
||||
]);
|
||||
|
||||
if (require) {
|
||||
diff --git a/app/assets/js/angulartics-matomo.js b/app/assets/js/angulartics-matomo.js
|
||||
deleted file mode 100644
|
||||
index 1b6211c..0000000
|
||||
--- a/app/assets/js/angulartics-matomo.js
|
||||
+++ /dev/null
|
||||
@@ -1,223 +0,0 @@
|
||||
-import angular from 'angular';
|
||||
-
|
||||
-// forked from https://github.com/angulartics/angulartics-piwik/blob/master/src/angulartics-piwik.js
|
||||
-
|
||||
-/* global _paq */
|
||||
-/**
|
||||
- * @ngdoc overview
|
||||
- * @name angulartics.piwik
|
||||
- * Enables analytics support for Piwik/Matomo (http://piwik.org/docs/tracking-api/)
|
||||
- */
|
||||
-angular.module('angulartics.matomo', ['angulartics']).config([
|
||||
- '$analyticsProvider',
|
||||
- '$windowProvider',
|
||||
- function ($analyticsProvider, $windowProvider) {
|
||||
- var $window = $windowProvider.$get();
|
||||
-
|
||||
- $analyticsProvider.settings.pageTracking.trackRelativePath = true;
|
||||
-
|
||||
- // Add piwik specific trackers to angulartics API
|
||||
-
|
||||
- // Requires the CustomDimensions plugin for Piwik.
|
||||
- $analyticsProvider.api.setCustomDimension = function (dimensionId, value) {
|
||||
- if ($window._paq) {
|
||||
- $window._paq.push(['setCustomDimension', dimensionId, value]);
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- // Requires the CustomDimensions plugin for Piwik.
|
||||
- $analyticsProvider.api.deleteCustomDimension = function (dimensionId) {
|
||||
- if ($window._paq) {
|
||||
- $window._paq.push(['deleteCustomDimension', dimensionId]);
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- // scope: visit or page. Defaults to 'page'
|
||||
- $analyticsProvider.api.setCustomVariable = function (varIndex, varName, value, scope) {
|
||||
- if ($window._paq) {
|
||||
- scope = scope || 'page';
|
||||
- $window._paq.push(['setCustomVariable', varIndex, varName, value, scope]);
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- // scope: visit or page. Defaults to 'page'
|
||||
- $analyticsProvider.api.deleteCustomVariable = function (varIndex, scope) {
|
||||
- if ($window._paq) {
|
||||
- scope = scope || 'page';
|
||||
- $window._paq.push(['deleteCustomVariable', varIndex, scope]);
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- // trackSiteSearch(keyword, category, [searchCount])
|
||||
- $analyticsProvider.api.trackSiteSearch = function (keyword, category, searchCount) {
|
||||
- // keyword is required
|
||||
- if ($window._paq && keyword) {
|
||||
- var params = ['trackSiteSearch', keyword, category || false];
|
||||
-
|
||||
- // searchCount is optional
|
||||
- if (angular.isDefined(searchCount)) {
|
||||
- params.push(searchCount);
|
||||
- }
|
||||
-
|
||||
- $window._paq.push(params);
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- // logs a conversion for goal 1. revenue is optional
|
||||
- // trackGoal(goalID, [revenue]);
|
||||
- $analyticsProvider.api.trackGoal = function (goalID, revenue) {
|
||||
- if ($window._paq) {
|
||||
- _paq.push(['trackGoal', goalID, revenue || 0]);
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- // track outlink or download
|
||||
- // linkType is 'link' or 'download', 'link' by default
|
||||
- // trackLink(url, [linkType]);
|
||||
- $analyticsProvider.api.trackLink = function (url, linkType) {
|
||||
- var type = linkType || 'link';
|
||||
- if ($window._paq) {
|
||||
- $window._paq.push(['trackLink', url, type]);
|
||||
- }
|
||||
- };
|
||||
-
|
||||
- // Set default angulartics page and event tracking
|
||||
-
|
||||
- $analyticsProvider.registerSetUsername(function (username) {
|
||||
- if ($window._paq) {
|
||||
- $window._paq.push(['setUserId', username]);
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- // locationObj is the angular $location object
|
||||
- $analyticsProvider.registerPageTrack(function (path) {
|
||||
- if ($window._paq) {
|
||||
- $window._paq.push(['setDocumentTitle', $window.document.title]);
|
||||
- $window._paq.push(['setReferrerUrl', '']);
|
||||
- $window._paq.push(['setCustomUrl', 'http://portainer-ce.app' + path]);
|
||||
- $window._paq.push(['trackPageView']);
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- /**
|
||||
- * @name eventTrack
|
||||
- * Track a basic event in Piwik, or send an ecommerce event.
|
||||
- *
|
||||
- * @param {string} action A string corresponding to the type of event that needs to be tracked.
|
||||
- * @param {object} properties The properties that need to be logged with the event.
|
||||
- */
|
||||
- $analyticsProvider.registerEventTrack(function (action, properties) {
|
||||
- if ($window._paq) {
|
||||
- properties = properties || {};
|
||||
-
|
||||
- switch (action) {
|
||||
- /**
|
||||
- * @description Sets the current page view as a product or category page view. When you call
|
||||
- * setEcommerceView it must be followed by a call to trackPageView to record the product or
|
||||
- * category page view.
|
||||
- *
|
||||
- * @link https://piwik.org/docs/ecommerce-analytics/#tracking-product-page-views-category-page-views-optional
|
||||
- * @link https://developer.piwik.org/api-reference/tracking-javascript#ecommerce
|
||||
- *
|
||||
- * @property productSKU (required) SKU: Product unique identifier
|
||||
- * @property productName (optional) Product name
|
||||
- * @property categoryName (optional) Product category, or array of up to 5 categories
|
||||
- * @property price (optional) Product Price as displayed on the page
|
||||
- */
|
||||
- case 'setEcommerceView':
|
||||
- $window._paq.push(['setEcommerceView', properties.productSKU, properties.productName, properties.categoryName, properties.price]);
|
||||
- break;
|
||||
-
|
||||
- /**
|
||||
- * @description Adds a product into the ecommerce order. Must be called for each product in
|
||||
- * the order.
|
||||
- *
|
||||
- * @link https://piwik.org/docs/ecommerce-analytics/#tracking-ecommerce-orders-items-purchased-required
|
||||
- * @link https://developer.piwik.org/api-reference/tracking-javascript#ecommerce
|
||||
- *
|
||||
- * @property productSKU (required) SKU: Product unique identifier
|
||||
- * @property productName (optional) Product name
|
||||
- * @property categoryName (optional) Product category, or array of up to 5 categories
|
||||
- * @property price (recommended) Product price
|
||||
- * @property quantity (optional, default to 1) Product quantity
|
||||
- */
|
||||
- case 'addEcommerceItem':
|
||||
- $window._paq.push(['addEcommerceItem', properties.productSKU, properties.productName, properties.productCategory, properties.price, properties.quantity]);
|
||||
- break;
|
||||
-
|
||||
- /**
|
||||
- * @description Tracks a shopping cart. Call this javascript function every time a user is
|
||||
- * adding, updating or deleting a product from the cart.
|
||||
- *
|
||||
- * @link https://piwik.org/docs/ecommerce-analytics/#tracking-add-to-cart-items-added-to-the-cart-optional
|
||||
- * @link https://developer.piwik.org/api-reference/tracking-javascript#ecommerce
|
||||
- *
|
||||
- * @property grandTotal (required) Cart amount
|
||||
- */
|
||||
- case 'trackEcommerceCartUpdate':
|
||||
- $window._paq.push(['trackEcommerceCartUpdate', properties.grandTotal]);
|
||||
- break;
|
||||
-
|
||||
- /**
|
||||
- * @description Tracks an Ecommerce order, including any ecommerce item previously added to
|
||||
- * the order. orderId and grandTotal (ie. revenue) are required parameters.
|
||||
- *
|
||||
- * @link https://piwik.org/docs/ecommerce-analytics/#tracking-ecommerce-orders-items-purchased-required
|
||||
- * @link https://developer.piwik.org/api-reference/tracking-javascript#ecommerce
|
||||
- *
|
||||
- * @property orderId (required) Unique Order ID
|
||||
- * @property grandTotal (required) Order Revenue grand total (includes tax, shipping, and subtracted discount)
|
||||
- * @property subTotal (optional) Order sub total (excludes shipping)
|
||||
- * @property tax (optional) Tax amount
|
||||
- * @property shipping (optional) Shipping amount
|
||||
- * @property discount (optional) Discount offered (set to false for unspecified parameter)
|
||||
- */
|
||||
- case 'trackEcommerceOrder':
|
||||
- $window._paq.push(['trackEcommerceOrder', properties.orderId, properties.grandTotal, properties.subTotal, properties.tax, properties.shipping, properties.discount]);
|
||||
- break;
|
||||
-
|
||||
- /**
|
||||
- * @description Logs an event with an event category (Videos, Music, Games...), an event
|
||||
- * action (Play, Pause, Duration, Add Playlist, Downloaded, Clicked...), and an optional
|
||||
- * event name and optional numeric value.
|
||||
- *
|
||||
- * @link https://piwik.org/docs/event-tracking/
|
||||
- * @link https://developer.piwik.org/api-reference/tracking-javascript#using-the-tracker-object
|
||||
- *
|
||||
- * @property category
|
||||
- * @property action
|
||||
- * @property name (optional, recommended)
|
||||
- * @property value (optional)
|
||||
- */
|
||||
- default:
|
||||
- // PAQ requires that eventValue be an integer, see: http://piwik.org/docs/event-tracking
|
||||
- if (properties.value) {
|
||||
- var parsed = parseInt(properties.value, 10);
|
||||
- properties.value = isNaN(parsed) ? 0 : parsed;
|
||||
- }
|
||||
-
|
||||
- $window._paq.push([
|
||||
- 'trackEvent',
|
||||
- properties.category,
|
||||
- action,
|
||||
- properties.name || properties.label, // Changed in favour of Piwik documentation. Added fallback so it's backwards compatible.
|
||||
- properties.value,
|
||||
- ]);
|
||||
- }
|
||||
- }
|
||||
- });
|
||||
-
|
||||
- /**
|
||||
- * @name exceptionTrack
|
||||
- * Sugar on top of the eventTrack method for easily handling errors
|
||||
- *
|
||||
- * @param {object} error An Error object to track: error.toString() used for event 'action', error.stack used for event 'label'.
|
||||
- * @param {object} cause The cause of the error given from $exceptionHandler, not used.
|
||||
- */
|
||||
- $analyticsProvider.registerExceptionTrack(function (error) {
|
||||
- if ($window._paq) {
|
||||
- $window._paq.push(['trackEvent', 'Exceptions', error.toString(), error.stack, 0]);
|
||||
- }
|
||||
- });
|
||||
- },
|
||||
-]);
|
||||
diff --git a/app/matomo-setup.js b/app/matomo-setup.js
|
||||
deleted file mode 100644
|
||||
index b85aa44..0000000
|
||||
--- a/app/matomo-setup.js
|
||||
+++ /dev/null
|
||||
@@ -1,14 +0,0 @@
|
||||
-const _paq = (window._paq = window._paq || []);
|
||||
-/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
|
||||
-_paq.push(['enableLinkTracking']);
|
||||
-
|
||||
-var u = 'https://portainer-ce.matomo.cloud/';
|
||||
-_paq.push(['setTrackerUrl', u + 'matomo.php']);
|
||||
-_paq.push(['setSiteId', '1']);
|
||||
-var d = document,
|
||||
- g = d.createElement('script'),
|
||||
- s = d.getElementsByTagName('script')[0];
|
||||
-g.type = 'text/javascript';
|
||||
-g.async = true;
|
||||
-g.src = '//cdn.matomo.cloud/portainer-ce.matomo.cloud/matomo.js';
|
||||
-s.parentNode.insertBefore(g, s);
|
||||
diff --git a/app/portainer/models/settings.js b/app/portainer/models/settings.js
|
||||
index 40f0003..bec5e78 100644
|
||||
--- a/app/portainer/models/settings.js
|
||||
+++ b/app/portainer/models/settings.js
|
||||
@@ -17,7 +17,6 @@ export function SettingsViewModel(data) {
|
||||
this.EdgeAgentCheckinInterval = data.EdgeAgentCheckinInterval;
|
||||
this.EnableEdgeComputeFeatures = data.EnableEdgeComputeFeatures;
|
||||
this.UserSessionTimeout = data.UserSessionTimeout;
|
||||
- this.EnableTelemetry = data.EnableTelemetry;
|
||||
}
|
||||
|
||||
export function PublicSettingsViewModel(settings) {
|
||||
@@ -33,7 +32,6 @@ export function PublicSettingsViewModel(settings) {
|
||||
this.EnableEdgeComputeFeatures = settings.EnableEdgeComputeFeatures;
|
||||
this.LogoURL = settings.LogoURL;
|
||||
this.OAuthLoginURI = settings.OAuthLoginURI;
|
||||
- this.EnableTelemetry = settings.EnableTelemetry;
|
||||
}
|
||||
|
||||
export function LDAPSettingsViewModel(data) {
|
||||
diff --git a/app/portainer/services/stateManager.js b/app/portainer/services/stateManager.js
|
||||
index cf988e5..98de113 100644
|
||||
--- a/app/portainer/services/stateManager.js
|
||||
+++ b/app/portainer/services/stateManager.js
|
||||
@@ -10,7 +10,6 @@ angular.module('portainer.app').factory('StateManager', [
|
||||
'StatusService',
|
||||
'APPLICATION_CACHE_VALIDITY',
|
||||
'AgentPingService',
|
||||
- '$analytics',
|
||||
function StateManagerFactory(
|
||||
$q,
|
||||
SystemService,
|
||||
@@ -20,8 +19,7 @@ angular.module('portainer.app').factory('StateManager', [
|
||||
SettingsService,
|
||||
StatusService,
|
||||
APPLICATION_CACHE_VALIDITY,
|
||||
- AgentPingService,
|
||||
- $analytics
|
||||
+ AgentPingService
|
||||
) {
|
||||
'use strict';
|
||||
|
||||
@@ -117,15 +115,8 @@ angular.module('portainer.app').factory('StateManager', [
|
||||
LocalStorage.storeApplicationState(state.application);
|
||||
};
|
||||
|
||||
- manager.updateEnableTelemetry = function updateEnableTelemetry(enableTelemetry) {
|
||||
- state.application.enableTelemetry = enableTelemetry;
|
||||
- $analytics.setOptOut(!enableTelemetry);
|
||||
- LocalStorage.storeApplicationState(state.application);
|
||||
- };
|
||||
-
|
||||
function assignStateFromStatusAndSettings(status, settings) {
|
||||
state.application.version = status.Version;
|
||||
- state.application.enableTelemetry = settings.EnableTelemetry;
|
||||
state.application.logo = settings.LogoURL;
|
||||
state.application.snapshotInterval = settings.SnapshotInterval;
|
||||
state.application.enableHostManagementFeatures = settings.EnableHostManagementFeatures;
|
||||
@@ -151,7 +142,6 @@ angular.module('portainer.app').factory('StateManager', [
|
||||
var status = data.status;
|
||||
var settings = data.settings;
|
||||
assignStateFromStatusAndSettings(status, settings);
|
||||
- $analytics.setOptOut(!settings.EnableTelemetry);
|
||||
LocalStorage.storeApplicationState(state.application);
|
||||
deferred.resolve(state);
|
||||
})
|
||||
@@ -189,7 +179,6 @@ angular.module('portainer.app').factory('StateManager', [
|
||||
} else {
|
||||
state.application = applicationState;
|
||||
state.loading = false;
|
||||
- $analytics.setOptOut(!state.application.enableTelemetry);
|
||||
deferred.resolve(state);
|
||||
}
|
||||
} else {
|
||||
diff --git a/app/portainer/views/init/admin/initAdmin.html b/app/portainer/views/init/admin/initAdmin.html
|
||||
index b3643ea..7b1106e 100644
|
||||
--- a/app/portainer/views/init/admin/initAdmin.html
|
||||
+++ b/app/portainer/views/init/admin/initAdmin.html
|
||||
@@ -81,18 +81,6 @@
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
- <!-- !actions -->
|
||||
- <!-- enableTelemetry-->
|
||||
- <div class="form-group">
|
||||
- <div class="col-sm-12">
|
||||
- <input type="checkbox" name="toggle_enableTelemetry" ng-model="formValues.enableTelemetry" />
|
||||
- <span class="text-muted small" style="margin-left: 2px;"
|
||||
- >Allow collection of anonymous statistics. You can find more information about this in our
|
||||
- <a href="https://www.portainer.io/documentation/in-app-analytics-and-privacy-policy/" target="_blank">privacy policy</a>.</span
|
||||
- >
|
||||
- </div>
|
||||
- </div>
|
||||
- <!-- !enableTelemetry-->
|
||||
</form>
|
||||
<!-- !init password form -->
|
||||
</div>
|
||||
diff --git a/app/portainer/views/init/admin/initAdminController.js b/app/portainer/views/init/admin/initAdminController.js
|
||||
index 63bd27d..40a0b28 100644
|
||||
--- a/app/portainer/views/init/admin/initAdminController.js
|
||||
+++ b/app/portainer/views/init/admin/initAdminController.js
|
||||
@@ -15,7 +15,6 @@ angular.module('portainer.app').controller('InitAdminController', [
|
||||
Username: 'admin',
|
||||
Password: '',
|
||||
ConfirmPassword: '',
|
||||
- enableTelemetry: true,
|
||||
};
|
||||
|
||||
$scope.state = {
|
||||
@@ -31,9 +30,6 @@ angular.module('portainer.app').controller('InitAdminController', [
|
||||
.then(function success() {
|
||||
return Authentication.login(username, password);
|
||||
})
|
||||
- .then(function success() {
|
||||
- return SettingsService.update({ enableTelemetry: $scope.formValues.enableTelemetry });
|
||||
- })
|
||||
.then(() => {
|
||||
return StateManager.initialize();
|
||||
})
|
||||
diff --git a/app/portainer/views/settings/settings.html b/app/portainer/views/settings/settings.html
|
||||
index 01008af..cd4ec60 100644
|
||||
--- a/app/portainer/views/settings/settings.html
|
||||
+++ b/app/portainer/views/settings/settings.html
|
||||
@@ -26,18 +26,6 @@
|
||||
<label class="switch" style="margin-left: 20px;"> <input type="checkbox" name="toggle_logo" ng-model="formValues.customLogo" /><i></i> </label>
|
||||
</div>
|
||||
</div>
|
||||
- <div class="form-group">
|
||||
- <div class="col-sm-12">
|
||||
- <label for="toggle_enableTelemetry" class="control-label text-left">
|
||||
- Allow the collection of anonymous statistics
|
||||
- </label>
|
||||
- <label class="switch" style="margin-left: 20px;"> <input type="checkbox" name="toggle_enableTelemetry" ng-model="formValues.enableTelemetry" /><i></i> </label>
|
||||
- </div>
|
||||
- <div class="col-sm-12 text-muted small" style="margin-top: 10px;">
|
||||
- You can find more information about this in our
|
||||
- <a href="https://www.portainer.io/documentation/in-app-analytics-and-privacy-policy/" target="_blank">privacy policy</a>.
|
||||
- </div>
|
||||
- </div>
|
||||
<div ng-if="formValues.customLogo">
|
||||
<div class="form-group">
|
||||
<span class="col-sm-12 text-muted small">
|
||||
diff --git a/app/portainer/views/settings/settingsController.js b/app/portainer/views/settings/settingsController.js
|
||||
index 5bd78d9..09e6f86 100644
|
||||
--- a/app/portainer/views/settings/settingsController.js
|
||||
+++ b/app/portainer/views/settings/settingsController.js
|
||||
@@ -36,7 +36,6 @@ angular.module('portainer.app').controller('SettingsController', [
|
||||
allowDeviceMappingForRegularUsers: false,
|
||||
allowStackManagementForRegularUsers: false,
|
||||
disableContainerCapabilitiesForRegularUsers: false,
|
||||
- enableTelemetry: false,
|
||||
};
|
||||
|
||||
$scope.isContainerEditDisabled = function isContainerEditDisabled() {
|
||||
@@ -86,7 +85,6 @@ angular.module('portainer.app').controller('SettingsController', [
|
||||
settings.AllowDeviceMappingForRegularUsers = !$scope.formValues.disableDeviceMappingForRegularUsers;
|
||||
settings.AllowStackManagementForRegularUsers = !$scope.formValues.disableStackManagementForRegularUsers;
|
||||
settings.AllowContainerCapabilitiesForRegularUsers = !$scope.formValues.disableContainerCapabilitiesForRegularUsers;
|
||||
- settings.EnableTelemetry = $scope.formValues.enableTelemetry;
|
||||
|
||||
$scope.state.actionInProgress = true;
|
||||
updateSettings(settings);
|
||||
@@ -107,7 +105,6 @@ angular.module('portainer.app').controller('SettingsController', [
|
||||
StateManager.updateAllowContainerCapabilitiesForRegularUsers(settings.AllowContainerCapabilitiesForRegularUsers);
|
||||
StateManager.updateAllowPrivilegedModeForRegularUsers(settings.AllowPrivilegedModeForRegularUsers);
|
||||
StateManager.updateAllowBindMountsForRegularUsers(settings.AllowBindMountsForRegularUsers);
|
||||
- StateManager.updateEnableTelemetry(settings.EnableTelemetry);
|
||||
$state.reload();
|
||||
})
|
||||
.catch(function error(err) {
|
||||
@@ -136,7 +133,6 @@ angular.module('portainer.app').controller('SettingsController', [
|
||||
$scope.formValues.disableDeviceMappingForRegularUsers = !settings.AllowDeviceMappingForRegularUsers;
|
||||
$scope.formValues.disableStackManagementForRegularUsers = !settings.AllowStackManagementForRegularUsers;
|
||||
$scope.formValues.disableContainerCapabilitiesForRegularUsers = !settings.AllowContainerCapabilitiesForRegularUsers;
|
||||
- $scope.formValues.enableTelemetry = settings.EnableTelemetry;
|
||||
})
|
||||
.catch(function error(err) {
|
||||
Notifications.error('Failure', err, 'Unable to retrieve application settings');
|
||||
diff --git a/app/vendors.js b/app/vendors.js
|
||||
index 8bdc36d..b9ab85a 100644
|
||||
--- a/app/vendors.js
|
||||
+++ b/app/vendors.js
|
||||
@@ -36,6 +36,5 @@ import 'js-yaml/dist/js-yaml.js';
|
||||
import 'angular-ui-bootstrap';
|
||||
import 'angular-moment-picker';
|
||||
import 'angular-multiselect/isteven-multi-select.js';
|
||||
-import 'angulartics/dist/angulartics.min.js';
|
||||
|
||||
window.angular = angular;
|
||||
diff --git a/package.json b/package.json
|
||||
index 68ee834..d047c05 100644
|
||||
--- a/package.json
|
||||
+++ b/package.json
|
||||
@@ -68,7 +68,6 @@
|
||||
"angular-utils-pagination": "~0.11.1",
|
||||
"angularjs-scroll-glue": "^2.2.0",
|
||||
"angularjs-slider": "^6.4.0",
|
||||
- "angulartics": "^1.6.0",
|
||||
"babel-plugin-angularjs-annotate": "^0.10.0",
|
||||
"bootbox": "^5.4.0",
|
||||
"bootstrap": "^3.4.0",
|
||||
diff --git a/yarn.lock b/yarn.lock
|
||||
index 1abaa00..5f24f30 100644
|
||||
--- a/yarn.lock
|
||||
+++ b/yarn.lock
|
||||
@@ -1297,11 +1297,6 @@ angularjs-slider@^6.4.0:
|
||||
resolved "https://registry.yarnpkg.com/angularjs-slider/-/angularjs-slider-6.7.0.tgz#eb2229311b81b79315a36e7b5eb700e128f50319"
|
||||
integrity sha512-Cizsuax65wN2Y+htmA3safE5ALOSCyWcKyWkziaO8vCVymi26bQQs6kKDhkYc8GFix/KE7Oc9gH3QLlTUgD38w==
|
||||
|
||||
-angulartics@^1.6.0:
|
||||
- version "1.6.0"
|
||||
- resolved "https://registry.yarnpkg.com/angulartics/-/angulartics-1.6.0.tgz#a89c17ef8ea2334ebced65d6265951846f848172"
|
||||
- integrity sha512-fywhCi1InawcX+rpLv9NQ32Ed87KoZeH20SUIsRUz9dYJSxuk4/uxiKiopITveGxTC8THYHFEATj9Y/X+BvMqA==
|
||||
-
|
||||
ansi-colors@^3.0.0, ansi-colors@^3.2.1:
|
||||
version "3.2.4"
|
||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
|
Loading…
Reference in new issue