;
4 | }
5 |
--------------------------------------------------------------------------------
/Crypter.Web/Npm/src/fileSaver/interfaces/fileMetaData.ts:
--------------------------------------------------------------------------------
1 | export default interface FileMetaData {
2 | name: string;
3 | mimeType: string;
4 | size: number | undefined;
5 | }
--------------------------------------------------------------------------------
/Crypter.Web/Npm/src/fileSaver/serviceWorker.noOp.ts:
--------------------------------------------------------------------------------
1 | self.addEventListener('install', () => {
2 | // Skip over the "waiting" lifecycle state, to ensure that our
3 | // new service worker is activated immediately, even if there's
4 | // another tab open controlled by our older service worker code.
5 | void (self as any).skipWaiting();
6 | });
7 |
--------------------------------------------------------------------------------
/Crypter.Web/Npm/src/functions.ts:
--------------------------------------------------------------------------------
1 | export function browserSupportsRequestStreaming(): boolean {
2 | let support = false;
3 | if (browserImplementsRequestStreaming()) {
4 | // Test for Chromium bugfix: https://issues.chromium.org/issues/339788214
5 | const chromiumBugfixVersion = 130;
6 | let match: RegExpMatchArray | null = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);
7 | support = match
8 | ? parseInt(match[2], 10) > chromiumBugfixVersion
9 | : true; // Browser is not Chromium and is not subject to the bug
10 | }
11 | console.log(`Browser supports request streaming: ${support}`)
12 | return support;
13 | }
14 |
15 | function browserImplementsRequestStreaming() : boolean{
16 | let duplexAccessed = false;
17 | const hasContentType = new Request('https://www.crypter.dev', {
18 | body: new ReadableStream(),
19 | method: 'POST',
20 |
21 | // @ts-ignore
22 | get duplex() {
23 | duplexAccessed = true;
24 | return 'half';
25 | },
26 | }).headers.has('Content-Type');
27 | return duplexAccessed && !hasContentType;
28 | }
29 |
--------------------------------------------------------------------------------
/Crypter.Web/Pages/DecryptFile.razor:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright (C) 2023 Crypter File Transfer
3 | *
4 | * This file is part of the Crypter file transfer project.
5 | *
6 | * Crypter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU Affero General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * The Crypter source code is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU Affero General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU Affero General Public License
17 | * along with this program. If not, see .
18 | *
19 | * You can be released from the requirements of the aforementioned license
20 | * by purchasing a commercial license. Buying such a license is mandatory
21 | * as soon as you develop commercial activities involving the Crypter source
22 | * code without disclosing the source code of your own applications.
23 | *
24 | * Contact the current copyright holder to discuss commercial license options.
25 | *@
26 |
27 | @page "/decrypt/file/{userType:int}/{transferHashId}"
28 |
29 | Crypter - Decrypt
30 |
31 |
32 |
Decrypt File
33 | @if (!_loading)
34 | {
35 |
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/Crypter.Web/Pages/DecryptMessage.razor:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright (C) 2023 Crypter File Transfer
3 | *
4 | * This file is part of the Crypter file transfer project.
5 | *
6 | * Crypter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU Affero General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * The Crypter source code is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU Affero General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU Affero General Public License
17 | * along with this program. If not, see .
18 | *
19 | * You can be released from the requirements of the aforementioned license
20 | * by purchasing a commercial license. Buying such a license is mandatory
21 | * as soon as you develop commercial activities involving the Crypter source
22 | * code without disclosing the source code of your own applications.
23 | *
24 | * Contact the current copyright holder to discuss commercial license options.
25 | *@
26 |
27 | @page "/decrypt/message/{userType:int}/{transferHashId}"
28 |
29 | Crypter - Decrypt
30 |
31 |
32 |
Decrypt Message
33 | @if (!_loading)
34 | {
35 |
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/Crypter.Web/Pages/Index.razor:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright (C) 2023 Crypter File Transfer
3 | *
4 | * This file is part of the Crypter file transfer project.
5 | *
6 | * Crypter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU Affero General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * The Crypter source code is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU Affero General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU Affero General Public License
17 | * along with this program. If not, see .
18 | *
19 | * You can be released from the requirements of the aforementioned license
20 | * by purchasing a commercial license. Buying such a license is mandatory
21 | * as soon as you develop commercial activities involving the Crypter source
22 | * code without disclosing the source code of your own applications.
23 | *
24 | * Contact the current copyright holder to discuss commercial license options.
25 | *@
26 |
27 | @page "/"
28 |
29 | Crypter
30 |
31 |
32 |
Crypter.dev
33 | Private, encrypted file transfer and messaging
34 |
35 |
36 |
--------------------------------------------------------------------------------
/Crypter.Web/Properties/PublishProfiles/FolderProfile.pubxml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 | true
8 | false
9 | false
10 | Release
11 | Any CPU
12 | FileSystem
13 | bin\Release\net7.0\publish\browser-wasm
14 | FileSystem
15 | true
16 | browser-wasm
17 | false
18 |
19 | net7.0
20 | 4cf78490-fdfa-47ee-a1be-7ae5534ecfaf
21 |
22 |
--------------------------------------------------------------------------------
/Crypter.Web/Properties/launchSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "iisSettings": {
3 | "windowsAuthentication": false,
4 | "anonymousAuthentication": true,
5 | "iisExpress": {
6 | "applicationUrl": "http://localhost:38083",
7 | "sslPort": 44356
8 | }
9 | },
10 | "profiles": {
11 | "IIS Express": {
12 | "commandName": "IISExpress",
13 | "launchBrowser": true,
14 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
15 | "environmentVariables": {
16 | "ASPNETCORE_ENVIRONMENT": "Development"
17 | }
18 | },
19 | "Crypter.Web": {
20 | "commandName": "Project",
21 | "launchBrowser": true,
22 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}",
23 | "applicationUrl": "https://localhost:5001;http://localhost:5000",
24 | "environmentVariables": {
25 | "ASPNETCORE_ENVIRONMENT": "Development"
26 | }
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Crypter.Web/Shared/AppFooter.razor.css:
--------------------------------------------------------------------------------
1 | .ko-fi-img {
2 | margin: -10px -5px -10px -10px;
3 | }
4 |
--------------------------------------------------------------------------------
/Crypter.Web/Shared/AppHeader.razor:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright (C) 2023 Crypter File Transfer
3 | *
4 | * This file is part of the Crypter file transfer project.
5 | *
6 | * Crypter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU Affero General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * The Crypter source code is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU Affero General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU Affero General Public License
17 | * along with this program. If not, see .
18 | *
19 | * You can be released from the requirements of the aforementioned license
20 | * by purchasing a commercial license. Buying such a license is mandatory
21 | * as soon as you develop commercial activities involving the Crypter source
22 | * code without disclosing the source code of your own applications.
23 | *
24 | * Contact the current copyright holder to discuss commercial license options.
25 | *@
26 |
27 |
33 |
--------------------------------------------------------------------------------
/Crypter.Web/Shared/Modal/Template/ModalBehavior.razor:
--------------------------------------------------------------------------------
1 | @*
2 | * Copyright (C) 2024 Crypter File Transfer
3 | *
4 | * This file is part of the Crypter file transfer project.
5 | *
6 | * Crypter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU Affero General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * The Crypter source code is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU Affero General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU Affero General Public License
17 | * along with this program. If not, see .
18 | *
19 | * You can be released from the requirements of the aforementioned license
20 | * by purchasing a commercial license. Buying such a license is mandatory
21 | * as soon as you develop commercial activities involving the Crypter source
22 | * code without disclosing the source code of your own applications.
23 | *
24 | * Contact the current copyright holder to discuss commercial license options.
25 | *@
26 |
27 |
28 |
29 | @if (_show)
30 | {
31 | @Content
32 | }
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/Crypter.Web/Shared/Transfer/TabbedUploadTransferComponent.razor.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2023 Crypter File Transfer
3 | *
4 | * This file is part of the Crypter file transfer project.
5 | *
6 | * Crypter is free software: you can redistribute it and/or modify
7 | * it under the terms of the GNU Affero General Public License as published by
8 | * the Free Software Foundation, either version 3 of the License, or
9 | * (at your option) any later version.
10 | *
11 | * The Crypter source code is distributed in the hope that it will be useful,
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 | * GNU Affero General Public License for more details.
15 | *
16 | * You should have received a copy of the GNU Affero General Public License
17 | * along with this program. If not, see .
18 | *
19 | * You can be released from the requirements of the aforementioned license
20 | * by purchasing a commercial license. Buying such a license is mandatory
21 | * as soon as you develop commercial activities involving the Crypter source
22 | * code without disclosing the source code of your own applications.
23 | *
24 | * Contact the current copyright holder to discuss commercial license options.
25 | */
26 |
27 | namespace Crypter.Web.Shared.Transfer;
28 |
29 | public partial class TabbedUploadTransferComponent
30 | {
31 | public int ExpirationHours { get; set; }
32 | }
33 |
--------------------------------------------------------------------------------
/Crypter.Web/compilerconfig.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "outputFile": "wwwroot/css/main.css",
4 | "inputFile": "wwwroot/css/main.scss"
5 | }
6 | ]
--------------------------------------------------------------------------------
/Crypter.Web/compilerconfig.json.defaults:
--------------------------------------------------------------------------------
1 | {
2 | "compilers": {
3 | "less": {
4 | "autoPrefix": "",
5 | "cssComb": "none",
6 | "ieCompat": true,
7 | "strictMath": false,
8 | "strictUnits": false,
9 | "relativeUrls": true,
10 | "rootPath": "",
11 | "sourceMapRoot": "",
12 | "sourceMapBasePath": "",
13 | "sourceMap": false
14 | },
15 | "sass": {
16 | "autoPrefix": "",
17 | "includePath": "",
18 | "indentType": "space",
19 | "indentWidth": 2,
20 | "outputStyle": "nested",
21 | "Precision": 5,
22 | "relativeUrls": true,
23 | "sourceMapRoot": "",
24 | "lineFeed": "",
25 | "sourceMap": false
26 | },
27 | "stylus": {
28 | "sourceMap": false
29 | },
30 | "babel": {
31 | "sourceMap": false
32 | },
33 | "coffeescript": {
34 | "bare": false,
35 | "runtimeMode": "node",
36 | "sourceMap": false
37 | },
38 | "handlebars": {
39 | "root": "",
40 | "noBOM": false,
41 | "name": "",
42 | "namespace": "",
43 | "knownHelpersOnly": false,
44 | "forcePartial": false,
45 | "knownHelpers": [],
46 | "commonjs": "",
47 | "amd": false,
48 | "sourceMap": false
49 | }
50 | },
51 | "minifiers": {
52 | "css": {
53 | "enabled": true,
54 | "termSemicolons": true,
55 | "gzip": false
56 | },
57 | "javascript": {
58 | "enabled": true,
59 | "termSemicolons": true,
60 | "gzip": false
61 | }
62 | }
63 | }
--------------------------------------------------------------------------------
/Crypter.Web/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "crypter",
3 | "private": true,
4 | "version": "1.0.0",
5 | "author": "Jack Edwards",
6 | "license": "AGPL-3.0",
7 | "type": "module",
8 | "scripts": {
9 | "buildFunctions": "vite build --config vite.functions.config.js",
10 | "buildFileSaver": "vite build --config vite.fileSaver.config.js",
11 | "buildServiceWorker": "vite build --config vite.serviceWorker.config.js",
12 | "buildServiceWorkerNoOp": "vite build --config vite.serviceWorker.noOp.config.js"
13 | },
14 | "devDependencies": {
15 | "path": "^0.12.7",
16 | "vite": "^6.0.5"
17 | },
18 | "dependencies": {
19 | "@types/file-saver": "^2.0.7",
20 | "@types/ua-parser-js": "^0.7.39",
21 | "file-saver": "^2.0.5",
22 | "ua-parser-js": "^2.0.0"
23 | }
24 | }
--------------------------------------------------------------------------------
/Crypter.Web/vite.fileSaver.config.js:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig } from 'vite';
3 |
4 | export default defineConfig({
5 | build: {
6 | target: 'esnext',
7 | minify: false,
8 | lib: {
9 | entry: path.resolve(__dirname, 'Npm/src/fileSaver/fileSaver.ts'),
10 | formats: ['es'],
11 | fileName: 'fileSaver.bundle',
12 | },
13 | outDir: path.resolve(__dirname, 'wwwroot/js/dist/fileSaver'),
14 | sourcemap: false,
15 | rollupOptions: {
16 | external: [
17 | "Npm/src/fileSaver/serviceWorker.ts"
18 | ],
19 | }
20 | }
21 | });
--------------------------------------------------------------------------------
/Crypter.Web/vite.functions.config.js:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig } from 'vite';
3 |
4 | export default defineConfig({
5 | build: {
6 | target: 'esnext',
7 | minify: false,
8 | lib: {
9 | entry: path.resolve(__dirname, 'Npm/src/functions.ts'),
10 | formats: ['es'],
11 | fileName: 'functions.bundle',
12 | },
13 | outDir: path.resolve(__dirname, 'wwwroot/js/dist'),
14 | emptyOutDir: false,
15 | sourcemap: false
16 | }
17 | });
--------------------------------------------------------------------------------
/Crypter.Web/vite.serviceWorker.config.js:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig } from 'vite';
3 |
4 | export default defineConfig({
5 | build: {
6 | target: 'esnext',
7 | minify: false,
8 | lib: {
9 | entry: path.resolve(__dirname, 'Npm/src/fileSaver/serviceWorker.ts'),
10 | formats: ['es'],
11 | fileName: 'serviceWorker',
12 | },
13 | outDir: path.resolve(__dirname, 'wwwroot/js/dist/serviceWorker'),
14 | sourcemap: false,
15 | }
16 | });
--------------------------------------------------------------------------------
/Crypter.Web/vite.serviceWorker.noOp.config.js:
--------------------------------------------------------------------------------
1 | import path from 'path';
2 | import { defineConfig } from 'vite';
3 |
4 | export default defineConfig({
5 | build: {
6 | target: 'esnext',
7 | minify: false,
8 | lib: {
9 | entry: path.resolve(__dirname, 'Npm/src/fileSaver/serviceWorker.noOp.ts'),
10 | formats: ['es'],
11 | fileName: 'serviceWorker.noOp',
12 | },
13 | outDir: path.resolve(__dirname, 'wwwroot/js/dist/serviceWorker.noOp'),
14 | sourcemap: false,
15 | }
16 | });
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/appsettings.Development.json:
--------------------------------------------------------------------------------
1 | {
2 | "ApiSettings": {
3 | "ApiBaseUrl": "https://localhost/api"
4 | },
5 | "LoggingConfiguration": {
6 | "MinimumLogLevel": "Debug"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/appsettings.Staging.json:
--------------------------------------------------------------------------------
1 | {
2 | "ApiSettings": {
3 | "ApiBaseUrl": "${API_BASE_URL}"
4 | },
5 | "LoggingConfiguration": {
6 | "MinimumLogLevel": "Debug"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/appsettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "ApiSettings": {
3 | "ApiBaseUrl": "${API_BASE_URL}"
4 | },
5 | "ClientTransferSettings": {
6 | "MaximumUploadBufferSizeMB": 100,
7 | "MaximumMultipartReadBlocks": 120,
8 | "InitialMultipartReadBlocks": 10,
9 | "MaximumMultipartParallelism": 2,
10 | "TargetMultipartUploadMilliseconds": 1000,
11 | "MaxReadSize": 32704,
12 | "PadSize": 64
13 | },
14 | "LoggingConfiguration": {
15 | "MinimumLogLevel": "Information"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/css/main.scss:
--------------------------------------------------------------------------------
1 | @import 'partials/_base.scss';
2 | @import 'partials/_navigation.scss';
3 | @import 'partials/_encrypt.scss';
4 | @import 'partials/_upload.scss';
5 | @import 'partials/_decrypt.scss';
6 | @import 'partials/_copied.scss';
7 | @import 'partials/_input-group.scss';
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/css/partials/_copied.scss:
--------------------------------------------------------------------------------
1 | .copiedTooltip {
2 | position: relative;
3 |
4 | .toolTipText {
5 | background-color: gray;
6 | color: #ffffff;
7 | border-radius: 5px;
8 | text-align: center;
9 | line-height: 32px;
10 | display: none;
11 | position: absolute;
12 | width: 100px;
13 | height: 32px;
14 | margin: auto;
15 | top: 0;
16 | bottom: 0;
17 | left: 0;
18 | right: 0;
19 | opacity: 0;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/css/partials/_decrypt.scss:
--------------------------------------------------------------------------------
1 | .decryption-details {
2 | border: 1px solid black;
3 | border-radius: 10px;
4 |
5 | &::after {
6 | content: '';
7 | display: table;
8 | clear: both;
9 | }
10 |
11 | .details, .decryption-key {
12 | padding: 16px;
13 | float: left;
14 | }
15 |
16 | .details {
17 |
18 | h3 {
19 | text-transform: capitalize;
20 | margin-top: 0;
21 | }
22 | }
23 |
24 | .decryption-key {
25 | border-left: 1px solid black;
26 | text-align: center;
27 |
28 | input, button {
29 | display: block;
30 | margin: 12px auto;
31 | }
32 |
33 | input {
34 | width: 75%;
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/css/partials/_encrypt.scss:
--------------------------------------------------------------------------------
1 | #encrypt {
2 | margin: 40px auto;
3 | max-width: 700px;
4 | }
5 |
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/css/partials/_input-group.scss:
--------------------------------------------------------------------------------
1 | .input-group-append {
2 | margin-left: -1px;
3 | }
4 |
5 | .input-group-append {
6 | display: flex;
7 | }
8 |
9 | .input-group > .input-group-append > .btn, .input-group > .input-group-append > .input-group-text {
10 | border-top-left-radius: 0;
11 | border-bottom-left-radius: 0;
12 | }
13 |
14 | .input-group-append .btn {
15 | position: relative;
16 | z-index: 2;
17 | }
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/css/partials/_navigation.scss:
--------------------------------------------------------------------------------
1 | .nav.head {
2 | .nav-item button, .nav-item a {
3 | margin: 8px;
4 | }
5 | }
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/css/partials/_upload.scss:
--------------------------------------------------------------------------------
1 | .file-upload, .message-upload {
2 | max-width: 600px;
3 | margin: auto;
4 | text-align: left;
5 |
6 | .dropzone {
7 | border-width: 4px;
8 | border-style: dotted;
9 | margin: auto auto 24px auto;
10 | text-align: center;
11 | position: relative;
12 | transition: all 200ms ease;
13 |
14 | &.dropzone-drag {
15 | background-color: rgba(27,110,194, 0.15);
16 | border-color: #1b6ec2;
17 | transition: all 200ms ease;
18 |
19 | .dz-text {
20 | color: #1b6ec2;
21 | }
22 | }
23 |
24 | &:hover {
25 | .dz-text {
26 | color: #1b6ec2;
27 | transition: color 200ms ease;
28 | }
29 | }
30 | }
31 |
32 | .dz-text {
33 | position: absolute;
34 | padding: 20px;
35 | left: 0;
36 | right: 0;
37 | transition: color 200ms ease;
38 | }
39 |
40 | #fileInput {
41 | padding: 5rem 9rem 2rem;
42 | opacity: 0;
43 | z-index: 10;
44 |
45 | &:hover {
46 | cursor: pointer;
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/favicon.ico
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/img/GitHub-Mark-32px.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/img/GitHub-Mark-32px.png
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/js/blazorStartup.js:
--------------------------------------------------------------------------------
1 | const environmentMap = {
2 | "localhost": "Development",
3 | "stage.crypter.dev": "Staging",
4 | "www.crypter.dev": "Production"
5 | }
6 |
7 | Blazor.start({
8 | environment: environmentMap[window.location.hostname]
9 | });
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/bootstrap-icons-1.10.3/fonts/bootstrap-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/bootstrap-icons-1.10.3/fonts/bootstrap-icons.woff
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/bootstrap-icons-1.10.3/fonts/bootstrap-icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/bootstrap-icons-1.10.3/fonts/bootstrap-icons.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FU0U1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FU0U1Z4Y.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FV0U1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FV0U1.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FVUU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FVUU1Z4Y.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FWUU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FWUU1Z4Y.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FWkU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-2Y-FWkU1Z4Y.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFU0U1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFU0U1Z4Y.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFV0U1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFV0U1.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFVUU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFVUU1Z4Y.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFWUU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFWUU1Z4Y.woff2
--------------------------------------------------------------------------------
/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFWkU1Z4Y.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Crypter-File-Transfer/Crypter/c16eb11a87af70b7df637c803a8a99ccbfd1f34d/Crypter.Web/wwwroot/lib/fonts-local/google/iJWZBXyIfDnIV5PNhY1KTN7Z-Yh-B4iFWkU1Z4Y.woff2
--------------------------------------------------------------------------------
/Documentation/Production/Server Setup/Web Server Setup.md:
--------------------------------------------------------------------------------
1 | # Web Server Setup
2 |
3 | This document describes how to manually setup a new web server for GitHub deploys.
4 |
5 | ## Install Docker
6 |
7 | Install Docker or an equivalent.
8 |
9 | Also install Docker Compose or an equivalent.
10 |
11 | ## Configure SSH
12 |
13 | Create an SSH user and add corresponding details to the environment secrets within the GitHub repository.
14 |
15 | The user will need permissions to Docker, so add the user to the `docker` group.
16 |
17 | ## Copy the .env file
18 |
19 | Locate the `.env` file at the root of this repository, [here](../../../.env).
20 |
21 | Copy the file to the home directory of the SSH user. For example: `/home//crypter-web-container/.env`
22 |
23 | Scan and update the values in the file to ensure they are correct for the environment.
24 |
25 | ## Enable linger
26 |
27 | Enable linger to be sure the user service owned by the SSH user automatically starts after a power cycle.
28 |
29 | `loginctl enable-linger `
30 |
--------------------------------------------------------------------------------
/Environments/production/crypter.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Crypter Web and API
3 | After=docker.service
4 |
5 | [Service]
6 | Type=simple
7 | WorkingDirectory=%h/crypter-web-container
8 | ExecStart=/usr/bin/docker compose --profile web up
9 | ExecStop=/usr/bin/docker compose --profile web down
10 | Restart=on-failure
11 |
12 | [Install]
13 | WantedBy=default.target
14 |
--------------------------------------------------------------------------------
/Environments/staging/crypter.service:
--------------------------------------------------------------------------------
1 | [Unit]
2 | Description=Crypter Web, API, and database
3 | After=docker.service
4 |
5 | [Service]
6 | Type=simple
7 | WorkingDirectory=%h/crypter-web-container
8 | ExecStart=/usr/bin/docker compose --profile local up
9 | ExecStop=/usr/bin/docker compose --profile local down
10 | Restart=on-failure
11 |
12 | [Install]
13 | WantedBy=default.target
14 |
--------------------------------------------------------------------------------
/docker-compose.override.yml:
--------------------------------------------------------------------------------
1 | services:
2 | api:
3 | depends_on:
4 | db:
5 | condition: service_healthy
6 | db:
7 | profiles:
8 | - db
9 | - local
10 | image: postgres:15.10
11 | expose:
12 | - "5432"
13 | ports:
14 | - ${POSTGRES_BIND_IP-[0.0.0.0]}:${POSTGRES_BIND_PORT-5432}:5432
15 | environment:
16 | POSTGRES_PASSWORD: ${POSTGRES_SUPERUSER_PASSWORD-DEFAULT_PASSWORD}
17 | POSTGRES_C_PASSWORD: ${POSTGRES_USER_PASSWORD:-DEFAULT_PASSWORD}
18 | POSTGRES_HF_PASSWORD: ${POSTGRES_HANGFIRE_USER_PASSWORD:-DEFAULT_PASSWORD}
19 | volumes:
20 | - ./Volumes/PostgreSQL/data:/var/lib/postgresql/data
21 | - ./Volumes/PostgreSQL/postgres-init-files:/docker-entrypoint-initdb.d
22 | restart: always
23 | healthcheck:
24 | test: ["CMD-SHELL", "pg_isready -d crypter -U postgres"]
25 | interval: 10s
26 | timeout: 10s
27 | retries: 5
28 | start_period: 60s
29 |
--------------------------------------------------------------------------------