major: initial commit
@@ -0,0 +1,41 @@
|
|||||||
|
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||||
|
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
|
||||||
|
{
|
||||||
|
"name": "easylogon-web",
|
||||||
|
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
||||||
|
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm",
|
||||||
|
"features": {
|
||||||
|
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
||||||
|
"installDockerBuildx": true,
|
||||||
|
"version": "latest",
|
||||||
|
"dockerDashComposeVersion": "latest"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Features to add to the dev container. More info: https://containers.dev/features.
|
||||||
|
// "features": {},
|
||||||
|
|
||||||
|
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||||
|
// "forwardPorts": [],
|
||||||
|
|
||||||
|
// Use 'postCreateCommand' to run commands after the container is created.
|
||||||
|
"postCreateCommand": "yarn install",
|
||||||
|
|
||||||
|
// Configure tool-specific properties.
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": [
|
||||||
|
"bierner.github-markdown-preview",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"github.vscode-github-actions",
|
||||||
|
"Gruntfuggly.todo-tree",
|
||||||
|
"jock.svg",
|
||||||
|
"ms-azuretools.vscode-docker",
|
||||||
|
"saeris.markdown-github-alerts"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||||
|
// "remoteUser": "root"
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
.devcontainer/*
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
|
|
||||||
|
# Docs
|
||||||
|
*.md
|
||||||
|
COPYING
|
||||||
|
|
||||||
|
# Project-specific files
|
||||||
|
.env
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
VITE_SIGNALR_URL=http://localhost:8000/ws
|
||||||
|
VITE_ENDPOINT_URL=http://localhost:8000/send
|
||||||
|
VITE_COMMIT=devbuild
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
name: "🐞 Bug Report"
|
||||||
|
description: Create a report to help us improve the website
|
||||||
|
title: "[Bug]: "
|
||||||
|
labels: ["bug", "needs-triage"]
|
||||||
|
assignees:
|
||||||
|
- xfox111
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this bug report!
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> This repository is for tracking issues within **EasyLogon web application** only.
|
||||||
|
>
|
||||||
|
> List of all repositories:
|
||||||
|
> - [xfox111/easylogon-mobile](https://github.com/xfox111.net/easylogon-mobile) (mobile application)
|
||||||
|
> - [xfox111/easylogon-plugin](https://github.com/xfox111.net/easylogon-plugin) (website plugin)
|
||||||
|
> - [xfox111/easylogon-extension](https://github.com/xfox111.net/easylogon-plugin) (browser extension)
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
description: A clear and concise description of what the bug is.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Reproduction steps
|
||||||
|
description: Precisely describe minimal number of steps that make the bug to appear
|
||||||
|
placeholder: |
|
||||||
|
1. Go to '...'
|
||||||
|
2. Click on '...'
|
||||||
|
3. Scroll down to '...'
|
||||||
|
4. See '...'
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Expected behavior
|
||||||
|
description: A clear and concise description of what you expected to happen.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Screenshot
|
||||||
|
description: If applicable, add screenshots to help explain your problem.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Version and commit hash
|
||||||
|
placeholder: e.g. Microsoft Edge 119.0.2151.58
|
||||||
|
description: Go to the application, click "About" and copy the "Version" string
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: pwa
|
||||||
|
attributes:
|
||||||
|
label: Is this a PWA?
|
||||||
|
description: Did you install the application, or are you using it in the browser?
|
||||||
|
options:
|
||||||
|
- "Yes, it is a PWA"
|
||||||
|
- "No, I used it inside a browser"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: dropdown
|
||||||
|
id: os
|
||||||
|
attributes:
|
||||||
|
label: Operating system
|
||||||
|
options:
|
||||||
|
- "Windows 10 and newer"
|
||||||
|
- "Windows 8/8.1"
|
||||||
|
- "Windows 7 and older"
|
||||||
|
- "Android"
|
||||||
|
- "MacOS"
|
||||||
|
- "iOS/iPadOS"
|
||||||
|
- "Debian or Debian-based"
|
||||||
|
- "Other"
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: input
|
||||||
|
id: browser
|
||||||
|
attributes:
|
||||||
|
label: Browser name and version
|
||||||
|
placeholder: e.g. Microsoft Edge 119.0.2151.58
|
||||||
|
description: Put here your browser's name and version
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: context
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Add any other context about the problem here.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
id: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Validations
|
||||||
|
description: Before submitting the issue, please make sure you do the following
|
||||||
|
options:
|
||||||
|
- label: Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
|
||||||
|
required: true
|
||||||
|
- label: The provided reproduction is a minimal reproducible example of the bug.
|
||||||
|
required: true
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# yaml-language-server: $schema=https://json.schemastore.org/github-issue-config.json
|
||||||
|
|
||||||
|
blank_issues_enabled: true
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
name: "🚀 New feature proposal"
|
||||||
|
description: Suggest a feature idea for the website
|
||||||
|
title: "[Feature]: "
|
||||||
|
labels: ["feature", "needs-triage"]
|
||||||
|
assignees:
|
||||||
|
- xfox111
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for your interest and taking the time to fill out this form!
|
||||||
|
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> This repository is for tracking issues within **EasyLogon web application** only.
|
||||||
|
>
|
||||||
|
> List of all repositories:
|
||||||
|
> - [xfox111/easylogon-mobile](https://github.com/xfox111.net/easylogon-mobile) (mobile application)
|
||||||
|
> - [xfox111/easylogon-plugin](https://github.com/xfox111.net/easylogon-plugin) (website plugin)
|
||||||
|
> - [xfox111/easylogon-extension](https://github.com/xfox111.net/easylogon-plugin) (browser extension)
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: proposition
|
||||||
|
attributes:
|
||||||
|
label: Proposed solution
|
||||||
|
description: Describe the solution you'd like
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: justification
|
||||||
|
attributes:
|
||||||
|
label: Justification
|
||||||
|
description: Is your feature request related to a problem? Please describe.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: alts
|
||||||
|
attributes:
|
||||||
|
label: Alternatives
|
||||||
|
description: Describe alternatives you've considered.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: context
|
||||||
|
attributes:
|
||||||
|
label: Additional context
|
||||||
|
description: Add any other context or screenshots about the feature request here.
|
||||||
|
validations:
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: checkboxes
|
||||||
|
id: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Validations
|
||||||
|
description: Before submitting the issue, please make sure you do the following
|
||||||
|
options:
|
||||||
|
- label: Check that there isn't already an issue that request the same feature to avoid creating a duplicate.
|
||||||
|
required: true
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
# yaml-language-server: $schema=https://json.schemastore.org/dependabot-2.0.json
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
|
||||||
|
- package-ecosystem: "npm"
|
||||||
|
directory: "/"
|
||||||
|
target-branch: "next"
|
||||||
|
assignees:
|
||||||
|
- "xfox111"
|
||||||
|
reviewers:
|
||||||
|
- "xfox111"
|
||||||
|
schedule:
|
||||||
|
interval: monthly
|
||||||
|
rebase-strategy: disabled
|
||||||
|
open-pull-requests-limit: 20
|
||||||
|
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
target-branch: "next"
|
||||||
|
assignees:
|
||||||
|
- "xfox111"
|
||||||
|
reviewers:
|
||||||
|
- "xfox111"
|
||||||
|
schedule:
|
||||||
|
interval: monthly
|
||||||
|
rebase-strategy: disabled
|
||||||
|
open-pull-requests-limit: 20
|
||||||
|
|
||||||
|
- package-ecosystem: "devcontainers"
|
||||||
|
directory: "/"
|
||||||
|
target-branch: "next"
|
||||||
|
assignees:
|
||||||
|
- "xfox111"
|
||||||
|
reviewers:
|
||||||
|
- "xfox111"
|
||||||
|
schedule:
|
||||||
|
interval: monthly
|
||||||
|
rebase-strategy: disabled
|
||||||
|
open-pull-requests-limit: 20
|
||||||
|
|
||||||
|
- package-ecosystem: "docker"
|
||||||
|
directory: "/"
|
||||||
|
target-branch: "next"
|
||||||
|
assignees:
|
||||||
|
- "xfox111"
|
||||||
|
reviewers:
|
||||||
|
- "xfox111"
|
||||||
|
schedule:
|
||||||
|
interval: monthly
|
||||||
|
rebase-strategy: disabled
|
||||||
|
open-pull-requests-limit: 20
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
Resolves: #issue_number
|
||||||
|
|
||||||
|
# Description
|
||||||
|
|
||||||
|
<!-- IMPORTANT -->
|
||||||
|
<!-- Before submitting a pull request, make sure, that there's an issue related to it, and that you are assigned. -->
|
||||||
|
<!-- Visit https://github.com/xfox111/easylogon-web/blob/main/CONTRIBUTING.md for more information. -->
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
name: "CI pipeline"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "main" ]
|
||||||
|
paths-ignore:
|
||||||
|
- '.devcontainer/*'
|
||||||
|
- '.github/*'
|
||||||
|
- '!.github/workflows/ci.yml'
|
||||||
|
- '.vscode/*'
|
||||||
|
- '**.md'
|
||||||
|
- '.env*'
|
||||||
|
- 'COPYING'
|
||||||
|
pull_request:
|
||||||
|
branches: [ "main", "deps" ]
|
||||||
|
paths-ignore:
|
||||||
|
- '.devcontainer/*'
|
||||||
|
- '.github/*'
|
||||||
|
- '!.github/workflows/ci.yml'
|
||||||
|
- '.vscode/*'
|
||||||
|
- '**.md'
|
||||||
|
- '.env*'
|
||||||
|
- 'COPYING'
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
push:
|
||||||
|
type: boolean
|
||||||
|
required: false
|
||||||
|
default: false
|
||||||
|
description: "Push to Docker Hub"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: docker/metadata-action@v5
|
||||||
|
id: meta
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
${{ github.repository }}
|
||||||
|
ghcr.io/${{ github.repository }}
|
||||||
|
tags: |
|
||||||
|
latest
|
||||||
|
${{ github.sha }}
|
||||||
|
|
||||||
|
- name: "Login to Docker Hub"
|
||||||
|
if: github.event_name != 'pull_request' || github.event.inputs.push == 'true'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: "Login to GitHub Container Registry"
|
||||||
|
if: github.event_name != 'pull_request' || github.event.inputs.push == 'true'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- uses: docker/build-push-action@v6
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
build-args: |
|
||||||
|
SIGNALR_URL=https://ezlog.app/api/comms
|
||||||
|
ENDPOINT_URL=https://ezlog.app/api/send
|
||||||
|
COMMIT=${{ github.sha }}
|
||||||
|
push: ${{ github.event_name != 'pull_request' || github.event.inputs.push == 'true' }}
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
.DS_Store
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"bierner.github-markdown-preview",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"github.vscode-github-actions",
|
||||||
|
"Gruntfuggly.todo-tree",
|
||||||
|
"jock.svg",
|
||||||
|
"mrmlnc.vscode-scss",
|
||||||
|
"ms-azuretools.vscode-docker",
|
||||||
|
"saeris.markdown-github-alerts"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
|
||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
We as members, contributors, and leaders pledge to make participation in our
|
||||||
|
community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||||
|
identity and expression, level of experience, education, socio-economic status,
|
||||||
|
nationality, personal appearance, race, caste, color, religion, or sexual
|
||||||
|
identity and orientation.
|
||||||
|
|
||||||
|
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||||
|
diverse, inclusive, and healthy community.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to a positive environment for our
|
||||||
|
community include:
|
||||||
|
|
||||||
|
* Demonstrating empathy and kindness toward other people
|
||||||
|
* Being respectful of differing opinions, viewpoints, and experiences
|
||||||
|
* Giving and gracefully accepting constructive feedback
|
||||||
|
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||||
|
and learning from the experience
|
||||||
|
* Focusing on what is best not just for us as individuals, but for the overall
|
||||||
|
community
|
||||||
|
|
||||||
|
Examples of unacceptable behavior include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery, and sexual attention or advances of
|
||||||
|
any kind
|
||||||
|
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or email address,
|
||||||
|
without their explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Enforcement Responsibilities
|
||||||
|
|
||||||
|
Community leaders are responsible for clarifying and enforcing our standards of
|
||||||
|
acceptable behavior and will take appropriate and fair corrective action in
|
||||||
|
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||||
|
or harmful.
|
||||||
|
|
||||||
|
Community leaders have the right and responsibility to remove, edit, or reject
|
||||||
|
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||||
|
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||||
|
decisions when appropriate.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies within all community spaces, and also applies when
|
||||||
|
an individual is officially representing the community in public spaces.
|
||||||
|
Examples of representing our community include using an official email address,
|
||||||
|
posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported to the community leaders responsible for enforcement at
|
||||||
|
[opensource@xfox111.net](mailto:opensource@xfox111.net).
|
||||||
|
All complaints will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
|
All community leaders are obligated to respect the privacy and security of the
|
||||||
|
reporter of any incident.
|
||||||
|
|
||||||
|
## Enforcement Guidelines
|
||||||
|
|
||||||
|
Community leaders will follow these Community Impact Guidelines in determining
|
||||||
|
the consequences for any action they deem in violation of this Code of Conduct:
|
||||||
|
|
||||||
|
### 1. Correction
|
||||||
|
|
||||||
|
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||||
|
unprofessional or unwelcome in the community.
|
||||||
|
|
||||||
|
**Consequence**: A private, written warning from community leaders, providing
|
||||||
|
clarity around the nature of the violation and an explanation of why the
|
||||||
|
behavior was inappropriate. A public apology may be requested.
|
||||||
|
|
||||||
|
### 2. Warning
|
||||||
|
|
||||||
|
**Community Impact**: A violation through a single incident or series of
|
||||||
|
actions.
|
||||||
|
|
||||||
|
**Consequence**: A warning with consequences for continued behavior. No
|
||||||
|
interaction with the people involved, including unsolicited interaction with
|
||||||
|
those enforcing the Code of Conduct, for a specified period of time. This
|
||||||
|
includes avoiding interactions in community spaces as well as external channels
|
||||||
|
like social media. Violating these terms may lead to a temporary or permanent
|
||||||
|
ban.
|
||||||
|
|
||||||
|
### 3. Temporary Ban
|
||||||
|
|
||||||
|
**Community Impact**: A serious violation of community standards, including
|
||||||
|
sustained inappropriate behavior.
|
||||||
|
|
||||||
|
**Consequence**: A temporary ban from any sort of interaction or public
|
||||||
|
communication with the community for a specified period of time. No public or
|
||||||
|
private interaction with the people involved, including unsolicited interaction
|
||||||
|
with those enforcing the Code of Conduct, is allowed during this period.
|
||||||
|
Violating these terms may lead to a permanent ban.
|
||||||
|
|
||||||
|
### 4. Permanent Ban
|
||||||
|
|
||||||
|
**Community Impact**: Demonstrating a pattern of violation of community
|
||||||
|
standards, including sustained inappropriate behavior, harassment of an
|
||||||
|
individual, or aggression toward or disparagement of classes of individuals.
|
||||||
|
|
||||||
|
**Consequence**: A permanent ban from any sort of public interaction within the
|
||||||
|
community.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||||
|
version 2.1, available at
|
||||||
|
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||||
|
|
||||||
|
Community Impact Guidelines were inspired by
|
||||||
|
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see the FAQ at
|
||||||
|
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
|
||||||
|
[https://www.contributor-covenant.org/translations][translations].
|
||||||
|
|
||||||
|
> Contributor Covenant is released under the [Creative Commons Attribution 4.0 International Public License](https://github.com/EthicalSource/contributor_covenant/blob/release/LICENSE.md).
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||||
|
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||||
|
[FAQ]: https://www.contributor-covenant.org/faq
|
||||||
|
[translations]: https://www.contributor-covenant.org/translations
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Contribution Guidelines
|
||||||
|
|
||||||
|
Thank you for considering contributing to the project! We welcome your help and appreciate your support.
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Since this is a proprietary project, we have a strict PR policy. While you are welcome to create issues, send your feedback or ask to work on an issue, do not expect getting assigned one.
|
||||||
|
|
||||||
|
## General guidelines
|
||||||
|
|
||||||
|
- **Follow templates:** Use the provided issue and pull request templates to ensure consistency and completeness. Be concise.
|
||||||
|
- **Follow Single responisibility principle:** Each contribution must correspond to a single area of work. Don't mix them up (e.g. fixing a bug and adding a new feature in the same PR).
|
||||||
|
- **Code of Conduct:** Be sure to follow our [Code of Conduct](CODE_OF_CONDUCT.md).
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> **Do not work on a PR unless you were assigned to an issue.** All unassigned PRs will be closed without review!
|
||||||
|
|
||||||
|
## Contributing Process
|
||||||
|
|
||||||
|
1. **Create an Issue:** Before starting work, check the issue tracker to see if a relevant issue already exists. If not, create a new issue to describe the bug or feature.
|
||||||
|
|
||||||
|
2. **Get Assigned:** Make sure you are assigned to an issue before beginning any work. This helps prevent duplicate efforts.
|
||||||
|
|
||||||
|
3. **Fork the Repository:** Fork the repository and clone it to your local machine.
|
||||||
|
|
||||||
|
4. **Work on Your Changes:** Create a new branch for your work and make your changes.
|
||||||
|
|
||||||
|
5. **Commit Your Changes:** Write clear, concise commit messages.
|
||||||
|
|
||||||
|
6. **Open a Pull Request (PR):** Once your changes are ready, open a PR. Ensure you link the PR to the corresponding issue.
|
||||||
|
|
||||||
|
7. **Review Process:** Be responsive to feedback and make any requested changes.
|
||||||
|
|
||||||
|
## Additional Notes
|
||||||
|
|
||||||
|
Feel free to suggest improvements or ask questions. You can send your feedback to [opensource@xfox111.net](mailto:opensource@xfox111.net)
|
||||||
|
|
||||||
|
Thank you!
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
©2025 Eugene Fox. Some rights reserved.
|
||||||
|
|
||||||
|
This repository and its content are subject to general copyright law.
|
||||||
|
|
||||||
|
You must obtain written permission from the author to deploy, modify, or
|
||||||
|
distribute (use) any copyrighted material.
|
||||||
|
|
||||||
|
You may use copyrighted material without excplicit permission
|
||||||
|
in following cases:
|
||||||
|
|
||||||
|
- Educational purposes.
|
||||||
|
- Scientific research.
|
||||||
|
- Information security research and analysis.
|
||||||
|
- Source code contributions to the original author.
|
||||||
|
|
||||||
|
When shared or modified, each copyrighted material must have a proper
|
||||||
|
attribution.
|
||||||
|
|
||||||
|
When contributing source code, the contributor agrees to transfer
|
||||||
|
the intellectual property rights of the contribution to the original author
|
||||||
|
on the condition of proper attribution by the original author.
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# Use the official Node.js 20 image as the base image
|
||||||
|
FROM node:20 AS builder
|
||||||
|
|
||||||
|
ARG SIGNALR_URL=http://localhost:8080/ws
|
||||||
|
ARG ENDPOINT_URL=http://localhost:8080/send
|
||||||
|
ARG COMMIT=devbuild
|
||||||
|
|
||||||
|
# Set the working directory inside the container
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy the package.json and yarn.lock files to the working directory
|
||||||
|
COPY package.json ./
|
||||||
|
COPY yarn.lock ./
|
||||||
|
|
||||||
|
# Install the app dependencies
|
||||||
|
RUN yarn install
|
||||||
|
RUN yarn audit
|
||||||
|
|
||||||
|
# Copy the app source code to the working directory
|
||||||
|
COPY . .
|
||||||
|
RUN yarn lint
|
||||||
|
|
||||||
|
RUN echo "VITE_SIGNALR_URL=${SIGNALR_URL}" >> .env
|
||||||
|
RUN echo "VITE_ENDPOINT_URL=${ENDPOINT_URL}" >> .env
|
||||||
|
RUN echo "VITE_COMMIT=${COMMIT}" >> .env
|
||||||
|
|
||||||
|
# Build the app
|
||||||
|
RUN yarn build
|
||||||
|
|
||||||
|
FROM steebchen/nginx-spa:stable AS runner
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY --from=builder /app/dist .
|
||||||
|
EXPOSE 80
|
||||||
|
CMD ["nginx"]
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
1742920769
|
||||||
|
---
|
||||||
|
## 1. General terms
|
||||||
|
1. EasyLogon Privacy Policy (hereinafter "the Policy") is applied to its end-user - a person, who utilizes EasyLogon mobile application and/or uses EasyLogon QR code authorization to access their personal data (hereinafter "User")
|
||||||
|
2. User agrees to the Policy by ticking "I accept EasyLogon privacy policy" checkbox and clicking "Continue" inside EasyLogon mobile application installed on their device.
|
||||||
|
3. An up-to-date version of the Policy can be found on [https://ezlog.app/privacy](https://ezlog.app/privacy), or inside project's repository: [https://github.com/xfox111/easylogon-web/blob/main/POLICY.md](https://github.com/xfox111/easylogon-web/blob/main/POLICY.md).
|
||||||
|
4. User will be notified of the Policy changes next time they open EasyLogon mobile application, if such occur.
|
||||||
|
5. User can revoke their consent to the Policy at any time by uninstalling EasyLogon mobile application from their device.
|
||||||
|
|
||||||
|
## 2. Personal data
|
||||||
|
1. EasyLogon stores and aggregates the following personal data:
|
||||||
|
- Passwords
|
||||||
|
- Logins (usernames, emails)
|
||||||
|
- Domain names, associated with credentials
|
||||||
|
- One-time passwords' secret keys and configuration details (issuer, account name, etc.)
|
||||||
|
2. EasyLogon does not store any other personal data unless it is stated in paragraph 2.1. of the Policy
|
||||||
|
3. All credentials saved by user in EasyLogon mobile application are stored locally on user's device
|
||||||
|
4. EasyLogon does not share any of User's personal data with any third party
|
||||||
|
5. EasyLogon is responsible for user's personal data while it's being transferred and is not responsible for data stored on user's end devices.
|
||||||
|
|
||||||
|
## 3. Data protection
|
||||||
|
1. EasyLogon stores and transfers your passwords and usernames using only encrypted data channels as well as encrypting all your data before transmission
|
||||||
|
2. EasyLogon maintainers must notify end users about all data leaks and security problems as soon as possible
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
# ezlog.app (web application)
|
||||||
|
|
||||||
|
[](https://ezlog.app)
|
||||||
|
[](https://github.com/XFox111/easylogon-web/commits/main)
|
||||||
|
[](https://hub.docker.com/r/xfox111/easylogon-web/)
|
||||||
|
|
||||||
|
> [!WARNING]
|
||||||
|
> This project is in early development stage and is missing some essential components that will be released sometime in the future.
|
||||||
|
|
||||||
|
<picture>
|
||||||
|
<source media="(prefers-color-scheme: dark)" srcset="https://cdn.xfox111.net/projects/easylogon/banner-dark.webp">
|
||||||
|
<source media="(prefers-color-scheme: light)" srcset="https://cdn.xfox111.net/projects/easylogon/banner-light.webp">
|
||||||
|
<img alt="Easylogon. Forget about passwords. This time for real.">
|
||||||
|
</picture>
|
||||||
|
|
||||||
|
EasyLogon is a service that can help you authenticate on any device by scanning a QR code.
|
||||||
|
|
||||||
|
This is a collection of applications, that includes password manager web application, web application, plugin for thrid-party websites and browser extension!
|
||||||
|
|
||||||
|
## Demo
|
||||||
|
|
||||||
|
<iframe width="560" height="315" src="https://www.youtube.com/embed/QmZtMtAWfYY?si=a5htWjY-nKN9wcsn" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Authenticator + password manager:** Store all your credentials securely on your device.
|
||||||
|
- **QR code authentication:** Once you need to login on a new device - just open the app, scan QR code, and voila.
|
||||||
|
- **Plugin for 3rd party website:** Add QR code authentication to your website with a single line of code.
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
- Live web application: https://ezlog.app
|
||||||
|
- Mobile app for Android: https://at.xfox111.net/easylogon-android
|
||||||
|
|
||||||
|
## Papers
|
||||||
|
|
||||||
|
- [QR Code Authentication System as an Ultimate Tool for Personal Cybersecurity (2023, IEEE)](https://ieeexplore.ieee.org/abstract/document/10397212)
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Please make sure you have read [the copyright notice](/COPYING)
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
For development you can use [Dev Containers](https://devcontainers.io/) or [GitHub Codespaces](https://github.com/features/codespaces). Otherwise you will need to install following tools:
|
||||||
|
- [Node.js](https://nodejs.org/en/)
|
||||||
|
- [Yarn](https://yarnpkg.com/)
|
||||||
|
- [Docker](https://www.docker.com/)
|
||||||
|
|
||||||
|
|
||||||
|
### Building and debugging
|
||||||
|
|
||||||
|
Here're some commonly used commands:
|
||||||
|
```bash
|
||||||
|
yarn install # Install dependencies
|
||||||
|
yarn dev # Start the development server
|
||||||
|
yarn lint # Lint the project with ESLint
|
||||||
|
yarn build # Build the project for production
|
||||||
|
```
|
||||||
|
|
||||||
|
To build a Docker image, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build -t <tag_name> .
|
||||||
|
```
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> If you use VS Code, you can also use pre-defined tasks for building and debugging.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
This project doesn't accept pull requests, but we are open to suggestions and feedback. If you have any ideas or improvements, please feel free to open an issue.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> Please make sure to follow the [contributing guidelines](/CONTRIBUTING.md)
|
||||||
|
|
||||||
|
## Copyright notice
|
||||||
|
|
||||||
|
This is a proprietary project and is subject to general copyright law. See [COPYING](/COPYING) for more information.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[](https://bsky.app/profile/xfox111.net)
|
||||||
|
[](https://github.com/xfox111)
|
||||||
|
[](https://buymeacoffee.com/xfox111)
|
||||||
|
|
||||||
|
> ©2025 Eugene Fox. All rights reserved
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Security Policy
|
||||||
|
|
||||||
|
We as maintainers of this project are committed to maintaining the security of our software. We take security vulnerabilities seriously and will work to address them as quickly as possible.
|
||||||
|
|
||||||
|
## Reporting vulnerabilities
|
||||||
|
|
||||||
|
Here's a basic steps to report a vulnerability:
|
||||||
|
|
||||||
|
1. Send an email to opensource@xfox111.net
|
||||||
|
1. Give a clear description of the issue, including how to reproduce it and what impact it might have.
|
||||||
|
1. If applicanle, provide a proof-of-concept or screenshot showing the problem.
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> Please do not disclose the vulnerability publicly until we have had a chance to address it. This helps us keep our users safe and gives us time to fix the issue.
|
||||||
|
|
||||||
|
We'll do our best to address any issues and give you an update.
|
||||||
|
|
||||||
|
Thank you <3
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
import js from "@eslint/js";
|
||||||
|
import globals from "globals";
|
||||||
|
import reactHooks from "eslint-plugin-react-hooks";
|
||||||
|
import reactRefresh from "eslint-plugin-react-refresh";
|
||||||
|
import tseslint from "typescript-eslint";
|
||||||
|
|
||||||
|
export default tseslint.config(
|
||||||
|
{ ignores: ["dist"] },
|
||||||
|
{
|
||||||
|
extends: [js.configs.recommended, ...tseslint.configs.recommended],
|
||||||
|
files: ["**/*.{ts,tsx}"],
|
||||||
|
languageOptions: {
|
||||||
|
ecmaVersion: 2020,
|
||||||
|
globals: globals.browser,
|
||||||
|
},
|
||||||
|
plugins: {
|
||||||
|
"react-hooks": reactHooks,
|
||||||
|
"react-refresh": reactRefresh,
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
...reactHooks.configs.recommended.rules,
|
||||||
|
"react-refresh/only-export-components": [
|
||||||
|
"warn",
|
||||||
|
{ allowConstantExport: true },
|
||||||
|
],
|
||||||
|
"@typescript-eslint/no-unused-vars": "warn",
|
||||||
|
"no-constant-binary-expression": "warn",
|
||||||
|
"indent": [
|
||||||
|
"warn",
|
||||||
|
"tab",
|
||||||
|
{
|
||||||
|
"SwitchCase": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"quotes": [
|
||||||
|
"error",
|
||||||
|
"double"
|
||||||
|
],
|
||||||
|
"semi": [
|
||||||
|
"error",
|
||||||
|
"always"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
);
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<link rel="mask-icon" href="/favicon.svg" color="#0078d4">
|
||||||
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
|
||||||
|
<meta name="description" content="Log in on any device with a few clicks" />
|
||||||
|
<meta name="copyright" content="©2025 Eugene Fox" />
|
||||||
|
<meta name="lanugage" content="en_us" />
|
||||||
|
<meta name="author" content="Eugene Fox" />
|
||||||
|
|
||||||
|
<meta property="og:title" content="EasyLogon" />
|
||||||
|
<meta property="og:description" content="Sign in on any device with a few clicks" />
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:url" content="https://ezlog.app" />
|
||||||
|
|
||||||
|
<meta property="og:image" content="https://ezlog.app/banner.png" />
|
||||||
|
<meta property="og:image:type" content="image/png" />
|
||||||
|
<meta property="og:image:width" content="1024" />
|
||||||
|
<meta property="og:image:height" content="512" />
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
if ("serviceWorker" in navigator)
|
||||||
|
{
|
||||||
|
navigator.serviceWorker
|
||||||
|
.register("/sw.js");
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<meta name="application-title" content="EasyLogon" />
|
||||||
|
<title>EasyLogon</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
<script type="module" src="/src/main.tsx"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"name": "easylogon-web",
|
||||||
|
"private": true,
|
||||||
|
"version": "2.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "tsc -b && vite build",
|
||||||
|
"lint": "eslint .",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@fluentui/react-components": "^9.61.3",
|
||||||
|
"@fluentui/react-icons": "^2.0.292",
|
||||||
|
"@microsoft/signalr": "^8.0.7",
|
||||||
|
"crypto-js": "^4.2.0",
|
||||||
|
"qrcode.react": "^4.2.0",
|
||||||
|
"react": "18",
|
||||||
|
"react-dom": "18",
|
||||||
|
"react-helmet": "^6.1.0",
|
||||||
|
"react-markdown": "^10.1.0",
|
||||||
|
"react-router-dom": "^7.4.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@eslint/js": "^9.23.0",
|
||||||
|
"@types/crypto-js": "^4.2.2",
|
||||||
|
"@types/react": "18",
|
||||||
|
"@types/react-dom": "18",
|
||||||
|
"@types/react-helmet": "^6.1.11",
|
||||||
|
"@vitejs/plugin-react": "^4.3.4",
|
||||||
|
"eslint": "^9.23.0",
|
||||||
|
"eslint-plugin-react-hooks": "^5.2.0",
|
||||||
|
"eslint-plugin-react-refresh": "^0.4.19",
|
||||||
|
"globals": "^16.0.0",
|
||||||
|
"typescript": "^5.8.2",
|
||||||
|
"typescript-eslint": "^8.28.0",
|
||||||
|
"vite": "^6.2.3",
|
||||||
|
"vite-plugin-svgr": "^4.3.0"
|
||||||
|
},
|
||||||
|
"resolutions": {
|
||||||
|
"scheduler": "^0.19.0",
|
||||||
|
"@babel/runtime": "^7.26.10",
|
||||||
|
"@babel/helpers": "^7.26.10"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
@@ -0,0 +1,452 @@
|
|||||||
|
{
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "windows11/SmallTile.scale-100.png",
|
||||||
|
"sizes": "71x71"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SmallTile.scale-125.png",
|
||||||
|
"sizes": "89x89"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SmallTile.scale-150.png",
|
||||||
|
"sizes": "107x107"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SmallTile.scale-200.png",
|
||||||
|
"sizes": "142x142"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SmallTile.scale-400.png",
|
||||||
|
"sizes": "284x284"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square150x150Logo.scale-100.png",
|
||||||
|
"sizes": "150x150"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square150x150Logo.scale-125.png",
|
||||||
|
"sizes": "188x188"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square150x150Logo.scale-150.png",
|
||||||
|
"sizes": "225x225"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square150x150Logo.scale-200.png",
|
||||||
|
"sizes": "300x300"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square150x150Logo.scale-400.png",
|
||||||
|
"sizes": "600x600"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Wide310x150Logo.scale-100.png",
|
||||||
|
"sizes": "310x150"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Wide310x150Logo.scale-125.png",
|
||||||
|
"sizes": "388x188"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Wide310x150Logo.scale-150.png",
|
||||||
|
"sizes": "465x225"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Wide310x150Logo.scale-200.png",
|
||||||
|
"sizes": "620x300"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Wide310x150Logo.scale-400.png",
|
||||||
|
"sizes": "1240x600"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/LargeTile.scale-100.png",
|
||||||
|
"sizes": "310x310"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/LargeTile.scale-125.png",
|
||||||
|
"sizes": "388x388"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/LargeTile.scale-150.png",
|
||||||
|
"sizes": "465x465"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/LargeTile.scale-200.png",
|
||||||
|
"sizes": "620x620"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/LargeTile.scale-400.png",
|
||||||
|
"sizes": "1240x1240"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.scale-100.png",
|
||||||
|
"sizes": "44x44"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.scale-125.png",
|
||||||
|
"sizes": "55x55"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.scale-150.png",
|
||||||
|
"sizes": "66x66"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.scale-200.png",
|
||||||
|
"sizes": "88x88"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.scale-400.png",
|
||||||
|
"sizes": "176x176"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/StoreLogo.scale-100.png",
|
||||||
|
"sizes": "50x50"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/StoreLogo.scale-125.png",
|
||||||
|
"sizes": "63x63"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/StoreLogo.scale-150.png",
|
||||||
|
"sizes": "75x75"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/StoreLogo.scale-200.png",
|
||||||
|
"sizes": "100x100"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/StoreLogo.scale-400.png",
|
||||||
|
"sizes": "200x200"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SplashScreen.scale-100.png",
|
||||||
|
"sizes": "620x300"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SplashScreen.scale-125.png",
|
||||||
|
"sizes": "775x375"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SplashScreen.scale-150.png",
|
||||||
|
"sizes": "930x450"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SplashScreen.scale-200.png",
|
||||||
|
"sizes": "1240x600"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/SplashScreen.scale-400.png",
|
||||||
|
"sizes": "2480x1200"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-16.png",
|
||||||
|
"sizes": "16x16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-20.png",
|
||||||
|
"sizes": "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-24.png",
|
||||||
|
"sizes": "24x24"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-30.png",
|
||||||
|
"sizes": "30x30"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-32.png",
|
||||||
|
"sizes": "32x32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-36.png",
|
||||||
|
"sizes": "36x36"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-40.png",
|
||||||
|
"sizes": "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-44.png",
|
||||||
|
"sizes": "44x44"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-48.png",
|
||||||
|
"sizes": "48x48"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-60.png",
|
||||||
|
"sizes": "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-64.png",
|
||||||
|
"sizes": "64x64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-72.png",
|
||||||
|
"sizes": "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-80.png",
|
||||||
|
"sizes": "80x80"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-96.png",
|
||||||
|
"sizes": "96x96"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.targetsize-256.png",
|
||||||
|
"sizes": "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-16.png",
|
||||||
|
"sizes": "16x16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-20.png",
|
||||||
|
"sizes": "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-24.png",
|
||||||
|
"sizes": "24x24"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-30.png",
|
||||||
|
"sizes": "30x30"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-32.png",
|
||||||
|
"sizes": "32x32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-36.png",
|
||||||
|
"sizes": "36x36"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-40.png",
|
||||||
|
"sizes": "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-44.png",
|
||||||
|
"sizes": "44x44"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-48.png",
|
||||||
|
"sizes": "48x48"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-60.png",
|
||||||
|
"sizes": "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-64.png",
|
||||||
|
"sizes": "64x64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-72.png",
|
||||||
|
"sizes": "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-80.png",
|
||||||
|
"sizes": "80x80"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-96.png",
|
||||||
|
"sizes": "96x96"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-unplated_targetsize-256.png",
|
||||||
|
"sizes": "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-16.png",
|
||||||
|
"sizes": "16x16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-20.png",
|
||||||
|
"sizes": "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-24.png",
|
||||||
|
"sizes": "24x24"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-30.png",
|
||||||
|
"sizes": "30x30"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-32.png",
|
||||||
|
"sizes": "32x32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-36.png",
|
||||||
|
"sizes": "36x36"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-40.png",
|
||||||
|
"sizes": "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-44.png",
|
||||||
|
"sizes": "44x44"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-48.png",
|
||||||
|
"sizes": "48x48"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-60.png",
|
||||||
|
"sizes": "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-64.png",
|
||||||
|
"sizes": "64x64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-72.png",
|
||||||
|
"sizes": "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-80.png",
|
||||||
|
"sizes": "80x80"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-96.png",
|
||||||
|
"sizes": "96x96"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "windows11/Square44x44Logo.altform-lightunplated_targetsize-256.png",
|
||||||
|
"sizes": "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android/android-launchericon-512-512.png",
|
||||||
|
"sizes": "512x512"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android/android-launchericon-192-192.png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android/android-launchericon-144-144.png",
|
||||||
|
"sizes": "144x144"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android/android-launchericon-96-96.png",
|
||||||
|
"sizes": "96x96"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android/android-launchericon-72-72.png",
|
||||||
|
"sizes": "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "android/android-launchericon-48-48.png",
|
||||||
|
"sizes": "48x48"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/16.png",
|
||||||
|
"sizes": "16x16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/20.png",
|
||||||
|
"sizes": "20x20"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/29.png",
|
||||||
|
"sizes": "29x29"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/32.png",
|
||||||
|
"sizes": "32x32"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/40.png",
|
||||||
|
"sizes": "40x40"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/50.png",
|
||||||
|
"sizes": "50x50"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/57.png",
|
||||||
|
"sizes": "57x57"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/58.png",
|
||||||
|
"sizes": "58x58"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/60.png",
|
||||||
|
"sizes": "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/64.png",
|
||||||
|
"sizes": "64x64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/72.png",
|
||||||
|
"sizes": "72x72"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/76.png",
|
||||||
|
"sizes": "76x76"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/80.png",
|
||||||
|
"sizes": "80x80"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/87.png",
|
||||||
|
"sizes": "87x87"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/100.png",
|
||||||
|
"sizes": "100x100"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/114.png",
|
||||||
|
"sizes": "114x114"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/120.png",
|
||||||
|
"sizes": "120x120"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/128.png",
|
||||||
|
"sizes": "128x128"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/144.png",
|
||||||
|
"sizes": "144x144"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/152.png",
|
||||||
|
"sizes": "152x152"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/167.png",
|
||||||
|
"sizes": "167x167"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/180.png",
|
||||||
|
"sizes": "180x180"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/192.png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/256.png",
|
||||||
|
"sizes": "256x256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/512.png",
|
||||||
|
"sizes": "512x512"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "ios/1024.png",
|
||||||
|
"sizes": "1024x1024"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 5.9 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 763 B |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 1014 B |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 895 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 895 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 4.0 KiB |