From 00cda9ace853fc81b6d5f3fb99efabbd825f63cb Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Wed, 22 Sep 2021 11:34:16 +0200 Subject: [PATCH 01/64] Create codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 71 +++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 000000000..1ebfe4970 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,71 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ main ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ main ] + schedule: + - cron: '35 9 * * 3' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'go', 'javascript', 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] + # Learn more: + # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From 698035849d5a7af779ecfd4ab5da161773fa47d3 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Wed, 22 Sep 2021 11:34:33 +0200 Subject: [PATCH 02/64] Delete codeql-analysis.yml --- codeql-analysis.yml | 71 --------------------------------------------- 1 file changed, 71 deletions(-) delete mode 100644 codeql-analysis.yml diff --git a/codeql-analysis.yml b/codeql-analysis.yml deleted file mode 100644 index a79a63767..000000000 --- a/codeql-analysis.yml +++ /dev/null @@ -1,71 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ dev ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ dev ] - schedule: - - cron: '30 23 * * 6' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'go', 'javascript', 'python' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] - # Learn more: - # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 From 514c8bf2dd86b5262a371e1df32b45131910e078 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Wed, 22 Sep 2021 11:43:36 +0200 Subject: [PATCH 03/64] Update codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 1ebfe4970..e3c546c26 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -18,7 +18,7 @@ on: # The branches below must be a subset of the branches above branches: [ main ] schedule: - - cron: '35 9 * * 3' + - cron: '30 6 * * 3' jobs: analyze: From 7fc90ed4a6aa0faabab32090ae2f8ac5a3b53343 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Fri, 24 Sep 2021 09:37:46 +0200 Subject: [PATCH 04/64] Enabling cache by default --- scripts/helm/app/http.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/helm/app/http.yaml b/scripts/helm/app/http.yaml index 5a9ae09ac..b34105a6c 100644 --- a/scripts/helm/app/http.yaml +++ b/scripts/helm/app/http.yaml @@ -29,7 +29,7 @@ env: AWS_SECRET_ACCESS_KEY: "m1n10s3CretK3yPassw0rd" AWS_REGION: us-east-1 POSTGRES_STRING: postgres://postgres:asayerPostgres@postgresql.db.svc.cluster.local:5432 - CACHE_ASSETS: false + CACHE_ASSETS: true # REDIS_STRING: redis-master.db.svc.cluster.local:6379 KAFKA_SERVERS: kafka.db.svc.cluster.local:9092 From fd4a82f561e00c5cc4e9d2382b1bf7d47352b269 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 24 Sep 2021 11:41:48 +0200 Subject: [PATCH 05/64] feat(db): fixed creation/migration queries --- ee/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql | 10 ++++++++++ ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql | 3 +++ scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql | 6 ++---- scripts/helm/db/init_dbs/postgresql/init_schema.sql | 7 +++---- 4 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 ee/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql diff --git a/ee/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql b/ee/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql new file mode 100644 index 000000000..dbba18860 --- /dev/null +++ b/ee/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql @@ -0,0 +1,10 @@ +BEGIN; +CREATE INDEX projects_tenant_id_idx ON projects (tenant_id); +CREATE INDEX webhooks_tenant_id_idx ON webhooks (tenant_id); + +CREATE INDEX pages_session_id_timestamp_idx ON events.pages (session_id, timestamp); + +CREATE INDEX issues_project_id_idx ON issues (project_id); +CREATE INDEX jobs_project_id_idx ON jobs (project_id); + +COMMIT; \ No newline at end of file diff --git a/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql b/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql index 03801fb3d..a47779a3b 100644 --- a/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql +++ b/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql @@ -182,6 +182,7 @@ CREATE TABLE projects ); CREATE INDEX ON public.projects (project_key); +CREATE INDEX projects_tenant_id_idx ON projects (tenant_id); CREATE OR REPLACE FUNCTION notify_project() RETURNS trigger AS $$ @@ -266,6 +267,8 @@ create table webhooks name varchar(100) ); +CREATE INDEX webhooks_tenant_id_idx ON webhooks (tenant_id); + -- --- notifications.sql --- diff --git a/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql b/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql index 5b5a8b3de..30363dbb2 100644 --- a/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql +++ b/scripts/helm/db/init_dbs/postgresql/1.3.5/1.3.5.sql @@ -1,10 +1,8 @@ BEGIN; CREATE INDEX pages_session_id_timestamp_idx ON events.pages (session_id, timestamp); -CREATE INDEX projects_tenant_id_idx ON projects(tenant_id); -CREATE INDEX webhooks_tenant_id_idx ON webhooks(tenant_id); -CREATE INDEX issues_project_id_idx ON issues(project_id); -CREATE INDEX jobs_project_id_idx ON jobs(project_id); +CREATE INDEX issues_project_id_idx ON issues (project_id); +CREATE INDEX jobs_project_id_idx ON jobs (project_id); COMMIT; \ No newline at end of file diff --git a/scripts/helm/db/init_dbs/postgresql/init_schema.sql b/scripts/helm/db/init_dbs/postgresql/init_schema.sql index 65811f7ba..06cd47dd7 100644 --- a/scripts/helm/db/init_dbs/postgresql/init_schema.sql +++ b/scripts/helm/db/init_dbs/postgresql/init_schema.sql @@ -172,7 +172,7 @@ CREATE TABLE projects "defaultInputMode": "plain" }'::jsonb -- ?????? ); -CREATE INDEX projects_tenant_id_idx ON projects(tenant_id); +CREATE INDEX ON public.projects (project_key); CREATE OR REPLACE FUNCTION notify_project() RETURNS trigger AS $$ @@ -248,7 +248,6 @@ create table webhooks index integer default 0 not null, name varchar(100) ); -CREATE INDEX webhooks_tenant_id_idx ON webhooks(tenant_id); -- --- notifications.sql --- @@ -388,7 +387,7 @@ CREATE TABLE issues ); CREATE INDEX ON issues (issue_id, type); CREATE INDEX issues_context_string_gin_idx ON public.issues USING GIN (context_string gin_trgm_ops); -CREATE INDEX issues_project_id_idx ON issues(project_id); +CREATE INDEX issues_project_id_idx ON issues (project_id); -- --- errors.sql --- @@ -872,6 +871,6 @@ CREATE TABLE jobs ); CREATE INDEX ON jobs (status); CREATE INDEX ON jobs (start_at); -CREATE INDEX jobs_project_id_idx ON jobs(project_id); +CREATE INDEX jobs_project_id_idx ON jobs (project_id); COMMIT; From 8892b2f79cf69c7e40df99389224caf301199ea1 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 24 Sep 2021 14:08:47 +0200 Subject: [PATCH 06/64] feat(api): changed version number --- api/.chalice/config.bundle.json | 2 +- api/.chalice/config.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/.chalice/config.bundle.json b/api/.chalice/config.bundle.json index 32370e574..95b29ab50 100644 --- a/api/.chalice/config.bundle.json +++ b/api/.chalice/config.bundle.json @@ -54,7 +54,7 @@ "S3_SECRET": "", "invitation_link": "/api/users/invitation?token=%s", "change_password_link": "/reset-password?invitation=%s&&pass=%s", - "version_number": "1.2.0" + "version_number": "1.3.5" }, "lambda_timeout": 150, "lambda_memory_size": 400, diff --git a/api/.chalice/config.json b/api/.chalice/config.json index b6f821e3a..79199456c 100644 --- a/api/.chalice/config.json +++ b/api/.chalice/config.json @@ -54,7 +54,7 @@ "S3_SECRET": "", "invitation_link": "/api/users/invitation?token=%s", "change_password_link": "/reset-password?invitation=%s&&pass=%s", - "version_number": "1.2.0" + "version_number": "1.3.5" }, "lambda_timeout": 150, "lambda_memory_size": 400, From cdaed55a91c2c65f1bfbe1a2fe32bc3b3bd96551 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 24 Sep 2021 13:00:10 +0530 Subject: [PATCH 07/64] change(ui) - version number --- frontend/env.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/env.js b/frontend/env.js index 20b435e21..69731dc47 100644 --- a/frontend/env.js +++ b/frontend/env.js @@ -13,14 +13,14 @@ const oss = { ORIGIN: () => 'window.location.origin', API_EDP: () => 'window.location.origin + "/api"', ASSETS_HOST: () => 'window.location.origin + "/assets"', - VERSION: '1.3.0', + VERSION: '1.3.5', SOURCEMAP: true, MINIO_ENDPOINT: process.env.MINIO_ENDPOINT, MINIO_PORT: process.env.MINIO_PORT, MINIO_USE_SSL: process.env.MINIO_USE_SSL, MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY, MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY, - TRACKER_VERSION: '3.2.0', // trackerInfo.version, + TRACKER_VERSION: '3.4.0', // trackerInfo.version, } module.exports = { From f283f1e0bcc0b75db69e9066f3c57d2dc33db5f4 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 24 Sep 2021 19:32:01 +0530 Subject: [PATCH 08/64] change(ui) - versions --- scripts/helm/app/chalice.yaml | 2 +- scripts/helm/vars.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/helm/app/chalice.yaml b/scripts/helm/app/chalice.yaml index 4ef1eecc7..f213af556 100644 --- a/scripts/helm/app/chalice.yaml +++ b/scripts/helm/app/chalice.yaml @@ -57,7 +57,7 @@ env: # Enable logging for python app # Ref: https://stackoverflow.com/questions/43969743/logs-in-kubernetes-pod-not-showing-up PYTHONUNBUFFERED: '0' - version_number: '1.3.0' + version_number: '1.3.5' SAML2_MD_URL: '' idp_entityId: '' idp_sso_url: '' diff --git a/scripts/helm/vars.yaml b/scripts/helm/vars.yaml index 710fbd496..23fcf8035 100644 --- a/scripts/helm/vars.yaml +++ b/scripts/helm/vars.yaml @@ -24,8 +24,8 @@ domain_name: "" docker_registry_username: "" docker_registry_password: "" docker_registry_url: "rg.fr-par.scw.cloud/foss" -image_tag: "v1.3.0" -openreplay_version: "v1.3.0" +image_tag: "v1.3.5" +openreplay_version: "v1.3.5" # Nginx ssl certificates. # in cert format From 46d56ecb3c46f9e32890ec146d05614c8a1fef5e Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 24 Sep 2021 20:13:28 +0530 Subject: [PATCH 09/64] change(ui) - assist version in docs --- .../components/Client/Integrations/AssistDoc/AssistScript.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/app/components/Client/Integrations/AssistDoc/AssistScript.tsx b/frontend/app/components/Client/Integrations/AssistDoc/AssistScript.tsx index 932926a1a..3215df3d2 100644 --- a/frontend/app/components/Client/Integrations/AssistDoc/AssistScript.tsx +++ b/frontend/app/components/Client/Integrations/AssistDoc/AssistScript.tsx @@ -23,7 +23,7 @@ function AssistScript(props) { r.issue=function(k,p){r.push([6,k,p])}; r.isActive=function(){return false}; r.getSessionToken=function(){}; -})(0, "${props.projectKey}", "//static.openreplay.com/3.3.1/openreplay-assist.js",1,28); +})(0, "${props.projectKey}", "//static.openreplay.com/3.4.0/openreplay-assist.js",1,28); `} From 1dd8485365524ad61a51a443889d81c741f45bec Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 24 Sep 2021 17:13:47 +0200 Subject: [PATCH 10/64] changed version number in yaml --- scripts/helm/app/chalice.yaml | 2 +- scripts/helm/vars.yaml | 4 ++-- scripts/helm/vars_template.yaml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/helm/app/chalice.yaml b/scripts/helm/app/chalice.yaml index 4ef1eecc7..f213af556 100644 --- a/scripts/helm/app/chalice.yaml +++ b/scripts/helm/app/chalice.yaml @@ -57,7 +57,7 @@ env: # Enable logging for python app # Ref: https://stackoverflow.com/questions/43969743/logs-in-kubernetes-pod-not-showing-up PYTHONUNBUFFERED: '0' - version_number: '1.3.0' + version_number: '1.3.5' SAML2_MD_URL: '' idp_entityId: '' idp_sso_url: '' diff --git a/scripts/helm/vars.yaml b/scripts/helm/vars.yaml index 710fbd496..23fcf8035 100644 --- a/scripts/helm/vars.yaml +++ b/scripts/helm/vars.yaml @@ -24,8 +24,8 @@ domain_name: "" docker_registry_username: "" docker_registry_password: "" docker_registry_url: "rg.fr-par.scw.cloud/foss" -image_tag: "v1.3.0" -openreplay_version: "v1.3.0" +image_tag: "v1.3.5" +openreplay_version: "v1.3.5" # Nginx ssl certificates. # in cert format diff --git a/scripts/helm/vars_template.yaml b/scripts/helm/vars_template.yaml index 6d92b8a66..6b8fa167d 100644 --- a/scripts/helm/vars_template.yaml +++ b/scripts/helm/vars_template.yaml @@ -24,8 +24,8 @@ domain_name: "{{ domain_name }}" docker_registry_username: "{{ docker_registry_username }}" docker_registry_password: "{{ docker_registry_password }}" docker_registry_url: "{{ docker_registry_url }}" -image_tag: "v1.3.0" -openreplay_version: "v1.3.0" +image_tag: "v1.3.5" +openreplay_version: "v1.3.5" # Nginx ssl certificates. # in cert format From 3298230c3a04fe537794bf396bdaf695c81301c6 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Tue, 28 Sep 2021 15:36:53 +0200 Subject: [PATCH 11/64] Updated client_max_body_size directive --- .../helm/nginx-ingress/nginx-ingress/templates/configmap.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/helm/nginx-ingress/nginx-ingress/templates/configmap.yaml b/scripts/helm/nginx-ingress/nginx-ingress/templates/configmap.yaml index 84cc6337d..47fb2043a 100644 --- a/scripts/helm/nginx-ingress/nginx-ingress/templates/configmap.yaml +++ b/scripts/helm/nginx-ingress/nginx-ingress/templates/configmap.yaml @@ -20,8 +20,6 @@ data: proxy_set_header Connection ""; chunked_transfer_encoding off; - client_max_body_size 50M; - proxy_pass http://minio.db.svc.cluster.local:9000; } @@ -134,6 +132,7 @@ data: # server_name _; # return 301 https://$host$request_uri; include /etc/nginx/conf.d/location.list; + client_max_body_size 50M; } server { listen 443 ssl; @@ -142,4 +141,5 @@ data: ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"; include /etc/nginx/conf.d/location.list; + client_max_body_size 50M; } From a8cd5f06e32e5678fe4000f92cd9b6d24b59fbc4 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Tue, 28 Sep 2021 20:32:14 +0200 Subject: [PATCH 12/64] Added proxy_*_timeouts for /ingest --- .../nginx-ingress/nginx-ingress/templates/configmap.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/helm/nginx-ingress/nginx-ingress/templates/configmap.yaml b/scripts/helm/nginx-ingress/nginx-ingress/templates/configmap.yaml index 47fb2043a..2e4e993c8 100644 --- a/scripts/helm/nginx-ingress/nginx-ingress/templates/configmap.yaml +++ b/scripts/helm/nginx-ingress/nginx-ingress/templates/configmap.yaml @@ -40,6 +40,9 @@ data: proxy_set_header X-Real-IP $real_ip; proxy_set_header Host $host; proxy_pass http://http-openreplay.app.svc.cluster.local; + proxy_read_timeout 300; + proxy_connect_timeout 120; + proxy_send_timeout 300; } location /grafana { set $target http://monitoring-grafana.monitoring.svc.cluster.local; @@ -132,7 +135,7 @@ data: # server_name _; # return 301 https://$host$request_uri; include /etc/nginx/conf.d/location.list; - client_max_body_size 50M; + client_max_body_size 10M; } server { listen 443 ssl; @@ -141,5 +144,5 @@ data: ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA HIGH !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"; include /etc/nginx/conf.d/location.list; - client_max_body_size 50M; + client_max_body_size 10M; } From a4f45fa0021e55e8a92182f394a275d33433a638 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Thu, 30 Sep 2021 19:48:06 +0200 Subject: [PATCH 13/64] feat(api): reset password keep same token for 5min for double request --- api/chalicelib/blueprints/bp_core_dynamic.py | 6 +++++- api/chalicelib/core/users.py | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/api/chalicelib/blueprints/bp_core_dynamic.py b/api/chalicelib/blueprints/bp_core_dynamic.py index af674f762..b695ab54a 100644 --- a/api/chalicelib/blueprints/bp_core_dynamic.py +++ b/api/chalicelib/blueprints/bp_core_dynamic.py @@ -360,7 +360,11 @@ def process_invitation_link(): return {"errors": ["invitation not found"]} if user["expiredInvitation"]: return {"errors": ["expired invitation, please ask your admin to send a new one"]} - pass_token = users.allow_password_change(user_id=user["userId"]) + if user["expiredChange"] is not None and not user["expiredChange"] \ + and user["changePwdToken"] is not None and user["changePwdAge"] < -5 * 60: + pass_token = user["changePwdToken"] + else: + pass_token = users.allow_password_change(user_id=user["userId"]) return Response( status_code=307, body='', diff --git a/api/chalicelib/core/users.py b/api/chalicelib/core/users.py index 917328910..c001ea5e2 100644 --- a/api/chalicelib/core/users.py +++ b/api/chalicelib/core/users.py @@ -526,7 +526,8 @@ def get_by_invitation_token(token, pass_token=None): *, DATE_PART('day',timezone('utc'::text, now()) \ - COALESCE(basic_authentication.invited_at,'2000-01-01'::timestamp ))>=1 AS expired_invitation, - change_pwd_expire_at <= timezone('utc'::text, now()) AS expired_change + change_pwd_expire_at <= timezone('utc'::text, now()) AS expired_change, + (EXTRACT(EPOCH FROM current_timestamp-basic_authentication.change_pwd_expire_at))::BIGINT AS change_pwd_age FROM public.users INNER JOIN public.basic_authentication USING(user_id) WHERE invitation_token = %(token)s {"AND change_pwd_token = %(pass_token)s" if pass_token else ""} LIMIT 1;""", From 3132776f4ef528eb953e97739ec6225da14543e7 Mon Sep 17 00:00:00 2001 From: ShiKhu Date: Thu, 30 Sep 2021 20:39:16 +0200 Subject: [PATCH 14/64] fix(backend-http): resolve url if not cachable --- backend/pkg/url/assets/url.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/pkg/url/assets/url.go b/backend/pkg/url/assets/url.go index cc12b583b..09304db5c 100644 --- a/backend/pkg/url/assets/url.go +++ b/backend/pkg/url/assets/url.go @@ -48,11 +48,11 @@ func isCachable(rawurl string) bool { func GetFullCachableURL(baseURL string, relativeURL string) (string, bool) { if !isRelativeCachable(relativeURL) { - return "", false + return relativeURL, false } fullURL := ResolveURL(baseURL, relativeURL) if !isCachable(fullURL) { - return "", false + return fullURL, false } return fullURL, true } @@ -77,7 +77,7 @@ func GetCachePathForAssets(sessionID uint64, rawurl string) string { func (r *Rewriter) RewriteURL(sessionID uint64, baseURL string, relativeURL string) string { fullURL, cachable := GetFullCachableURL(baseURL, relativeURL) if !cachable { - return relativeURL + return fullURL } u := url.URL{ From f83dc3336cd4ea63e3120f1ecbd383597c1f4bd6 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 29 Sep 2021 19:22:25 +0530 Subject: [PATCH 15/64] fix(ui) - network tab click --- frontend/app/components/Session_/Network/Network.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/app/components/Session_/Network/Network.js b/frontend/app/components/Session_/Network/Network.js index 4c30e6f32..31b17e477 100644 --- a/frontend/app/components/Session_/Network/Network.js +++ b/frontend/app/components/Session_/Network/Network.js @@ -1,5 +1,5 @@ import cn from 'classnames'; -import { connectPlayer } from 'Player'; +import { connectPlayer, jump } from 'Player'; import { QuestionMarkHint, Popup, Tabs, Input } from 'UI'; import { getRE } from 'App/utils'; import { TYPES } from 'Types/session/resource'; @@ -200,6 +200,7 @@ export default class Network extends React.PureComponent { fetchPresented = { fetchPresented } resourcesSize={resourcesSize} transferredSize={transferredSize} + onRowClick={ (e, index) => { jump(e.time); } } /> {/* From 5be65a8a33307d1f2757c7b0306f295481a59263 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Thu, 30 Sep 2021 15:15:39 +0530 Subject: [PATCH 16/64] change(ui) - network tab row click highlight --- .../app/components/Session_/Network/Network.js | 18 ++++++++++++++---- .../Session_/Network/NetworkContent.js | 5 +++-- .../shared/Results/NetworkTab/NetworkTab.js | 2 +- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/frontend/app/components/Session_/Network/Network.js b/frontend/app/components/Session_/Network/Network.js index 31b17e477..897e77752 100644 --- a/frontend/app/components/Session_/Network/Network.js +++ b/frontend/app/components/Session_/Network/Network.js @@ -1,5 +1,5 @@ import cn from 'classnames'; -import { connectPlayer, jump } from 'Player'; +import { connectPlayer, jump, pause } from 'Player'; import { QuestionMarkHint, Popup, Tabs, Input } from 'UI'; import { getRE } from 'App/utils'; import { TYPES } from 'Types/session/resource'; @@ -131,6 +131,7 @@ export function renderDuration(r) { domContentLoadedTime: state.domContentLoadedTime, loadTime: state.loadTime, time: state.time, + playing: state.playing, domBuildingTime: state.domBuildingTime, fetchPresented: state.fetchList.length > 0, })) @@ -138,6 +139,13 @@ export default class Network extends React.PureComponent { state = { filter: '', activeTab: ALL, + currentIndex: 0 + } + + onRowClick = (e, index) => { + pause(); + jump(e.time); + this.setState({ currentIndex: index }) } onTabClick = activeTab => this.setState({ activeTab }) @@ -151,9 +159,10 @@ export default class Network extends React.PureComponent { loadTime, domBuildingTime, fetchPresented, - time + time, + playing } = this.props; - const { filter, activeTab } = this.state; + const { filter, activeTab, currentIndex } = this.state; const filterRE = getRE(filter, 'i'); let filtered = resources.filter(({ type, name }) => filterRE.test(name) && (activeTab === ALL || type === TAB_TO_TYPE_MAP[ activeTab ])); @@ -200,7 +209,8 @@ export default class Network extends React.PureComponent { fetchPresented = { fetchPresented } resourcesSize={resourcesSize} transferredSize={transferredSize} - onRowClick={ (e, index) => { jump(e.time); } } + onRowClick={ this.onRowClick } + currentIndex={playing ? null : currentIndex} /> {/* diff --git a/frontend/app/components/Session_/Network/NetworkContent.js b/frontend/app/components/Session_/Network/NetworkContent.js index 7eeebf538..e4988d3e4 100644 --- a/frontend/app/components/Session_/Network/NetworkContent.js +++ b/frontend/app/components/Session_/Network/NetworkContent.js @@ -157,13 +157,14 @@ export default class NetworkContent extends React.PureComponent { additionalHeight = 0, resourcesSize, transferredSize, - time + time, + currentIndex } = this.props; const { filter, activeTab } = this.state; const filterRE = getRE(filter, 'i'); let filtered = resources.filter(({ type, name }) => filterRE.test(name) && (activeTab === ALL || type === TAB_TO_TYPE_MAP[ activeTab ])); - const lastIndex = filtered.filter(item => item.time <= time).length - 1; + const lastIndex = currentIndex || filtered.filter(item => item.time <= time).length - 1; const referenceLines = []; if (domContentLoadedTime != null) { diff --git a/frontend/app/components/shared/Results/NetworkTab/NetworkTab.js b/frontend/app/components/shared/Results/NetworkTab/NetworkTab.js index fe2ea0ac3..8a85007fb 100644 --- a/frontend/app/components/shared/Results/NetworkTab/NetworkTab.js +++ b/frontend/app/components/shared/Results/NetworkTab/NetworkTab.js @@ -80,12 +80,12 @@ function NetworkTab(props) { onRowClick={ (e, index) => { setCurrent(e); setCurrentIndex(index)} } additionalHeight={vh} fetchPresented = { run.fetchPresented } - loadTime = { run.loadTime } domBuildingTime = { run.domBuildingTime } resourcesSize = { run.resourcesSize } transferredSize = { run.transferredSize } domContentLoadedTime = { run.domContentLoadedTime } + currentIndex={currentIndex} /> ) From ed2d3731b29173134d55e27c71a41d5888b27ed2 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 29 Sep 2021 18:25:38 +0530 Subject: [PATCH 17/64] fix(ui) - typo --- frontend/app/components/Client/ManageUsers/ManageUsers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/app/components/Client/ManageUsers/ManageUsers.js b/frontend/app/components/Client/ManageUsers/ManageUsers.js index 0d49d5319..85e1a308f 100644 --- a/frontend/app/components/Client/ManageUsers/ManageUsers.js +++ b/frontend/app/components/Client/ManageUsers/ManageUsers.js @@ -170,7 +170,7 @@ class ManageUsers extends React.PureComponent { Date: Fri, 1 Oct 2021 13:34:40 +0530 Subject: [PATCH 18/64] change(ui) - assist userId null check --- .../Assist/components/AssistActions/AssistActions.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/app/components/Assist/components/AssistActions/AssistActions.tsx b/frontend/app/components/Assist/components/AssistActions/AssistActions.tsx index 1c5af3090..3705b13e0 100644 --- a/frontend/app/components/Assist/components/AssistActions/AssistActions.tsx +++ b/frontend/app/components/Assist/components/AssistActions/AssistActions.tsx @@ -90,7 +90,7 @@ function AssistActions({ toggleChatWindow, userId, calling, peerConnectionStatus { inCall ? 'End Call' : 'Call' } } - content={ `Call ${userId}` } + content={ `Call ${userId ? userId : 'User'}` } size="tiny" inverted position="top right" From de30157467165011ebc66736c100943917544fd3 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 1 Oct 2021 19:02:02 +0530 Subject: [PATCH 19/64] change(ui) - fetch headers, and heatmaps scroll --- .../components/Session_/Fetch/FetchDetails.js | 128 +++++++++--------- .../Fetch/components/Headers/Headers.tsx | 50 +++++++ .../Fetch/components/Headers/headers.css | 8 ++ .../Fetch/components/Headers/index.ts | 1 + .../SelectorsList/SelectorsList.tsx | 9 +- .../components/SelectorsList/selectorList.css | 28 ++++ 6 files changed, 160 insertions(+), 64 deletions(-) create mode 100644 frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx create mode 100644 frontend/app/components/Session_/Fetch/components/Headers/headers.css create mode 100644 frontend/app/components/Session_/Fetch/components/Headers/index.ts create mode 100644 frontend/app/components/Session_/PageInsightsPanel/components/SelectorsList/selectorList.css diff --git a/frontend/app/components/Session_/Fetch/FetchDetails.js b/frontend/app/components/Session_/Fetch/FetchDetails.js index 666406b9f..79834d4a4 100644 --- a/frontend/app/components/Session_/Fetch/FetchDetails.js +++ b/frontend/app/components/Session_/Fetch/FetchDetails.js @@ -1,14 +1,14 @@ -import { JSONTree, Label, Button, Tabs } from 'UI' +import { JSONTree, NoContent, Button, Tabs } from 'UI' import cn from 'classnames'; import copy from 'copy-to-clipboard'; import stl from './fetchDetails.css'; -import ResultTimings from '../../shared/ResultTimings/ResultTimings'; +import Headers from './components/Headers' +const HEADERS = 'HEADERS'; const REQUEST = 'REQUEST'; const RESPONSE = 'RESPONSE'; -const TIMINGS = 'TIMINGS'; -const TABS = [ REQUEST, RESPONSE, TIMINGS ].map(tab => ({ text: tab, key: tab })); +const TABS = [ HEADERS, REQUEST, RESPONSE ].map(tab => ({ text: tab, key: tab })); export default class FetchDetails extends React.PureComponent { state = { activeTab: REQUEST, tabs: [] }; @@ -20,53 +20,62 @@ export default class FetchDetails extends React.PureComponent { } renderActiveTab = tab => { - const { resource: { duration, timings }, isResult } = this.props; + const { resource: { payload, response = this.props.resource.body} } = this.props; + let jsonPayload, jsonResponse, requestHeaders, responseHeaders = undefined; + + try { + jsonPayload = typeof payload === 'string' ? JSON.parse(payload) : payload + requestHeaders = jsonPayload.headers + delete jsonPayload.headers + } catch (e) {} + + try { + jsonResponse = typeof response === 'string' ? JSON.parse(response) : response; + responseHeaders = jsonResponse.headers + delete jsonResponse.headers + } catch (e) {} + switch(tab) { case REQUEST: - const { resource: { payload } } = this.props; - let jsonPayload = undefined; - try { - jsonPayload = typeof payload === 'string' ? JSON.parse(payload) : payload - } catch (e) {} - - return !!payload ? ( -
-
- {/*
{ 'Payload '}
*/} - { jsonPayload === undefined - ?
{ payload }
- : - } -
-
-
- ) : '' - break; + return ( + +
+
+ { jsonPayload === undefined + ?
{ payload }
+ : + } +
+
+
+ + ) case RESPONSE: - const { resource: { response = this.props.resource.body } } = this.props; // for IOS compat. - let jsonResponse = undefined; - try { - jsonResponse = JSON.parse(response); - } catch (e) {} - - return !!response ? ( -
-
- {/*
{ 'Response '}
*/} - { jsonResponse === undefined - ?
{ response }
- : - } -
-
-
- // jsonResponse === undefined - // ?
{ response }
- // : - ) : '' - break; - case TIMINGS: - return + return ( + +
+
+ { jsonResponse === undefined + ?
{ response }
+ : + } +
+
+
+ + ) + case HEADERS: + return } } @@ -78,21 +87,18 @@ export default class FetchDetails extends React.PureComponent { checkTabs() { const { resource: { payload, response, body }, isResult } = this.props; - const _tabs = TABS.filter(t => { - if (t.key == REQUEST && !!payload) { - return true - } + const _tabs = TABS + // const _tabs = TABS.filter(t => { + // if (t.key == REQUEST && !!payload) { + // return true + // } - if (t.key == RESPONSE && !!response) { - return true; - } + // if (t.key == RESPONSE && !!response) { + // return true; + // } - if (t.key == TIMINGS && isResult) { - return true; - } - - return false; - }) + // return false; + // }) this.setState({ tabs: _tabs, activeTab: _tabs.length > 0 ? _tabs[0].key : null }) } diff --git a/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx b/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx new file mode 100644 index 000000000..b54bb1de6 --- /dev/null +++ b/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx @@ -0,0 +1,50 @@ +import React from 'react' +import { NoContent } from 'UI' +import stl from './headers.css' + +function Headers(props) { + console.log('props', props); + return ( +
+ + { props.requestHeaders && ( + <> +
+
Request Headers
+ { + Object.keys(props.requestHeaders).map(h => ( +
+
{h}:
+
{props.requestHeaders[h]}
+
+ )) + } +
+
+ + )} + + { props.responseHeaders && ( +
+
Response Headers
+ { + Object.keys(props.responseHeaders).map(h => ( +
+
{h}:
+
{props.responseHeaders[h]}
+
+ )) + } +
+ )} +
+
+ ); +} + +export default Headers; \ No newline at end of file diff --git a/frontend/app/components/Session_/Fetch/components/Headers/headers.css b/frontend/app/components/Session_/Fetch/components/Headers/headers.css new file mode 100644 index 000000000..fbfae3ab0 --- /dev/null +++ b/frontend/app/components/Session_/Fetch/components/Headers/headers.css @@ -0,0 +1,8 @@ +.row { + display: flex; + padding: 5px 0px; + padding-left: 20px; + &:hover { + background-color: $active-blue; + } +} \ No newline at end of file diff --git a/frontend/app/components/Session_/Fetch/components/Headers/index.ts b/frontend/app/components/Session_/Fetch/components/Headers/index.ts new file mode 100644 index 000000000..69b6be26c --- /dev/null +++ b/frontend/app/components/Session_/Fetch/components/Headers/index.ts @@ -0,0 +1 @@ +export { default } from './Headers' \ No newline at end of file diff --git a/frontend/app/components/Session_/PageInsightsPanel/components/SelectorsList/SelectorsList.tsx b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorsList/SelectorsList.tsx index bc435b26b..8f19bfad8 100644 --- a/frontend/app/components/Session_/PageInsightsPanel/components/SelectorsList/SelectorsList.tsx +++ b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorsList/SelectorsList.tsx @@ -3,6 +3,7 @@ import { NoContent } from 'UI' import { connectPlayer } from 'Player/store'; import SelectorCard from '../SelectorCard/SelectorCard'; import type { MarkedTarget } from 'Player/MessageDistributor/StatedScreen/StatedScreen'; +import stl from './selectorList.css' interface Props { targets: Array, @@ -16,9 +17,11 @@ function SelectorsList({ targets, activeTargetIndex }: Props) { size="small" show={ targets && targets.length === 0 } > - { targets && targets.map((target, index) => ( - - ))} +
+ { targets && targets.map((target, index) => ( + + ))} +
) } diff --git a/frontend/app/components/Session_/PageInsightsPanel/components/SelectorsList/selectorList.css b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorsList/selectorList.css new file mode 100644 index 000000000..dc90ac4e1 --- /dev/null +++ b/frontend/app/components/Session_/PageInsightsPanel/components/SelectorsList/selectorList.css @@ -0,0 +1,28 @@ +.wrapper { + height: calc(100vh - 190px); + overflow-y: auto; + &::-webkit-scrollbar { + width: 2px; + background: transparent !important; + background: rgba(0,0,0,0); + } + + &::-webkit-scrollbar-thumb { + background: transparent !important; + } + &::-webkit-scrollbar-track { + background: transparent !important; + } + &:hover { + &::-webkit-scrollbar { + width: 2px; + background: rgba(0,0,0,0.1) + } + &::-webkit-scrollbar-track { + background: rgba(0,0,0,0.1) + } + &::-webkit-scrollbar-thumb { + background: rgba(0,0,0,0.1) + } + } +} \ No newline at end of file From 2bb9a4c322525797cc0846f3818048c9eb6e352d Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Sat, 2 Oct 2021 00:29:55 +0530 Subject: [PATCH 20/64] change(ui) - fetch styling --- .../components/Session_/Fetch/components/Headers/Headers.tsx | 1 - .../components/Session_/Fetch/components/Headers/headers.css | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx b/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx index b54bb1de6..812c1b161 100644 --- a/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx +++ b/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx @@ -3,7 +3,6 @@ import { NoContent } from 'UI' import stl from './headers.css' function Headers(props) { - console.log('props', props); return (
Date: Sat, 2 Oct 2021 01:23:15 +0530 Subject: [PATCH 21/64] change(ui) - tracker version --- frontend/env.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/env.js b/frontend/env.js index 69731dc47..e061976cc 100644 --- a/frontend/env.js +++ b/frontend/env.js @@ -20,7 +20,7 @@ const oss = { MINIO_USE_SSL: process.env.MINIO_USE_SSL, MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY, MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY, - TRACKER_VERSION: '3.4.0', // trackerInfo.version, + TRACKER_VERSION: '3.4.2', // trackerInfo.version, } module.exports = { From 3edf00c8426efe62736182d61289ff39436a7253 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Sat, 2 Oct 2021 11:20:10 +0200 Subject: [PATCH 22/64] Updated tracker to v3.4.3 --- frontend/env.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/env.js b/frontend/env.js index e061976cc..249c0bb42 100644 --- a/frontend/env.js +++ b/frontend/env.js @@ -20,9 +20,9 @@ const oss = { MINIO_USE_SSL: process.env.MINIO_USE_SSL, MINIO_ACCESS_KEY: process.env.MINIO_ACCESS_KEY, MINIO_SECRET_KEY: process.env.MINIO_SECRET_KEY, - TRACKER_VERSION: '3.4.2', // trackerInfo.version, + TRACKER_VERSION: '3.4.3', // trackerInfo.version, } module.exports = { oss, -}; \ No newline at end of file +}; From fafb40bd23bb7d7e5226ceed071edda16bb6adf1 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Tue, 5 Oct 2021 17:51:24 +0530 Subject: [PATCH 23/64] fix(ui) - headers two line, fetch body parse, live session msg two lines --- frontend/app/components/Session_/Fetch/FetchDetails.js | 2 ++ .../Session_/Fetch/components/Headers/Headers.tsx | 6 ++++-- .../Session_/Fetch/components/Headers/headers.css | 4 ++++ .../components/Session_/Player/Overlay/LiveStatusText.css | 3 +++ .../components/Session_/Player/Overlay/LiveStatusText.tsx | 2 +- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/frontend/app/components/Session_/Fetch/FetchDetails.js b/frontend/app/components/Session_/Fetch/FetchDetails.js index 79834d4a4..b7a5386a1 100644 --- a/frontend/app/components/Session_/Fetch/FetchDetails.js +++ b/frontend/app/components/Session_/Fetch/FetchDetails.js @@ -26,12 +26,14 @@ export default class FetchDetails extends React.PureComponent { try { jsonPayload = typeof payload === 'string' ? JSON.parse(payload) : payload requestHeaders = jsonPayload.headers + jsonPayload.body = typeof jsonPayload.body === 'string' ? JSON.parse(jsonPayload.body) : jsonPayload.body delete jsonPayload.headers } catch (e) {} try { jsonResponse = typeof response === 'string' ? JSON.parse(response) : response; responseHeaders = jsonResponse.headers + jsonResponse.body = typeof jsonResponse.body === 'string' ? JSON.parse(jsonResponse.body) : jsonResponse.body delete jsonResponse.headers } catch (e) {} diff --git a/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx b/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx index 812c1b161..6a75afc4b 100644 --- a/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx +++ b/frontend/app/components/Session_/Fetch/components/Headers/Headers.tsx @@ -1,5 +1,5 @@ import React from 'react' -import { NoContent } from 'UI' +import { NoContent, TextEllipsis } from 'UI' import stl from './headers.css' function Headers(props) { @@ -19,7 +19,9 @@ function Headers(props) { Object.keys(props.requestHeaders).map(h => (
{h}:
-
{props.requestHeaders[h]}
+
+ +
)) } diff --git a/frontend/app/components/Session_/Fetch/components/Headers/headers.css b/frontend/app/components/Session_/Fetch/components/Headers/headers.css index 6ebae3bb5..eb6f26e29 100644 --- a/frontend/app/components/Session_/Fetch/components/Headers/headers.css +++ b/frontend/app/components/Session_/Fetch/components/Headers/headers.css @@ -6,4 +6,8 @@ &:hover { background-color: $active-blue; } + + & div:last-child { + max-width: 80%; + } } \ No newline at end of file diff --git a/frontend/app/components/Session_/Player/Overlay/LiveStatusText.css b/frontend/app/components/Session_/Player/Overlay/LiveStatusText.css index b7a17464b..379667b75 100644 --- a/frontend/app/components/Session_/Player/Overlay/LiveStatusText.css +++ b/frontend/app/components/Session_/Player/Overlay/LiveStatusText.css @@ -1,4 +1,7 @@ .text { color: $gray-light; font-size: 40px; + max-width: 680px; + line-height: 48px; + text-align: center; } \ No newline at end of file diff --git a/frontend/app/components/Session_/Player/Overlay/LiveStatusText.tsx b/frontend/app/components/Session_/Player/Overlay/LiveStatusText.tsx index 7ed13e562..e3eb7fc20 100644 --- a/frontend/app/components/Session_/Player/Overlay/LiveStatusText.tsx +++ b/frontend/app/components/Session_/Player/Overlay/LiveStatusText.tsx @@ -7,5 +7,5 @@ interface Props { } export default function LiveStatusText({ text }: Props) { - return
{text}
+ return
{text}
} \ No newline at end of file From c7a52426feee0edddda0b18a84e42e4353a123ef Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 6 Oct 2021 14:56:23 +0530 Subject: [PATCH 24/64] fix(ui) - first project edit, assist userId filter onClick, add new project button state in dropdown --- .../LiveSessionList/LiveSessionList.tsx | 23 ++++++++++++++++--- frontend/app/components/Client/Sites/Sites.js | 6 ++--- .../app/components/Header/SiteDropdown.js | 7 ++++-- .../app/components/Header/siteDropdown.css | 5 ++++ 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/frontend/app/components/BugFinder/LiveSessionList/LiveSessionList.tsx b/frontend/app/components/BugFinder/LiveSessionList/LiveSessionList.tsx index 0fc99b3ac..95f6e4b76 100644 --- a/frontend/app/components/BugFinder/LiveSessionList/LiveSessionList.tsx +++ b/frontend/app/components/BugFinder/LiveSessionList/LiveSessionList.tsx @@ -4,6 +4,9 @@ import { connect } from 'react-redux'; import { NoContent, Loader } from 'UI'; import { List, Map } from 'immutable'; import SessionItem from 'Shared/SessionItem'; +import { KEYS } from 'Types/filter/customFilter'; +import { applyFilter, addAttribute } from 'Duck/filters'; +import Filter from 'Types/filter'; const AUTOREFRESH_INTERVAL = 1 * 60 * 1000 @@ -12,12 +15,14 @@ interface Props { list?: List, fetchList: (params) => void, applyFilter: () => void, - filters: List + filters: Filter + addAttribute: (obj) => void, } function LiveSessionList(props: Props) { const { loading, list, filters } = props; var timeoutId; + const hasUserFilter = filters && filters.filters.map(i => i.key).includes(KEYS.USERID); useEffect(() => { props.fetchList(filters.toJS()); @@ -27,6 +32,16 @@ function LiveSessionList(props: Props) { } }, []) + const onUserClick = (userId, userAnonymousId) => { + if (userId) { + props.addAttribute({ label: 'User Id', key: KEYS.USERID, type: KEYS.USERID, operator: 'is', value: userId }) + } else { + props.addAttribute({ label: 'Anonymous ID', key: 'USERANONYMOUSID', type: "USERANONYMOUSID", operator: 'is', value: userAnonymousId }) + } + + props.applyFilter() + } + const timeout = () => { timeoutId = setTimeout(() => { props.fetchList(filters.toJS()); @@ -51,7 +66,9 @@ function LiveSessionList(props: Props) { ))} @@ -64,4 +81,4 @@ export default connect(state => ({ list: state.getIn(['sessions', 'liveSessions']), loading: state.getIn([ 'sessions', 'loading' ]), filters: state.getIn([ 'filters', 'appliedFilter' ]), -}), { fetchList })(LiveSessionList) +}), { fetchList, applyFilter, addAttribute })(LiveSessionList) diff --git a/frontend/app/components/Client/Sites/Sites.js b/frontend/app/components/Client/Sites/Sites.js index 0f54b0b02..9b5e3b9b0 100644 --- a/frontend/app/components/Client/Sites/Sites.js +++ b/frontend/app/components/Client/Sites/Sites.js @@ -196,9 +196,9 @@ class Sites extends React.PureComponent {
) From aecd544717b339f8b6913f12de8165eccc793138 Mon Sep 17 00:00:00 2001 From: Mehdi Osman Date: Fri, 3 Dec 2021 12:34:00 +0100 Subject: [PATCH 64/64] Update CLA --- CLA.md | 76 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/CLA.md b/CLA.md index e50c07a82..9a7e9f9c6 100644 --- a/CLA.md +++ b/CLA.md @@ -1,29 +1,75 @@ -## Individual Contributor License Agreement (CLA) +## Individual and Entity Contributor License Agreement (CLA) -Thank you for submitting your contributions to this project. By signing this CLA, you agree that the following terms apply to all of your past, present and future contributions to the project. +Thank you for your interest in contributing to software projects managed by Asayer, Inc. (“We” or “Us”). This Contributor License Agreement (“Agreement”) documents the rights granted by contributors to Us. This Agreement is for your protection as a contributor as well as for our protection; it does not change your rights to use your own Contributions for any other purpose. To make this document effective, please read the Agreement carefully and then sign it. By signing this Agreement (including by clicking “I agree” or "Sign in with GitHub to agree" and submitting it to us electronically), You are creating a legally binding contract which becomes effective upon your signature or agreement. If You are less than eighteen years old, please have Your parents or guardian sign the Agreement. This Agreement covers your present, and all future, Contributions from You, and may cover more than one software project managed by Us. -### License +### 1. Definitions -You hereby represent that all present, past and future contributions are governed by the [MIT License](https://opensource.org/licenses/MIT) copyright statement. +“Affiliates” means any Legal Entities that control, are controlled by, or under common control with another Legal Entity. For the purposes of this definition, “control” means (i) the power, direct or indirect, to cause the direction or management of such Legal Entity, whether by contract or otherwise, (ii) ownership of fifty percent (50%) or more of the outstanding shares or securities which vote to elect the management or other persons who direct such Legal Entity or (iii) beneficial ownership of such entity. -This entails that to the extent possible under the applicable law, you transfer all copyright and related or neighboring rights of the code or documents you contribute to the project itself. Furthermore you also represent that you have the authority to perform the above waiver with respect to the entirety of you contributions. +“Contribution” means any work of authorship that is Submitted by You to Us in which You own or assert ownership of the Copyright. If You do not own the Copyright in the entire work of authorship, please contact us before Submitting the Contribution. -### Moral Rights +“Copyright” means all rights protecting works of authorship owned or controlled by You or your Affiliates (as may be applicable), including copyright, moral and related (or neighboring) rights, as appropriate, for the full term of their existence, including any extensions by You. -To the fullest extent permitted under applicable law, you hereby waive, and agree not to assert, all of your “moral rights” in or relating to your contributions for the benefit of the project. +“Legal Entity” means an entity which is not a natural person. -### Third Party Content +“Media” means any portion of a Contribution which is not software. -If your Contribution includes or is based on any source code, object code, bug fixes, configuration changes, tools, specifications, documentation, data, materials, feedback, information or other works of authorship that were not authored by you (“Third Party Content”) or if you are aware of any third party intellectual property or proprietary rights associated with your Contribution (“Third Party Rights”), then you agree to include with the submission of your Contribution full details respecting such Third Party Content and Third Party Rights, including, without limitation, identification of which aspects of your Contribution contain Third Party Content or are associated with Third Party Rights, the owner/author of the Third Party Content and Third Party Rights, where you obtained the Third Party Content, and any applicable third party license terms or restrictions respecting the Third Party Content and Third Party Rights. For greater certainty, the foregoing obligations respecting the identification of Third Party Content and Third Party Rights do not apply to any portion of a Project that is incorporated into your Contribution to that same Project. +“Submit” means any form of electronic or written communication, or recorded verbal communication, sent to Us or our representatives at a destination (including websites) that we own or control or that is otherwise registered to us, including but not limited to electronic mailing lists, source code control systems, instant messages or similar communications, and issue tracking systems that are managed by, or on behalf of, Us for the purpose of discussing and improving the Work, but excluding any communication that is conspicuously marked or otherwise designated in writing by You as “Not a Contribution.” -### Representations +“Work” means any of the products or projects owned or managed by Us, and any work of authorship which is made available by Us to third parties. When this Agreement covers more than one software project, Work means the work of authorship to which your Contribution was Submitted. After You Submit the Contribution, it may be included in the Work. -You represent that, other than the Third Party Content and Third Party Rights identified by you in accordance with this Agreement, you are the sole author of your Contributions and are legally entitled to grant the foregoing licenses and waivers in respect of your Contributions. If your Contributions were created in the course of your employment with your past or present employer(s), you represent that such employer(s) has authorized you to make your Contributions on behalf of such employer(s) or such employer(s) has waived all of their right, title or interest in or to your Contributions. +“You” means (i) the individual who Submits a Contribution to Us, if You are an individual acting on your own behalf, or (ii) the Legal Entity on behalf of whom you Submit a Contribution to Us if you are are Submitting any Contribution on behalf of any entity. -### Disclaimer +### 2. Grant of Rights -To the fullest extent permitted under applicable law, your Contributions are provided on an "as is" basis, without any warranties or conditions, express or implied, including, without limitation, any implied warranties or conditions of non-infringement, merchantability or fitness for a particular purpose. You are not required to provide support for your Contributions, except to the extent you desire to provide support. +#### 2.1 Copyright License -### No Obligation +(a) Except for the license granted to Us in this Agreement, You reserve all right, title, and interest in and to Your Contributions. That means that you can keep doing whatever you want with your Contribution, and you can license it to anyone you want under any terms you want. -You acknowledge that the maintainers of this project are under no obligation to use or incorporate your contributions into the project. The decision to use or incorporate your contributions into the project will be made at the sole discretion of the maintainers or their authorized delegates. +(b) To the maximum extent permitted by the relevant law, You grant to Us a perpetual, worldwide, non-exclusive, transferable, no charge and royalty-free, irrevocable license under the Copyright covering the Contribution, with the right to sublicense such rights through multiple tiers of sublicensees, to reproduce, modify, display, perform, sublicense and distribute the Contribution as part of the Work; provided that this license is conditioned upon compliance with Section 2.3. + +#### 2.2 Patent License + +For patent claims, including without limitation method, process, and apparatus claims which You (or Your Affiliates, as may be applicable) own, control or have the right to grant, now or in the future, You grant to Us, and to recipients of software distributed by the Us, a perpetual, worldwide, non-exclusive, transferable, no charge and royalty-free, irrevocable patent license, with the right to sublicense these rights to multiple tiers of sublicensees, to make, have made, use, sell, offer for sale, import and otherwise transfer the Contribution (and the Contribution in combination with the Work, and portions of such combination). This license is granted only to the extent that the exercise of the licensed rights infringes such patent claims; and provided that this license is conditioned upon compliance with Section 2.3. If any person or entity institutes patent litigation against Contributor or any other entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Contributions, or the Work to which the Contributions were submitted, constitutes direct or contributory patent infringement, then any patent licenses granted under this Agreement for that Contribution to the person or entity instituting the litigation, or the Work to which the Contributions were submitted, shall terminate as of the date such litigation is filed. + +#### 2.3 Outbound License + +Based on the grant of rights in Sections 2.1 (meaning, no matter what, you can keep licensing your Contribution to others however you want) and 2.2, if We include Your Contribution in any Work, and if We determine that it is appropriate for the purpose of commercializing any Work or any project under Our control, we may license the Contribution under any license, including copyleft, permissive, commercial, or proprietary licenses. As a condition on the exercise of this right, We agree to also use reasonable efforts to continue to license Your Contribution (in the same or other projects or Works) under the terms of the license or licenses under which you Submitted Your Contribution. + +#### 2.4 Moral Rights + +We agree to comply with applicable laws regarding your Contribution, including copyright laws and law related to moral rights. If moral rights apply to the Contribution, to the maximum extent permitted by law, You waive and agree not to assert such moral rights against Us or our successors in interest, or any of our licensees, either direct or indirect. + +#### 2.5 Our Rights + +You acknowledge that We are not obligated to use Your Contribution as part of any Work, and that we and may decide to include any Contribution We consider appropriate. + +#### 2.6 Reservation of Rights + +Any rights in Your Contribution not expressly licensed under this Agreement are expressly reserved by You. + +### 3. Representations + +You represent (promise) that You are legally entitled to grant the above licenses. If Your employer(s) has rights to intellectual property that you create that includes your Contributions, You represent that You have received permission to make Contributions on behalf of that employer, that Your employer has waived such rights for your Contributions to Us, or that Your employer has executed a separate Corporate Contributor License Agreement with Us. + +You further represent that each of Your Contributions is Your original creation. You represent that Your Contribution submissions include complete details of any third-party license or other restriction (including, but not limited to, related patents and trademarks) of which you are personally aware and which are associated with any part of Your Contributions. + +You agree to notify Us of any facts or circumstances of which you become aware that would make these representations inaccurate in any respect. + +### 4. Disclaimer + +EXCEPT FOR THE EXPRESS WARRANTIES IN SECTION 3, YOUR CONTRIBUTION IS PROVIDED "AS IS". YOU EXPRESSLY DISCLAIM ALL OTHER EXPRESS WARRANTIES AND ALL IMPLIED WARRANTIES. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, SUCH WARRANTY IS LIMITED IN DURATION TO THE MINIMUM PERIOD PERMITTED BY LAW. + +### 5. Miscellaneous + +5.1 This Agreement will be governed by and construed in accordance with the laws of the State of Delaware, without regard to conflicts of law provisions. If any provision of this Agreement shall be adjudged by any court of competent jurisdiction to be unenforceable or invalid, that provision shall be limited or eliminated to the minimum extent necessary so that this Agreement shall otherwise remain in full force and effect and enforceable. The sole venue for all disputes relating to this Agreement shall be in the New Castle County, Delaware (USA). The rights and obligations of the parties under this Agreement shall not be governed by the 1980 U.N. Convention on Contracts for the International Sale of Goods. + +5.2 This Agreement may be amended only by a written document signed by the party against whom enforcement is sought. + +5.3 The failure of either party to require performance by the other party of any provision of this Agreement in one situation shall not affect the right of a party to require such performance at any time in the future. A waiver of performance under a provision in one situation shall not be considered a waiver of the performance of the provision in the future or a waiver of the provision in its entirety. + +5.4 If any provision of this Agreement is found void and unenforceable, such provision will be replaced to the extent possible with a provision that comes closest to the meaning of the original provision and which is enforceable. The terms and conditions set forth in this Agreement shall apply notwithstanding any failure of essential purpose of this Agreement or any limited remedy to the maximum extent possible under law. + +**This Agreement contains the entire understanding of the parties regarding the subject matter of this Agreement and supersedes all prior and contemporaneous negotiations and agreements, whether written or oral, between the parties with respect to the subject matter of this Agreement.** + +By signing this agreement, Contributor accepts and agrees to the preceding terms and conditions for Contributor’s present and future Contributions submitted to Us.