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 |