diff --git a/.codacy.yml b/.codacy.yml index c65fe93..061958b 100644 --- a/.codacy.yml +++ b/.codacy.yml @@ -12,6 +12,6 @@ engines: languages: css: extensions: - - '.scss' + - ".scss" exclude_paths: - - "Public/assets/css/**" \ No newline at end of file + - "public/assets/css/**" diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e4b0485..7bc0796 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -4,14 +4,14 @@ about: Create a report to help us improve title: Bug/Issue Report labels: bug, security, enhancement assignees: axtonprice - --- **Describe the bug** -A clear and concise description of what the bug is. Do not submit bug report if you are not using the latest QuickBlaze version! +A clear and concise description of what the bug is. Do not submit bug report if you are not using the latest OneView version! **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -24,15 +24,17 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] + +- OS: [e.g. iOS] +- Browser [e.g. chrome, safari] +- Version [e.g. 22] **Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] + +- Device: [e.g. iPhone6] +- OS: [e.g. iOS8.1] +- Browser [e.g. stock browser, safari] +- Version [e.g. 22] **Additional context** Add any other context about the problem here. diff --git a/.github/media/favicon-256x256.png b/.github/media/favicon-256x256.png new file mode 100644 index 0000000..d40f75e Binary files /dev/null and b/.github/media/favicon-256x256.png differ diff --git a/.github/media/screenshot.png b/.github/media/screenshot.png new file mode 100644 index 0000000..d83f658 Binary files /dev/null and b/.github/media/screenshot.png differ diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 8966511..cef7a42 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -3,8 +3,8 @@ # This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging. # # Source repository: https://github.com/actions/dependency-review-action -# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement -name: 'Dependency Review' +# public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement +name: "Dependency Review" on: [pull_request] permissions: @@ -14,7 +14,7 @@ jobs: dependency-review: runs-on: ubuntu-latest steps: - - name: 'Checkout Repository' + - name: "Checkout Repository" uses: actions/checkout@v3 - - name: 'Dependency Review' + - name: "Dependency Review" uses: actions/dependency-review-action@v1 diff --git a/.gitignore b/.gitignore index 3eb1af3..7c4580f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,15 +4,11 @@ .gitattributes .dccache -# QuickBlaze Security -local-storage -Modules/Database.env -.config +# OneView Security +local +local/database.json +config.json -# QuickBlaze Composer +# OneView Composer vendor/ -composer.lock - -# Docker (Unreleased) -Dockerfile -.dockerignore +composer.lock \ No newline at end of file diff --git a/.htaccess b/.htaccess deleted file mode 100644 index 36c1a8b..0000000 --- a/.htaccess +++ /dev/null @@ -1,16 +0,0 @@ -# URL handling -RewriteEngine on -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule ^.* index.php [L,QSA] - -# Error handling -ErrorDocument 404 /404 -ErrorDocument 403 /403 -ErrorDocument 500 /500 - -# File security - -Order allow,deny -Deny from all - \ No newline at end of file diff --git a/.security-scan b/.security-scan index 378cfc2..7a6e645 100644 --- a/.security-scan +++ b/.security-scan @@ -753,7 +753,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -779,7 +779,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -796,7 +796,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -813,7 +813,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -830,7 +830,7 @@ "id": 3, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -847,7 +847,7 @@ "id": 4, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -864,7 +864,7 @@ "id": 5, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -881,7 +881,7 @@ "id": 6, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -898,7 +898,7 @@ "id": 7, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -915,7 +915,7 @@ "id": 8, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -962,7 +962,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -988,7 +988,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1005,7 +1005,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1052,7 +1052,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1078,7 +1078,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1095,7 +1095,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1143,7 +1143,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1169,7 +1169,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1186,7 +1186,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1203,7 +1203,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1255,7 +1255,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1281,7 +1281,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1298,7 +1298,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1315,7 +1315,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1367,7 +1367,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1393,7 +1393,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1410,7 +1410,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1427,7 +1427,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1444,7 +1444,7 @@ "id": 3, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1461,7 +1461,7 @@ "id": 4, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1478,7 +1478,7 @@ "id": 5, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1530,7 +1530,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1556,7 +1556,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1573,7 +1573,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1590,7 +1590,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1607,7 +1607,7 @@ "id": 3, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1624,7 +1624,7 @@ "id": 4, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1641,7 +1641,7 @@ "id": 5, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1658,7 +1658,7 @@ "id": 6, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1710,7 +1710,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1736,7 +1736,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1753,7 +1753,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1770,7 +1770,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1787,7 +1787,7 @@ "id": 3, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1804,7 +1804,7 @@ "id": 4, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1821,7 +1821,7 @@ "id": 5, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1838,7 +1838,7 @@ "id": 6, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1855,7 +1855,7 @@ "id": 7, "physicalLocation": { "artifactLocation": { - "uri": "Modules/functions.php", + "uri": "local/functions.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1907,7 +1907,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1933,7 +1933,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1950,7 +1950,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1967,7 +1967,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -1984,7 +1984,7 @@ "id": 3, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2001,7 +2001,7 @@ "id": 4, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2018,7 +2018,7 @@ "id": 5, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2035,7 +2035,7 @@ "id": 6, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2052,7 +2052,7 @@ "id": 7, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2069,7 +2069,7 @@ "id": 8, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2086,7 +2086,7 @@ "id": 9, "physicalLocation": { "artifactLocation": { - "uri": "Public/dataProcessing.php", + "uri": "public/DataIngest.php", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2138,7 +2138,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2164,7 +2164,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2181,7 +2181,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2198,7 +2198,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2215,7 +2215,7 @@ "id": 3, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2232,7 +2232,7 @@ "id": 4, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2249,7 +2249,7 @@ "id": 5, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2266,7 +2266,7 @@ "id": 6, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2283,7 +2283,7 @@ "id": 7, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2300,7 +2300,7 @@ "id": 8, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2317,7 +2317,7 @@ "id": 9, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2334,7 +2334,7 @@ "id": 10, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2351,7 +2351,7 @@ "id": 11, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2368,7 +2368,7 @@ "id": 12, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2424,7 +2424,7 @@ { "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2450,7 +2450,7 @@ "id": 0, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2467,7 +2467,7 @@ "id": 1, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2484,7 +2484,7 @@ "id": 2, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2501,7 +2501,7 @@ "id": 3, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2518,7 +2518,7 @@ "id": 4, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2535,7 +2535,7 @@ "id": 5, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2552,7 +2552,7 @@ "id": 6, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2569,7 +2569,7 @@ "id": 7, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2586,7 +2586,7 @@ "id": 8, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2603,7 +2603,7 @@ "id": 9, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { @@ -2620,7 +2620,7 @@ "id": 10, "physicalLocation": { "artifactLocation": { - "uri": "Public/assets/js/formContentUpdate.js", + "uri": "public/assets/js/formHandler.js", "uriBaseId": "%SRCROOT%" }, "region": { diff --git a/.version b/.version deleted file mode 100644 index 6ebc16f..0000000 --- a/.version +++ /dev/null @@ -1 +0,0 @@ -{ "BRANCH": "main", "VERSION":"1.1.15" } \ No newline at end of file diff --git a/LICENSE b/LICENSE index 74546cf..545f5bb 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2022 axtonprice, QuickBlaze +Copyright (c) 2026 axtonprice Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file +SOFTWARE. diff --git a/Modules/.htaccess b/Modules/.htaccess deleted file mode 100644 index 3418e55..0000000 --- a/Modules/.htaccess +++ /dev/null @@ -1 +0,0 @@ -deny from all \ No newline at end of file diff --git a/Modules/Database_example.env b/Modules/Database_example.env deleted file mode 100644 index 0e551e1..0000000 --- a/Modules/Database_example.env +++ /dev/null @@ -1,6 +0,0 @@ -{ - "HOSTNAME": "", - "USERNAME": "", - "PASSWORD": "", - "DATABASE": "" -} diff --git a/Modules/functions.php b/Modules/functions.php deleted file mode 100644 index b41df9a..0000000 --- a/Modules/functions.php +++ /dev/null @@ -1,312 +0,0 @@ - $latestVersion["BRANCH"], "VERSION" => $latestVersion["VERSION"], "LANGUAGE" => "auto"))); - } - $thisVersion = json_decode(file_get_contents("./.version", true), true); - $latestVersion = json_decode(file_get_contents("https://raw.githubusercontent.com/arizon-dev/quickblaze-encrypt/" . filter_var(htmlspecialchars($thisVersion["BRANCH"]), FILTER_SANITIZE_FULL_SPECIAL_CHARS) . "/.version?cacheUpdate=" . rand(0, 100), true), true); - if ($thisVersion["BRANCH"] == "dev" && $thisVersion["VERSION"] != $latestVersion["VERSION"]) { - return 'v' . $thisVersion["VERSION"] . ' (' . translate("Unreleased") . '!)'; - } else { - if ($thisVersion["BRANCH"] == "main" && $thisVersion["VERSION"] != $latestVersion["VERSION"]) { - return 'v' . $thisVersion["VERSION"] . ' (' . translate("Outdated") . '!)'; - } else { - return 'v' . $thisVersion["VERSION"] . ''; - } - } -} -function generateKey($length) -{ - $length = 16; - $bytes = openssl_random_pseudo_bytes($length); - $hex = bin2hex($bytes); - return $hex; -} - -/* Data Conversion Functions */ -function encryptData($data, $encryption_key) -{ - $encryption_iv = hex2bin($encryption_key); - return openssl_encrypt($data, "AES-128-CTR", $encryption_key, 0, $encryption_iv); -} -function decryptData($encryption_key) -{ - $encryption_iv = hex2bin($encryption_key); - return openssl_decrypt(getRecord("encrypted_contents", $encryption_key), "AES-128-CTR", $encryption_key, 0, $encryption_iv); -} - -/* System Setup & Checking Functions */ -function initialiseSystem() -{ - function createStorageMethodEndpoints() - { - if (!is_dir("./local-storage/")) mkdir("./local-storage/"); // Create storage folder if not present - if (!file_exists("./local-storage/.cache")) touch("./local-storage/.cache"); // Create cache file if not present - if (!file_exists("./.config")) touch("./.config"); // Create config file if not present - } - function checkConfigValues() - { - $configuration = json_decode(file_get_contents("./.config", true), true); - - /* Config File Variables */ - if ($configuration["STORAGE_METHOD"] == "") { - $TEMP_STORAGE_METHOD = "mysql"; // Reset configuration to default value - } else { - $TEMP_STORAGE_METHOD = $configuration["STORAGE_METHOD"]; - } - if ($_SERVER["SERVER_PORT"] == "80" || $_SERVER["SERVER_PORT"] == "443") { - $TEMP_PATH = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; - $TEMP_PATH .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]; - $TEMP_PATH = rtrim($TEMP_PATH, '/'); // Remove last slash from the new URL - } else { // Webserver is using a custom port! - $TEMP_PATH = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://"; - $TEMP_PATH .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"]; - $TEMP_PATH = rtrim($TEMP_PATH, '/'); // Remove last slash from the new URL - } - if ($configuration["LANGUAGE"] == "") { - $TEMP_LANGUAGE = "auto"; // Reset configuration to default value - } else { - $TEMP_LANGUAGE = $configuration["LANGUAGE"]; - } - if ($configuration["DEBUG_MODE"] == "") { - $TEMP_DEBUGMODE = "false"; // Reset configuration to default value - } else { - $TEMP_DEBUGMODE = $configuration["DEBUG_MODE"]; - } - - /* Config File If Empty Validation*/ - if ($configuration["STORAGE_METHOD"] == "") { - file_put_contents("./.config", json_encode(array("STORAGE_METHOD" => "$TEMP_STORAGE_METHOD", "LANGUAGE" => "$TEMP_LANGUAGE", "INSTALLATION_PATH" => "$TEMP_PATH", "DEBUG_MODE" => "$TEMP_DEBUGMODE"))); // Set contents of new config file - } - if ($configuration["INSTALLATION_PATH"] == "") { - file_put_contents("./.config", json_encode(array("STORAGE_METHOD" => "$TEMP_STORAGE_METHOD", "LANGUAGE" => "$TEMP_LANGUAGE", "INSTALLATION_PATH" => "$TEMP_PATH", "DEBUG_MODE" => "$TEMP_DEBUGMODE"))); // Set contents of new config file - } - if ($configuration["LANGUAGE"] == "") { - file_put_contents("./.config", json_encode(array("STORAGE_METHOD" => "$TEMP_STORAGE_METHOD", "LANGUAGE" => "$TEMP_LANGUAGE", "INSTALLATION_PATH" => "$TEMP_PATH", "DEBUG_MODE" => "$TEMP_DEBUGMODE"))); // Set contents of new config file - } - if ($configuration["DEBUG_MODE"] == "") { - file_put_contents("./.config", json_encode(array("STORAGE_METHOD" => "$TEMP_STORAGE_METHOD", "LANGUAGE" => "$TEMP_LANGUAGE", "INSTALLATION_PATH" => "$TEMP_PATH", "DEBUG_MODE" => "$TEMP_DEBUGMODE"))); // Set contents of new config file - } - } - function setupStorageMethod() - { - $cache = json_decode(file_get_contents("./local-storage/.cache", true), true); - $configuration = json_decode(file_get_contents("./.config", true), true); - - if (strtolower($configuration["STORAGE_METHOD"]) == "mysql") { - if (!file_exists("./Modules/Database.env")) { - touch("./Modules/Database.env"); // Create database configuration file - require "./Public/error_docs/DatabaseConfig.php"; - die(); - } else { - $json = json_decode(file_get_contents("./Modules/Database.env", true), true); - if ($json["DATABASE"] == "" || $json["HOSTNAME"] == "") { - require "./Public/error_docs/DatabaseConfig.php"; - die(); - } else { // Test database connection - $conn = new mysqli($json["HOSTNAME"], $json["USERNAME"], $json["PASSWORD"], $json["DATABASE"]); - if ($conn->connect_error) { - require "./Public/error_docs/DatabaseCredentials.php"; // throw error page if invalid credentials - die(); - } else { - $cache = json_decode(file_get_contents("./local-storage/.cache"), true); - if ($cache["DO-NOT-TOUCH:database_installation_status"] == "false" || !isset($cache["DO-NOT-TOUCH:database_installation_status"])) { - $tableCreateSQL = "CREATE TABLE IF NOT EXISTS `quickblaze_records` (`record_id` int(11) NOT NULL, `encrypted_contents` longtext NOT NULL, `encryption_token` varchar(128) NOT NULL, `source_ip` varchar(100) NOT NULL, `record_date` timestamp(5) NOT NULL DEFAULT current_timestamp(5)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"; - $addPrimaryKeySQL = "ALTER TABLE `quickblaze_records` ADD PRIMARY KEY (`record_id`);"; - if ($conn->query($tableCreateSQL)) { - if ($conn->query($addPrimaryKeySQL)) { - file_put_contents("./local-storage/.cache", '{"DO-NOT-TOUCH:database_installation_status": "true"}'); - } - } else { - require "./Public/error_docs/DatabaseCredentials.php"; // throw error page if invalid credentials - die(); - } - } - // Always reset auto-increment - if (!$conn->query("ALTER TABLE `quickblaze_records` MODIFY `record_id` int(11) NOT NULL AUTO_INCREMENT;")) { - require "./Public/error_docs/DatabaseConfig.php"; // throw error page if invalid credentials - die(); - } - } - $conn->close(); - } - } - } else if (strtolower($configuration["STORAGE_METHOD"]) == "filetree") { - $baseStorageFolder = "./local-storage"; - if (!is_dir("$baseStorageFolder/")) mkdir("$baseStorageFolder/"); - if (!is_dir("$baseStorageFolder/encryptions/")) mkdir("$baseStorageFolder/encryptions/"); - } else { // Server storage method not set - require "./Public/error_docs/ServerConfiguration.php"; // throw error page if invalid configuration - die(); - } - } - - /* Call Functions */ - createStorageMethodEndpoints(); // Setup files and folders the system will store data. - checkConfigValues(); // Validate if configuration values are correct & present. - setupStorageMethod(); // Setup how the system will store the data via the configured method. - /* End Functions */ -} - -/* Database Interaction Functions */ -function insertRecord($encrypted_contents, $encryption_token) -{ - $configuration = json_decode(file_get_contents("./.config", true), true); - $json = json_decode(file_get_contents("./Modules/Database.env", true), true); - if ($_SERVER['HTTP_CF_CONNECTING_IP'] == "" || !isset($_SERVER['HTTP_CF_CONNECTING_IP'])) $_SERVER['HTTP_CF_CONNECTING_IP'] = $_SERVER["REMOTE_ADDR"]; - if (strtolower($configuration["STORAGE_METHOD"]) == "mysql") { - $mysqli = new mysqli($json["HOSTNAME"], $json["USERNAME"], $json["PASSWORD"], $json["DATABASE"]); - if ($mysqli->connect_errno) { - require "./Public/error_docs/DatabaseCredentials.php"; - die(); - } - $source_ip = filter_var($_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP) ?? filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP); - $record_date = date("Y-m-d H:i:s"); - if ($mysqli->query("INSERT INTO `quickblaze_records` (`encrypted_contents`, `encryption_token`, `source_ip`, `record_date`) VALUES ('$encrypted_contents', '$encryption_token', '$source_ip', '$record_date');") === TRUE) { - return true; - } else { - die($mysqli->error); - } - $mysqli->close(); - } elseif (strtolower($configuration["STORAGE_METHOD"]) == "filetree") { - $baseStorageFolder = "./local-storage"; - $uniqueIdentifier = uniqid($encryption_token); // Assign ID to new storage folder - if (!is_dir("$baseStorageFolder/encryptions/$uniqueIdentifier/")) mkdir("$baseStorageFolder/encryptions/$uniqueIdentifier/"); // Create temporary unique folder with ID - if (!file_exists("$baseStorageFolder/encryptions/$uniqueIdentifier/data.json")) touch("$baseStorageFolder/encryptions/$uniqueIdentifier/data.json"); // Create encryption data file - $source_ip = filter_var($_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP) ?? filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP); - $record_date = date("Y-m-d H:i:s"); - file_put_contents("$baseStorageFolder/encryptions/$uniqueIdentifier/data.json", '{"filestore_id": "' . $uniqueIdentifier . '", "encrypted_contents": "' . $encrypted_contents . '", "encryption_token": "' . $encryption_token . '", "source_ip": "' . $source_ip . '", "record_date": "' . $record_date . '"}'); // Set data file encryption data - } else { - require "./Public/error_docs/ServerConfiguration.php"; // throw error page if invalid configuration - die(); - } -} -function destroyRecord($token) -{ - $configuration = json_decode(file_get_contents("./.config", true), true); - $json = json_decode(file_get_contents("./Modules/Database.env", true), true); - if (strtolower($configuration["STORAGE_METHOD"]) == "mysql") { - $mysqli = new mysqli($json["HOSTNAME"], $json["USERNAME"], $json["PASSWORD"], $json["DATABASE"]); - if ($mysqli->connect_errno) { - require "./Public/error_docs/DatabaseCredentials.php"; - die(); - } - $token = filter_var($token, FILTER_SANITIZE_FULL_SPECIAL_CHARS); - if ($mysqli->query("DELETE FROM `quickblaze_records` WHERE `encryption_token` = '$token';") === TRUE) { - return true; - } else { - die($mysqli->error); - } - $mysqli->close(); - } elseif (strtolower($configuration["STORAGE_METHOD"]) == "filetree") { - $baseStorageFolder = "./local-storage"; - $dir = new DirectoryIterator("$baseStorageFolder/encryptions/"); - foreach ($dir as $fileinfo) { - if ($fileinfo->isDir() && !$fileinfo->isDot()) { // $fileinfo->getFilename() - $theFile = json_decode(file_get_contents("$baseStorageFolder/encryptions/" . $fileinfo->getFilename() . "/data.json", true), true); - if ($theFile["encryption_token"] == $token) { - function rmdir_recursive($dir) - { - foreach (scandir($dir) as $file) { - if ('.' === $file || '..' === $file) continue; - if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file"); - else unlink("$dir/$file"); - } - rmdir($dir); - } - rmdir_recursive("$baseStorageFolder/encryptions/" . $fileinfo->getFilename()); - } - } - } - } else { // Server storage method not set - require "./Public/error_docs/ServerConfiguration.php"; // throw error page if invalid configuration - die(); - } -} -function getRecord($dataToFetch, $encryption_token) -{ - $configuration = json_decode(file_get_contents("./.config", true), true); - $json = json_decode(file_get_contents("./Modules/Database.env", true), true); - if (strtolower($configuration["STORAGE_METHOD"]) == "mysql") { - $mysqli = new mysqli($json["HOSTNAME"], $json["USERNAME"], $json["PASSWORD"], $json["DATABASE"]); - if ($mysqli->connect_errno) { - require "./Public/error_docs/DatabaseCredentials.php"; - die(); - } - $encryption_token = filter_var($encryption_token, FILTER_SANITIZE_FULL_SPECIAL_CHARS); - $result = $mysqli->query("SELECT `$dataToFetch` FROM `quickblaze_records` WHERE `encryption_token` = '$encryption_token'"); - if ($result->num_rows > 0) { - while ($row = $result->fetch_assoc()) { - return $row[$dataToFetch]; - } - } else { - return false; - } - $mysqli->close(); - } elseif (strtolower($configuration["STORAGE_METHOD"]) == "filetree") { - $baseStorageFolder = "./local-storage"; - $dir = new DirectoryIterator("$baseStorageFolder/encryptions/"); - foreach ($dir as $fileinfo) { - if ($fileinfo->isDir() && !$fileinfo->isDot()) { // $fileinfo->getFilename() - $theFile = json_decode(file_get_contents("$baseStorageFolder/encryptions/" . $fileinfo->getFilename() . "/data.json", true), true); - if ($theFile["encryption_token"] == $encryption_token) { - return $theFile[$dataToFetch]; - } - } - } - } else { // Server storage method not set - require "./Public/error_docs/ServerConfiguration.php"; // throw error page if invalid configuration - die(); - } -} - -/* Translation Feature */ -function translate($q) -{ - $lang = "en"; // Default language - $configuration = json_decode(file_get_contents("./.config", true), true); - if ($configuration["LANGUAGE"] == "auto") { - $tl = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); - } else if ($configuration["LANGUAGE"] != "") { - $tl = $configuration["LANGUAGE"]; - } else { - $tl = "en"; - } - $res = file_get_contents("https://clients5.google.com/translate_a/t?client=dict-chrome-ex&sl=" . $lang . "&tl=" . $tl . "&q=" . urlencode($q), $_SERVER['DOCUMENT_ROOT'] . "/transes.html"); - $res = json_decode($res); - return $res[0]; -} diff --git a/Public/assets/css/error.css b/Public/assets/css/error.css deleted file mode 100644 index 9b87b8b..0000000 --- a/Public/assets/css/error.css +++ /dev/null @@ -1,95 +0,0 @@ -@import url("https://fonts.googleapis.com/css?family=Lato"); - -* { - position: relative; - margin: 0; - padding: 0; - box-sizing: border-box; - font-family: "Lato", sans-serif; -} - -body { - height: 100vh; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; -} - -h1 { - margin: 40px 0 20px; -} - -.lock { - border-radius: 5px; - width: 55px; - height: 45px; - background-color: #333; - animation: dip 1s; - animation-delay: 1.5s; -} - -.lock::before, -.lock::after { - content: ""; - position: absolute; - border-left: 5px solid #333; - height: 20px; - width: 15px; - left: calc(50% - 12.5px); -} - -.lock::before { - top: -30px; - border: 5px solid #333; - border-bottom-color: transparent; - border-radius: 15px 15px 0 0; - height: 30px; - animation: lock 2s, spin 2s; -} - -.lock::after { - top: -10px; - border-right: 5px solid transparent; - animation: spin 2s; -} - -@keyframes lock { - 0% { - top: -45px; - } - - 65% { - top: -45px; - } - - 100% { - top: -30px; - } -} - -@keyframes spin { - 0% { - transform: scaleX(-1); - left: calc(50% - 30px); - } - - 65% { - transform: scaleX(1); - left: calc(50% - 12.5px); - } -} - -@keyframes dip { - 0% { - transform: translateY(0px); - } - - 50% { - transform: translateY(10px); - } - - 100% { - transform: translateY(0px); - } -} \ No newline at end of file diff --git a/Public/assets/css/style.css b/Public/assets/css/style.css deleted file mode 100644 index 8b8fb98..0000000 --- a/Public/assets/css/style.css +++ /dev/null @@ -1,134 +0,0 @@ -html, -body { - height: 100%; -} - -body { - display: flex; - align-items: center; - padding-top: 40px; - padding-bottom: 40px; -} - -textarea { - width: 300px; - height: 150px; -} - -.submit-button { - width: 35%; - margin-top: 20px; -} - -.main-form { - width: 100%; - max-width: 600px; - padding: 15px; - margin: auto; -} - -.main-form .checkbox { - font-weight: 400; -} - -.main-form .form-icon { - padding-bottom: 15px; - --fa-animation-duration: 3.5s -} - -.main-form .form-floating:focus-within { - z-index: 2; -} - -.no-decoration { - text-decoration: none; -} - -/* The snackbar - position it at the bottom and in the middle of the screen */ -#snackbar, -#snackbarError { - visibility: hidden; - /* Hidden by default. Visible on click */ - min-width: 250px; - /* Set a default minimum width */ - margin-left: -125px; - /* Divide value of min-width by 2 */ - background-color: #333; - /* Black background color */ - color: #fff; - /* White text color */ - text-align: center; - /* Centered text */ - border-radius: 2px; - /* Rounded borders */ - padding: 16px; - /* Padding */ - position: fixed; - /* Sit on top of the screen */ - z-index: 1; - /* Add a z-index if needed */ - left: 50%; - /* Center the snackbar */ - bottom: 30px; - /* 30px from the bottom */ -} - -/* Show the snackbar when clicking on a button (class added with JavaScript) */ -#snackbar.show, -#snackbarError.show { - visibility: visible; - /* Show the snackbar */ - /* Add animation: Take 0.5 seconds to fade in and out the snackbar. - However, delay the fade out process for 2.5 seconds */ - -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s; - animation: fadein 0.5s, fadeout 0.5s 2.5s; -} - -/* Animations to fade the snackbar in and out */ -@-webkit-keyframes fadein { - from { - bottom: 0; - opacity: 0; - } - - to { - bottom: 30px; - opacity: 1; - } -} - -@keyframes fadein { - from { - bottom: 0; - opacity: 0; - } - - to { - bottom: 30px; - opacity: 1; - } -} - -@-webkit-keyframes fadeout { - from { - bottom: 30px; - opacity: 1; - } - - to { - bottom: 0; - opacity: 0; - } -} - -@keyframes fadeout { - from { - bottom: 30px; - opacity: 1; - } - - to { - bottom: 0; - opacity: 0; - } -} \ No newline at end of file diff --git a/Public/assets/img/favicon-1000x1000.png b/Public/assets/img/favicon-1000x1000.png deleted file mode 100644 index a904f38..0000000 Binary files a/Public/assets/img/favicon-1000x1000.png and /dev/null differ diff --git a/Public/assets/img/favicon-100x100.png b/Public/assets/img/favicon-100x100.png deleted file mode 100644 index c00a0e5..0000000 Binary files a/Public/assets/img/favicon-100x100.png and /dev/null differ diff --git a/Public/assets/img/favicon-255x255.png b/Public/assets/img/favicon-255x255.png deleted file mode 100644 index d2486e0..0000000 Binary files a/Public/assets/img/favicon-255x255.png and /dev/null differ diff --git a/Public/assets/img/favicon-500x500.png b/Public/assets/img/favicon-500x500.png deleted file mode 100644 index ba06f86..0000000 Binary files a/Public/assets/img/favicon-500x500.png and /dev/null differ diff --git a/Public/assets/img/favicon-50x50.png b/Public/assets/img/favicon-50x50.png deleted file mode 100644 index 663ce5f..0000000 Binary files a/Public/assets/img/favicon-50x50.png and /dev/null differ diff --git a/Public/assets/js/autoConfigurationChecks.js b/Public/assets/js/autoConfigurationChecks.js deleted file mode 100644 index 8c8cdf6..0000000 --- a/Public/assets/js/autoConfigurationChecks.js +++ /dev/null @@ -1,12 +0,0 @@ -function autoRecheckConfig(pageName) { - fetch(`dataProcessing?action=checkConfig`).then(response => response.json()).then(data => { - log(`[RE-CHECK] Server responded with ${data.response}`); - if(data.response == "true"){ - window.location.replace("./"); - } - }); - setTimeout(autoRecheckConfig, 3000); -} -var path = window.location.pathname; -var page = path.split("/").pop(); -autoRecheckConfig(page); \ No newline at end of file diff --git a/Public/assets/js/buttonCopyURL.js b/Public/assets/js/buttonCopyURL.js deleted file mode 100644 index 3f3892f..0000000 --- a/Public/assets/js/buttonCopyURL.js +++ /dev/null @@ -1,16 +0,0 @@ -function copyToClipboard(element) { - let $temp = $(''); - $('body').append($temp); - $temp.val($(element).text()).select(); - document.execCommand('copy'); - showSnackBar('snackbar'); // show snackbar notification - log(`Copied text to clipboard`); - $temp.remove(); -} - -function showSnackBar(snackbarId) { - var element = document.getElementById(`${snackbarId}`); - element.className = element.className.replace('', 'show'); - log(`Displaying snackbar for ${3000}ms`); - setTimeout(function () { element.className = element.className.replace("show", ""); }, 3000); -} \ No newline at end of file diff --git a/Public/assets/js/formContentUpdate.js b/Public/assets/js/formContentUpdate.js deleted file mode 100644 index 6ae3357..0000000 --- a/Public/assets/js/formContentUpdate.js +++ /dev/null @@ -1,53 +0,0 @@ -function updateFormDisplay() { - const formvalue = document.getElementById('inputtextbot').value; // Assign variable to the current value of the textbox - $('#form_input').fadeOut('fast'); // fade out previous content - log(`No longer showing 'form_input' element`); - function fetchData() { - return fetch(`dataProcessing?action=submit&data=${formvalue}`) - .then((response) => response.json()) - .then((responseData) => { - return responseData; - }).catch(error => log(error, 'warn')); - } - fetchData().then(data => { - log(`Server responsed with '${data.response}'`); - document.getElementById('submissiontextbox').value = `${window.location}view?key=${data.response}`; // Set text box to view message URL - log(`Updated 'submissiontextbox.value'`); - document.getElementById('submissiontextbox').innerHTML = `${window.location}view?key=${data.response}`; // Set text box to view message URL - log(`Updated 'submissiontextbox.innerHTML'`); - }); - setTimeout(() => { - $('#form_submission').fadeIn('fast'); // fade in new content - log(`Now showing 'form_submission' element`); - }, 200); -} - -function updateViewDisplay() { - $('#form_confirmation').fadeOut('fast'); // fade out previous content - log(`No longer showing 'form_confirmation' element`); - - let key = new URL(window.location).searchParams.get('key'); // Get key variable from URL; replacing PHP usage - log(`Got key variable from url -> ${key}`); - - fetch(`dataProcessing?action=decrypt&key=${key}`).then(response => response.json()).then(data => { - if (!data.response) { - showSnackBar('snackbarError'); - $('#form_error').fadeIn('fast'); // fade in new content - log(`Now showing 'form_error' element`); - log(`Encryption not found; redirecting in 2s`); - setTimeout(() => { - window.location.replace('./'); // Redirect to home page - }, 2000); - } else { - document.getElementById('valuetextbox').value = data.response; // Set text box to decrypted message - log(`Updated 'valuetextbox.value'`); - document.getElementById('valuetextbox').innerHTML = data.response; // Set text box to decrypted message - log(`Updated 'valuetextbox.innerHTML'`); - setTimeout(() => { - $('#form_content').fadeIn('fast'); // fade in new content - log(`Now showing 'form_content' element`); - }, 200); - log(`Server responded with '${data.response}'`); - }; - }); -} \ No newline at end of file diff --git a/Public/assets/js/globalFunctions.js b/Public/assets/js/globalFunctions.js deleted file mode 100644 index 78c9c32..0000000 --- a/Public/assets/js/globalFunctions.js +++ /dev/null @@ -1,46 +0,0 @@ -document.addEventListener('DOMContentLoaded', function () { - fetch(`dataProcessing?action=isDebugMode`).then(response => response.json()).then(data => { - if (data.response == "false") { - console.log( - `[${moment().format('hh:mm:ss')}] [Initialisation/DEBUG] Debug mode is disabled!` - ); - } - }); - log(`${moment()}`, `Initialisation/DEBUG`); - log(`Successfully loaded all assets`, `Initialisation/DEBUG`); -}, false); - -function addDarkmodeWidget() { - const options = { - time: '0.0s', // default: '0.3s' - saveInCookies: true, // default: true, - label: '🌛', // default: '' - } - const darkmode = new Darkmode(options); - darkmode.showWidget(); -} -document.addEventListener('DOMContentLoaded', function () { - addDarkmodeWidget(); log(`Initialized darkmode widget`, `Initialisation/DEBUG`); -}) - -function log(content, type = null) { - fetch(`dataProcessing?action=isDebugMode`).then(response => response.json()).then(data => { - if (data.response == "true") { - if (!type) { - console.log( - `[${moment().format('hh:mm:ss')}] [Site Debug/INFO] ${content}` - ); - } else { - if(type == "warn"){ - console.warn( - `[${moment().format('hh:mm:ss')}] ${content}` - ); - } else{ - console.log( - `[${moment().format('hh:mm:ss')}] [${type}] ${content}` - ); - } - } - } - }); -} diff --git a/Public/dataProcessing.php b/Public/dataProcessing.php deleted file mode 100644 index b65356f..0000000 --- a/Public/dataProcessing.php +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - "> - QuickBlaze - - - - - - - - -
- -
-

-

-
- - - - - - - - - - - \ No newline at end of file diff --git a/Public/error_docs/404.php b/Public/error_docs/404.php deleted file mode 100644 index 49d0016..0000000 --- a/Public/error_docs/404.php +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - "> - QuickBlaze - - - - - - - - - -
-

404

-
-
- -

- GitHub • - Discord • - -

-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/Public/error_docs/500.php b/Public/error_docs/500.php deleted file mode 100644 index 184ea23..0000000 --- a/Public/error_docs/500.php +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - "> - QuickBlaze - - - - - - - - - -
-

500

-
-
- -

- GitHub • - Discord • - -

-
- - - - - - - - - - - \ No newline at end of file diff --git a/Public/error_docs/DatabaseConfig.php b/Public/error_docs/DatabaseConfig.php deleted file mode 100644 index 8df484f..0000000 --- a/Public/error_docs/DatabaseConfig.php +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - "> - QuickBlaze - - - - - - - - - -
-
- -
-
-

-
-
-

- -
-

- GitHub • - Discord • - -

-
- - - - - - - - - - - \ No newline at end of file diff --git a/Public/error_docs/DatabaseCredentials.php b/Public/error_docs/DatabaseCredentials.php deleted file mode 100644 index 9835827..0000000 --- a/Public/error_docs/DatabaseCredentials.php +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - "> - QuickBlaze - - - - - - - - - -
-
- -
-
-

-
-
-

- -
- -

- GitHub • - Discord • - -

-
- - - - - - - - - - - \ No newline at end of file diff --git a/Public/error_docs/ServerConfiguration.php b/Public/error_docs/ServerConfiguration.php deleted file mode 100644 index a546b96..0000000 --- a/Public/error_docs/ServerConfiguration.php +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - "> - QuickBlaze - - - - - - - - - -
-
- -
-
-

-
-
-

- -
-

- GitHub • - Discord • - -

-
- - - - - - - - - - - - \ No newline at end of file diff --git a/Public/index.php b/Public/index.php deleted file mode 100644 index 05ff223..0000000 --- a/Public/index.php +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - "> - QuickBlaze - - - - - - - - - -
-
- QuickBlaze Encrypt -

QuickBlaze

-
One time view encrypted message sharing system
-

- - -
- -
- -
- - - -

- GitHub • - Discord • - -

- -
-
- - -
- - - - - - - - - - - - - \ No newline at end of file diff --git a/Public/view.php b/Public/view.php deleted file mode 100644 index 030913d..0000000 --- a/Public/view.php +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - "> - QuickBlaze - - - - - - - - - -
-
- QuickBlaze Encrypt -

QuickBlaze

-
-

- - -
-
- -
- -
- - - - - -

- GitHub • - Discord • - -

- -
-
- - -
✅
-
- - - - - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index 7766ded..72b3387 100644 --- a/README.md +++ b/README.md @@ -1,92 +1,98 @@ -

QuickBlaze Encryption 👋

+

+ +

+ +

OneView

+

Encrypted Message Sharing

- GitHub release (latest by date) - - License: MIT + + Latest release - - - Discord: axtonprice + + MIT License

-> An extremely simple, one-time view encryption system. Send links anywhere on the internet, and the encrypted message will automatically be destroyed after being viewed once! +> A small, self-hosted service for sharing encrypted messages through links that can only be viewed once. Available in all languages, provided by Google Translate. -### ✨ Click to view Demo +**Demo:** [oneview.arizon.dev](https://oneview.arizon.dev) + +

+ +

+ +## How it works + +Write a message and OneView creates a link containing a randomly generated decryption key. Messages are encrypted with AES-128-GCM before storage. The message is returned when the recipient opens it, then its stored record is deleted. Messages are limited to **10,000 bytes**. + +The link is a bearer secret: anyone who gets it can view the message. Use HTTPS and share links only through trusted channels. ## Requirements -- Accessible webserver with PHP support. -- PHP v7 or higher. -- PHP [MBSTRING](http://php.net/manual/en/book.mbstring.php) module for full UTF-8 support. -- PHP [JSON](http://php.net/manual/en/book.json.php) module for JSON manipulation - -## Installation - -1. Download the latest version from the releases page. -2. Upload and extract the contents to your web server. You can also pull the repo with `git pull`. -3. Visit your domain installation directory or subdomain https://example.com/quickblaze-encrypt/ - -#### Extra: *If using MYSQL as storage method:* - - -⚠️ *Don't delete the `.version`, `.config`, or `.cache` files once the installation has completed! They contain necessary version data, configuration data; removing them **will** cause issues!* - -## System Configurations -Example configuration layout of `Modules/Database.env`: -```json -{ - "HOSTNAME": "mysql.example.com", - "USERNAME": "admin", - "PASSWORD": "admin123", - "DATABASE": "quickblaze_db" -} -``` -Example configuration of `.config`: -```json -{ - "STORAGE_METHOD": "mysql", - "LANGUAGE": "en", - "INSTALLATION_PATH": "https://your-site.dev/quickblaze-encrypt" -} -``` -⚠️ *Do not include a trailing slash for the installation path!* - -## How it Works - -The user enters the message they would like to encrypt. The system then securely encrypts the message and generates, and returns, an encryption key integrated into a shareable URL. *The key can be used to decrypt the encrypted message.* The system then creates a new record via the chosen storage method, containing the encrypted data and the encryption key. As soon as the decryption function is called upon, the encryption record will automatically be deleted. This means the encrypted data is now permanently lost and cannot be viewed or accessed. -

-⚠️ *Keep your URL safe, it contains the encryption key! Exposing the URL means anybody will be able to view the encrypted message!* - -## Screenshots +- PHP 7.4 or later with the **OpenSSL** and **JSON** extensions. +- A web server configured to route application paths to `index.php`. Apache deployments can use the included `.htaccess` rules and require `mod_rewrite` and `AllowOverride` support. +- A PHP-writable `local/` directory for the cache and file-backed records. +- For MySQL storage only: PHP `mysqli` and a MySQL-compatible database. -

- - - -

- -## Authors and Contributors +## Install + +1. Download and extract the [latest release](https://github.com/arizon-dev/oneview/releases) into the web server's document root or a subdirectory. +2. Ensure the PHP process can write to `local/`. +3. Point the web server to the `root/` folder. This is where the application is served from. +4. Create the `config.json`. Choose `json` to store records in local files, or `mysql` to use a database: + + ```json + { + "STORAGE_METHOD": "json", + "LANGUAGE": "auto", + "DEBUG_MODE": "false" + } + ``` + + Available list of language codes are listed here: [developers.google.com](https://developers.google.com/workspace/admin/directory/v1/languages). + + > Translations are cached. When the language is changed, it may take a few seconds to load the page for the first time whilst the system downloads the new translations. + +5. For MySQL, create the `local/database.json` file and specify the connection details: + + ```json + { + "HOSTNAME": "database.example.com", + "PORT": "3306", + "USERNAME": "oneviewuser", + "PASSWORD": "password123", + "DATABASE": "oneview" + } + ``` + + OneView creates its records table during initialization. Use a database account with only the permissions the application needs. + +6. Visit the installation URL and test creating and opening a message. + +Keep all contents of the `local/` directory private. This directory includes database credentials, and message encryptions (if using JSON as storage method). + +The included Apache `.htaccess` rules deny direct access to the storage directory and sensitive file extensions. If you use Nginx or another web server, configure equivalent rules to deny web access to `local/`, `config.json`, and database credentials. -👤 **axtonprice** - Main Author +## Storage options -* Discord: https://discord.gg/dP3MuBATGc -* Twitter: [@axtonprice](https://twitter.com/axtonprice) -* Github: [@axtonprice](https://github.com/axtonprice) +| Method | Where encrypted records are stored | Suitable for | +| ------- | ------------------------------------- | ------------------------------------ | +| `json` | JSON files under `local/encryptions/` | A simple, single-server installation | +| `mysql` | The `oneview_records` database table | Installations already using MySQL | -## Show your support +## Privacy and security notes -If you like this project, give a ⭐️ to support us! +- The decryption key is part of the link. Anyone with the link can read the message; do not post it publicly. +- Use HTTPS. Avoid forwarding, logging, or embedding links in third-party services. +- The app records the visitor's IP address with each message (this is deleted once the message has been viewed). Consider this when setting your privacy notice and retention practices. +- Deletion happens after a successful view; it is not a substitute for protecting the link or securing the host and its backups. +- New records use authenticated AES-GCM encryption. Records from older versions of this project will use the legacy encryption format for compatibility. -## 📝 License +## Contributing and support -Copyright © 2022 [axtonprice](https://github.com/axtonprice).
-This project is [MIT](https://github.com/arizon-dev/quickblaze-encrypt/blob/main/LICENSE) licensed. +Bug reports and feature suggestions are welcome through [GitHub Issues](https://github.com/arizon-dev/oneview/issues). Please do not report security vulnerabilities in public issues; follow the private reporting guidance in [SECURITY.md](./SECURITY.md). -
+## License - +OneView is released under the [MIT License](./LICENSE). diff --git a/SECURITY.md b/SECURITY.md index f2d9c0a..8c67ba0 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,21 +1,3 @@ -# QuickBlaze Security Policy +# Security Policy -## Supported Versions - -| Version | Supported | -| ---------- | ----------------- | -| ![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/arizon-dev/quickblaze-encrypt?label=%20&style=flat-square) => | ✅ | -| < GitHub release (latest by date) | ❌ | - ->Versions below the latest release are not supported. We will not be providing support for them and suggestions, bug reports and other requests will beautomatically ignored* - -## Reports & Submissions - -Please report all security vulnerabilities, bug reports, and suggestions to either the GitHub [issues](https://github.com/arizon-dev/quickblaze-encrypt/issues) page, [discussion](https://github.com/arizon-dev/quickblaze-encrypt/discussions) page, or the community [Discord server](https://discord.gg/dP3MuBATGc). -You can also directly contact the project's lead developer via Discord DM's, in order to manually report bugs & issues or suggestions. - -👤 **axtonprice** - Lead Developer - -* Discord: `Axton P.#1234` - -Thank you. \ No newline at end of file +Please report all security vulnerabilities, bug reports, and suggestions to either the GitHub [issues](https://github.com/arizon-dev/oneview/issues) page, or the community [Discord server](https://discord.gg/dP3MuBATGc). diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index 84f0e3c..0000000 Binary files a/favicon.ico and /dev/null differ diff --git a/image.png b/image.png new file mode 100644 index 0000000..d83f658 Binary files /dev/null and b/image.png differ diff --git a/index.php b/index.php deleted file mode 100644 index e6749b9..0000000 --- a/index.php +++ /dev/null @@ -1,43 +0,0 @@ - +Require all denied + + +RewriteCond %{REQUEST_FILENAME} -d +RewriteCond %{REQUEST_URI} !^/$ +RewriteRule ^ / [R=302,L] +RewriteCond %{REQUEST_FILENAME} -f +RewriteRule ^ - [L] +RewriteRule ^ index.php [L,QSA] + +ErrorDocument 404 /404 +ErrorDocument 403 /403 +ErrorDocument 500 /500 diff --git a/root/DataIngest.php b/root/DataIngest.php new file mode 100644 index 0000000..84e9093 --- /dev/null +++ b/root/DataIngest.php @@ -0,0 +1,81 @@ + "Cross-origin requests are not allowed.")); + } +} + +if ($action === "decrypt" && $_SERVER["REQUEST_METHOD"] === "POST") { + $key = isset($_POST["key"]) ? $_POST["key"] : ""; + if (!is_string($key) || !preg_match('/\A[a-f0-9]{32}\z/i', $key)) { + respond(400, array("response" => false)); + } + + $key = strtolower($key); + $message = decryptData($key); + if ($message === false) { + respond(404, array("response" => false)); + } + if (!destroyRecord($key)) { + debug_log("OneView: unable to delete viewed message."); + respond(500, array("response" => false)); + } + respond(200, array("response" => $message)); +} + +if ($action === "submit" && $_SERVER["REQUEST_METHOD"] === "POST") { + $message = isset($_POST["data"]) ? $_POST["data"] : null; + if (!is_string($message) || $message === "") { + respond(400, array("error" => "Enter a message before encrypting it.")); + } + if (strlen($message) > 10000) { + respond(413, array("error" => "Messages must be 10 KB or less.")); + } + + try { + respond(200, array("response" => processData($message))); + } catch (Throwable $error) { + debug_log("OneView: message encryption or storage failed: " . $error->getMessage()); + respond(500, array("error" => "The message could not be encrypted. Please try again.")); + } +} + +if ($action === "checkConfig" && $_SERVER["REQUEST_METHOD"] === "GET") { + $config = file_exists("./config.json") ? json_decode(file_get_contents("./config.json"), true) : null; + $valid = is_array($config) + && !empty($config["LANGUAGE"]) + && isset($config["STORAGE_METHOD"]) + && in_array(strtolower($config["STORAGE_METHOD"]), array("mysql", "json"), true); + respond(200, array("response" => $valid ? "true" : "false")); +} + +if ($action === "isDebugMode" && $_SERVER["REQUEST_METHOD"] === "GET") { + $config = file_exists("./config.json") ? json_decode(file_get_contents("./config.json"), true) : null; + $debugMode = is_array($config) && isset($config["DEBUG_MODE"]) ? $config["DEBUG_MODE"] : "false"; + respond(200, array("response" => $debugMode === "true" ? "true" : "false")); +} + +// catchall +respond(405, array("error" => "Unsupported request.")); diff --git a/root/favicon.ico b/root/favicon.ico new file mode 100644 index 0000000..cbd667a Binary files /dev/null and b/root/favicon.ico differ diff --git a/root/index.php b/root/index.php new file mode 100644 index 0000000..db2b5e2 --- /dev/null +++ b/root/index.php @@ -0,0 +1,45 @@ + copyToClipboard("submissiontextbox")); +} + +const copyMessageButton = document.getElementById("copy-message"); +if (copyMessageButton) { + copyMessageButton.addEventListener("click", () => copyToClipboard("valuetextbox")); +} diff --git a/root/public/assets/js/formHandler.js b/root/public/assets/js/formHandler.js new file mode 100644 index 0000000..f993554 --- /dev/null +++ b/root/public/assets/js/formHandler.js @@ -0,0 +1,142 @@ +const messageForm = document.getElementById("message-form"); +const messageInput = document.getElementById("inputtextbot"); +const byteCount = document.getElementById("byte-count"); +const statusMessage = document.getElementById("status-message"); +const themeToggle = document.getElementById("theme-toggle"); + +function setStatus(message, isError = false) { + if (!statusMessage) return; + statusMessage.textContent = message; + statusMessage.classList.toggle("status-error", isError); +} + +function updateByteCount() { + if (!messageInput || !byteCount) return; + const bytes = new TextEncoder().encode(messageInput.value).length; + byteCount.value = `${bytes.toLocaleString()} / 10,000 bytes`; + byteCount.textContent = byteCount.value; + byteCount.classList.toggle("limit-reached", bytes > 10000); +} + +function setBusy(button, busy, label) { + button.disabled = busy; + button.textContent = busy ? label : button.dataset.label; +} + +if (messageForm) { + const encryptButton = document.getElementById("encrypt-button"); + encryptButton.dataset.label = encryptButton.textContent.trim(); + messageInput.addEventListener("input", updateByteCount); + updateByteCount(); + + messageForm.addEventListener("submit", async (event) => { + event.preventDefault(); + const message = messageInput.value; + const bytes = new TextEncoder().encode(message).length; + if (!message.trim()) { + setStatus("Enter a message before encrypting it.", true); + messageInput.focus(); + return; + } + if (bytes > 10000) { + setStatus("Messages must be 10 KB or less.", true); + return; + } + + setBusy(encryptButton, true, "Encrypting..."); + setStatus(""); + try { + const body = new URLSearchParams({ data: message }); + const response = await fetch( + new URL("../DataIngest?action=submit", window.location.href), + { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", + }, + body, + }, + ); + const result = await response.json(); + if (!response.ok || typeof result.response !== "string") { + throw new Error( + result.error || + "The message could not be encrypted. Please try again.", + ); + } + + const link = new URL("view", window.location.href); + link.searchParams.set("key", result.response); + document.getElementById("submissiontextbox").value = link.href; + document.getElementById("form_submission").hidden = false; + messageForm.hidden = true; + setStatus(""); + } catch (error) { + setStatus( + error.message || + "The message could not be encrypted. Please try again.", + true, + ); + setBusy(encryptButton, false); + } + }); +} + +const viewButton = document.getElementById("view-message"); +if (viewButton) { + viewButton.dataset.label = viewButton.textContent.trim(); + viewButton.addEventListener("click", async () => { + const key = new URL(window.location.href).searchParams.get("key"); + if (!key || !/^[a-f0-9]{32}$/i.test(key)) { + document.getElementById("form_confirmation").hidden = true; + document.getElementById("form_error").hidden = false; + return; + } + + setBusy(viewButton, true, "Opening message..."); + setStatus(""); + try { + const url = new URL("DataIngest", window.location.href); + url.search = new URLSearchParams({ action: "decrypt" }).toString(); + const response = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", + }, + body: new URLSearchParams({ key }), + cache: "no-store", + credentials: "same-origin", + }); + const result = await response.json(); + if (!response.ok || typeof result.response !== "string") { + document.getElementById("form_confirmation").hidden = true; + document.getElementById("form_error").hidden = false; + return; + } + + document.getElementById("valuetextbox").value = result.response; + document.getElementById("form_confirmation").hidden = true; + document.getElementById("form_content").hidden = false; + } catch (error) { + setStatus("Could not contact the server. Please try again.", true); + setBusy(viewButton, false); + } + }); +} + +if (themeToggle) { + const savedTheme = localStorage.getItem("oneview-theme"); + if (savedTheme === "dark" || savedTheme === "light") { + document.documentElement.dataset.theme = savedTheme; + } + themeToggle.addEventListener("click", () => { + const currentTheme = + document.documentElement.dataset.theme || + (window.matchMedia("(prefers-color-scheme: dark)").matches + ? "dark" + : "light"); + const nextTheme = currentTheme === "dark" ? "light" : "dark"; + document.documentElement.dataset.theme = nextTheme; + localStorage.setItem("oneview-theme", nextTheme); + }); +} diff --git a/root/public/error/403.php b/root/public/error/403.php new file mode 100644 index 0000000..c2cfd45 --- /dev/null +++ b/root/public/error/403.php @@ -0,0 +1,45 @@ + + + + + + + + "> + OneView - <?= write("Secret Messages") ?> + + + + + + +
+
+ + + OneView + + +
+ +
+

403

+

+
+ +
+ + +
+ + + + + + diff --git a/root/public/error/404.php b/root/public/error/404.php new file mode 100644 index 0000000..99a255f --- /dev/null +++ b/root/public/error/404.php @@ -0,0 +1,45 @@ + + + + + + + + "> + OneView - <?= write("Secret Messages") ?> + + + + + + +
+
+ + + OneView + + +
+ +
+

404

+

+
+ +
+ + +
+ + + + + + diff --git a/root/public/error/500.php b/root/public/error/500.php new file mode 100644 index 0000000..54792bc --- /dev/null +++ b/root/public/error/500.php @@ -0,0 +1,45 @@ + + + + + + + + "> + OneView - <?= write("Secret Messages") ?> + + + + + + +
+
+ + + OneView + + +
+ +
+

500

+

+
+ +
+ + +
+ + + + + + diff --git a/root/public/error/DatabaseConnection.php b/root/public/error/DatabaseConnection.php new file mode 100644 index 0000000..6a62486 --- /dev/null +++ b/root/public/error/DatabaseConnection.php @@ -0,0 +1,45 @@ + + + + + + + + "> + OneView - <?= write("Secret Messages") ?> + + + + + + +
+
+ + + OneView + + +
+ +
+

+

+
+ +
+ + +
+ + + + + + diff --git a/root/public/error/DatabaseCredentials.php b/root/public/error/DatabaseCredentials.php new file mode 100644 index 0000000..4d0eca4 --- /dev/null +++ b/root/public/error/DatabaseCredentials.php @@ -0,0 +1,45 @@ + + + + + + + + "> + OneView - <?= write("Secret Messages") ?> + + + + + + +
+
+ + + OneView + + +
+ +
+

+

+
+ +
+ + +
+ + + + + + diff --git a/root/public/error/ServerConfiguration.php b/root/public/error/ServerConfiguration.php new file mode 100644 index 0000000..fea262f --- /dev/null +++ b/root/public/error/ServerConfiguration.php @@ -0,0 +1,45 @@ + + + + + + + + "> + OneView - <?= write("Secret Messages") ?> + + + + + + +
+
+ + + OneView + + +
+ +
+

+

+
+ +
+ + +
+ + + + + + diff --git a/root/public/index.php b/root/public/index.php new file mode 100644 index 0000000..9e6929e --- /dev/null +++ b/root/public/index.php @@ -0,0 +1,64 @@ + + + + + + + + "> + OneView - <?= write("Secret Messages") ?> + + + + + +
+
+ + + OneView + + +
+ +
+


+

+
+ +
+ + +
+ + 0 / 10,000 +
+ +
+ + +

+ + +
+ + + + + + diff --git a/root/public/view.php b/root/public/view.php new file mode 100644 index 0000000..9507b8b --- /dev/null +++ b/root/public/view.php @@ -0,0 +1,62 @@ + + + + + + + + "> + OneView - <?= write("Secret Messages") ?> + + + + + +
+
+ + + OneView + + +
+ +
+


+

+
+ +
+ +
+ + + +

+ + +
+ + + + + + diff --git a/root/version.json b/root/version.json new file mode 100644 index 0000000..144a22a --- /dev/null +++ b/root/version.json @@ -0,0 +1 @@ +{ "BRANCH": "main", "VERSION": "2.0.0" }