diff --git a/.env.dist b/.env.dist index 370989fb..2fd8118c 100644 --- a/.env.dist +++ b/.env.dist @@ -6,6 +6,8 @@ VUE_APP_PRIMARY_COLOR=#015d99 VUE_APP_SECONDARY_COLOR=#791f5e VUE_APP_ANALYTICS_ID='UA-xxxxxxxxx-y' VUE_APP_RECAPTCHA_ID='' +VUE_APP_SENTRY_DSN=123 + # [authenticator | authy] (Google Authenticator, Authy) VUE_APP_TOTP_APP_RECOMMENDATION=authenticator VUE_ALLOWED_HOSTS=profile.example.org diff --git a/dynamorestart/composer.lock b/dynamorestart/composer.lock index 5f712013..e030fe17 100644 --- a/dynamorestart/composer.lock +++ b/dynamorestart/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "aws/aws-crt-php", - "version": "v1.2.4", + "version": "v1.2.5", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "eb0c6e4e142224a10b08f49ebf87f32611d162b2" + "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/eb0c6e4e142224a10b08f49ebf87f32611d162b2", - "reference": "eb0c6e4e142224a10b08f49ebf87f32611d162b2", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", + "reference": "0ea1f04ec5aa9f049f97e012d1ed63b76834a31b", "shasum": "" }, "require": { @@ -56,9 +56,9 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.4" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.5" }, - "time": "2023-11-08T00:42:13+00:00" + "time": "2024-04-19T21:30:56+00:00" }, { "name": "aws/aws-sdk-php", diff --git a/package-lock.json b/package-lock.json index bc4b5436..50c3b303 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,16 @@ { "name": "idp-profile-ui", + "version": "5.3.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "idp-profile-ui", + "version": "5.3.5", "license": "MIT", "dependencies": { "@babel/polyfill": "^7.12.1", + "@sentry/vue": "^7.113.0", "@simplewebauthn/browser": "^4.1.0", "axios": "^1.6.0", "date-fns": "^2.28.0", @@ -1946,6 +1949,140 @@ "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", "dev": true }, + "node_modules/@sentry-internal/feedback": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.113.0.tgz", + "integrity": "sha512-eEmL8QXauUnM3FXGv0GT29RpL0Jo0pkn/uMu3aqjhQo7JKNqUGVYIUxJxiGWbVMbDXqPQ7L66bjjMS3FR1GM2g==", + "dependencies": { + "@sentry/core": "7.113.0", + "@sentry/types": "7.113.0", + "@sentry/utils": "7.113.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry-internal/replay-canvas": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.113.0.tgz", + "integrity": "sha512-K8uA42aobNF/BAXf14el15iSAi9fonLBUrjZi6nPDq7zaA8rPvfcTL797hwCbqkETz2zDf52Jz7I3WFCshDoUw==", + "dependencies": { + "@sentry/core": "7.113.0", + "@sentry/replay": "7.113.0", + "@sentry/types": "7.113.0", + "@sentry/utils": "7.113.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry-internal/tracing": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.113.0.tgz", + "integrity": "sha512-8MDnYENRMnEfQjvN4gkFYFaaBSiMFSU/6SQZfY9pLI3V105z6JQ4D0PGMAUVowXilwNZVpKNYohE7XByuhEC7Q==", + "dependencies": { + "@sentry/core": "7.113.0", + "@sentry/types": "7.113.0", + "@sentry/utils": "7.113.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.113.0.tgz", + "integrity": "sha512-PdyVHPOprwoxGfKGsP2dXDWO0MBDW1eyP7EZlfZvM1A4hjk6ZRNfCv30g+TrqX4hiZDKzyqN3+AdP7N/J2IX0Q==", + "dependencies": { + "@sentry-internal/feedback": "7.113.0", + "@sentry-internal/replay-canvas": "7.113.0", + "@sentry-internal/tracing": "7.113.0", + "@sentry/core": "7.113.0", + "@sentry/integrations": "7.113.0", + "@sentry/replay": "7.113.0", + "@sentry/types": "7.113.0", + "@sentry/utils": "7.113.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.113.0.tgz", + "integrity": "sha512-pg75y3C5PG2+ur27A0Re37YTCEnX0liiEU7EOxWDGutH17x3ySwlYqLQmZsFZTSnvzv7t3MGsNZ8nT5O0746YA==", + "dependencies": { + "@sentry/types": "7.113.0", + "@sentry/utils": "7.113.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/integrations": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.113.0.tgz", + "integrity": "sha512-w0sspGBQ+6+V/9bgCkpuM3CGwTYoQEVeTW6iNebFKbtN7MrM3XsGAM9I2cW1jVxFZROqCBPFtd2cs5n0j14aAg==", + "dependencies": { + "@sentry/core": "7.113.0", + "@sentry/types": "7.113.0", + "@sentry/utils": "7.113.0", + "localforage": "^1.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/replay": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.113.0.tgz", + "integrity": "sha512-UD2IaphOWKFdeGR+ZiaNAQ+wFsnwbJK6PNwcW6cHmWKv9COlKufpFt06lviaqFZ8jmNrM4H+r+R8YVTrqCuxgg==", + "dependencies": { + "@sentry-internal/tracing": "7.113.0", + "@sentry/core": "7.113.0", + "@sentry/types": "7.113.0", + "@sentry/utils": "7.113.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry/types": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.113.0.tgz", + "integrity": "sha512-PJbTbvkcPu/LuRwwXB1He8m+GjDDLKBtu3lWg5xOZaF5IRdXQU2xwtdXXsjge4PZR00tF7MO7X8ZynTgWbYaew==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.113.0.tgz", + "integrity": "sha512-nzKsErwmze1mmEsbW2AwL2oB+I5v6cDEJY4sdfLekA4qZbYZ8pV5iWza6IRl4XfzGTE1qpkZmEjPU9eyo0yvYw==", + "dependencies": { + "@sentry/types": "7.113.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/vue": { + "version": "7.113.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.113.0.tgz", + "integrity": "sha512-lPe1xuEO5dFOY4bXhiPGykCI51GkouIyJrHe1LFOFJpVt6aAM3YIt5bhOyIDBIRMDi13rUBEC3jbzVdrWyswTw==", + "dependencies": { + "@sentry/browser": "7.113.0", + "@sentry/core": "7.113.0", + "@sentry/types": "7.113.0", + "@sentry/utils": "7.113.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "vue": "2.x || 3.x" + } + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -6268,6 +6405,11 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, "node_modules/immutable": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", @@ -6702,6 +6844,14 @@ "launch-editor": "^2.6.1" } }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", @@ -6751,6 +6901,14 @@ "json5": "lib/cli.js" } }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", diff --git a/package.json b/package.json index 7b59e419..4e9671e2 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "idp-profile-ui", + "version": "5.3.5", "engines": { "node": ">=18.0.0 <19.0.0" }, @@ -15,6 +16,7 @@ }, "dependencies": { "@babel/polyfill": "^7.12.1", + "@sentry/vue": "^7.113.0", "@simplewebauthn/browser": "^4.1.0", "axios": "^1.6.0", "date-fns": "^2.28.0", diff --git a/src/locales/en.json b/src/locales/en.json index 49583fb5..40b30c2d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -126,7 +126,7 @@ "progress": { "header": "Profile strength", "addMethod": "Add a recovery method", - "addTotp": "Add a authenticator app (2SV)", + "addTotp": "Add an authenticator app (2SV)", "addSecurityKey": "Add a security key (2SV)", "addCodes": "Add some backup codes (2SV)" } diff --git a/src/main.js b/src/main.js index f11290b4..b52be779 100644 --- a/src/main.js +++ b/src/main.js @@ -1,18 +1,43 @@ -import '@babel/polyfill' -import Vue from 'vue' -import { configuredRouter, configuredVuetify } from './plugins' import App from './App.vue' +import '@babel/polyfill' import '@/global/components' import '@/global/filters' +import { configuredRouter as router, configuredVuetify } from './plugins' +import * as Sentry from '@sentry/vue' +import Vue from 'vue' + +const environment = process.env.NODE_ENV || 'development' +const dsn = process.env.VUE_APP_SENTRY_DSN +const release = process.env.VUE_APP_VERSION + +console.debug('Environment:', environment, 'Release:', release, 'DSN:', dsn) +Sentry.init({ + Vue, + dsn, + integrations: [Sentry.browserTracingIntegration({ router }), Sentry.replayIntegration()], + environment, + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production + tracesSampleRate: 1.0, + + // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled + // tracePropagationTargets: ['localhost', /^https:\/\/yourserver\.io\/api/], + + // Capture Replay for 10% of all sessions, + // plus for 100% of sessions with an error + replaysSessionSampleRate: 0.1, + replaysOnErrorSampleRate: 1.0, +}) new Vue({ data: { - idpConfig: {} + idpConfig: {}, }, async created() { this.idpConfig = await this.$API.get('config') }, vuetify: configuredVuetify, - router: configuredRouter, - render: h => h(App), + router, + render: (h) => h(App), }).$mount('#app') diff --git a/src/profile/ProfileWizard.vue b/src/profile/ProfileWizard.vue index 83adbc58..0bfaf299 100644 --- a/src/profile/ProfileWizard.vue +++ b/src/profile/ProfileWizard.vue @@ -2,11 +2,13 @@