├── .circleci
└── config.yml
├── .clabot
├── .dockerignore
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── feature request.yml
│ └── issue report.yml
└── dependabot.yml
├── .gitignore
├── .nvmrc
├── .swp
├── CONTRIBUTE.md
├── LICENCE
├── Logo.png
├── banner.jpg
├── banner.png
├── build-dev.sh
├── build.sh
├── changelog.md
├── cla.md
├── client
├── TEMPLATE LICENSE
├── index.html
└── src
│ ├── App.jsx
│ ├── App.test.jsx
│ ├── PrivateRoute.jsx
│ ├── api
│ ├── authentication.demo.jsx
│ ├── authentication.jsx
│ ├── backup.demo.ts
│ ├── backup.ts
│ ├── config.demo.ts
│ ├── config.ts
│ ├── constellation.demo.tsx
│ ├── constellation.tsx
│ ├── container.demo.json
│ ├── cron.demo.jsx
│ ├── cron.jsx
│ ├── demo.config.json
│ ├── docker.demo.json
│ ├── docker.demo.jsx
│ ├── docker.jsx
│ ├── downloadButton.jsx
│ ├── events.demo.json
│ ├── index.demo.jsx
│ ├── index.jsx
│ ├── logs.demo.json
│ ├── market.demo.json
│ ├── market.demo.ts
│ ├── market.ts
│ ├── metrics.demo.json
│ ├── metrics.demo.jsx
│ ├── metrics.jsx
│ ├── networks.demo.json
│ ├── rclone.jsx
│ ├── storage.demo.jsx
│ ├── storage.jsx
│ ├── users.demo.json
│ ├── users.demo.jsx
│ ├── users.jsx
│ ├── volumes.demo.json
│ └── wrap.js
│ ├── assets
│ ├── images
│ │ ├── auth
│ │ │ └── AuthBackground.jsx
│ │ ├── const_banner.png
│ │ ├── icons
│ │ │ ├── constellation.png
│ │ │ ├── constellation_full.png
│ │ │ ├── constellation_white.png
│ │ │ ├── cosmos.png
│ │ │ ├── cosmos_gray.png
│ │ │ ├── cosmos_simple_black.png
│ │ │ ├── cosmos_simple_white.png
│ │ │ ├── database.svg
│ │ │ ├── discord(1).svg
│ │ │ ├── discord.svg
│ │ │ ├── discord_white.svg
│ │ │ ├── disk.svg
│ │ │ ├── drive.png
│ │ │ ├── facebook.svg
│ │ │ ├── folder(1).svg
│ │ │ ├── folder.svg
│ │ │ ├── google.svg
│ │ │ ├── lock.png
│ │ │ ├── lock.svg
│ │ │ ├── part.png
│ │ │ ├── part.svg
│ │ │ └── twitter.svg
│ │ ├── stor_banner.png
│ │ ├── users
│ │ │ ├── avatar-1.png
│ │ │ ├── avatar-2.png
│ │ │ ├── avatar-3.png
│ │ │ ├── avatar-4.png
│ │ │ └── avatar-group.png
│ │ ├── wallpaper2.jpg
│ │ └── wallpaper2_light.jpg
│ └── third-party
│ │ └── apex-chart.css
│ ├── components
│ ├── @extended
│ │ ├── AnimateButton.jsx
│ │ ├── Breadcrumbs.jsx
│ │ ├── Dot.jsx
│ │ └── Transitions.jsx
│ ├── Loadable.jsx
│ ├── Loader.jsx
│ ├── Logo
│ │ ├── Logo.jsx
│ │ └── index.jsx
│ ├── MainCard.jsx
│ ├── MenuButton.jsx
│ ├── ScrollTop.jsx
│ ├── apiModal.jsx
│ ├── back.jsx
│ ├── cards
│ │ ├── AuthFooter.jsx
│ │ └── statistics
│ │ │ └── AnalyticEcommerce.jsx
│ ├── confirmModal.jsx
│ ├── containers.jsx
│ ├── countrySelect.jsx
│ ├── delete.jsx
│ ├── filePicker.jsx
│ ├── fileUpload.jsx
│ ├── hostChip.jsx
│ ├── imageWithPlaceholder.jsx
│ ├── logLine.jsx
│ ├── logsInModal.jsx
│ ├── newFileModal.jsx
│ ├── oldTerminal.jsx
│ ├── passwordModal.jsx
│ ├── persistentInput.jsx
│ ├── responseiveButton.jsx
│ ├── routeComponents.jsx
│ ├── tabbedView
│ │ └── tabbedView.jsx
│ ├── tableView
│ │ └── prettyTableView.jsx
│ ├── terminal.jsx
│ └── third-party
│ │ ├── Highlighter.jsx
│ │ └── SimpleBar.jsx
│ ├── config.jsx
│ ├── index.css
│ ├── index.jsx
│ ├── isLoggedIn.jsx
│ ├── layout
│ ├── MainLayout
│ │ ├── Drawer
│ │ │ ├── DrawerContent
│ │ │ │ ├── NavCard.jsx
│ │ │ │ ├── Navigation
│ │ │ │ │ ├── NavGroup.jsx
│ │ │ │ │ ├── NavItem.jsx
│ │ │ │ │ └── index.jsx
│ │ │ │ └── index.jsx
│ │ │ ├── DrawerHeader
│ │ │ │ ├── DrawerHeaderStyled.jsx
│ │ │ │ └── index.jsx
│ │ │ ├── MiniDrawerStyled.jsx
│ │ │ ├── flag.css
│ │ │ ├── index.jsx
│ │ │ └── languages.jsx
│ │ ├── Header
│ │ │ ├── AppBarStyled.jsx
│ │ │ ├── HeaderContent
│ │ │ │ ├── MobileSection.jsx
│ │ │ │ ├── Notification.jsx
│ │ │ │ ├── Profile
│ │ │ │ │ ├── ProfileTab.jsx
│ │ │ │ │ ├── SettingTab.jsx
│ │ │ │ │ └── index.jsx
│ │ │ │ ├── Search.jsx
│ │ │ │ ├── index.jsx
│ │ │ │ ├── jobs.jsx
│ │ │ │ ├── restartMenu.jsx
│ │ │ │ ├── sudoModal.jsx
│ │ │ │ └── terminal.jsx
│ │ │ └── index.jsx
│ │ └── index.jsx
│ └── MinimalLayout
│ │ └── index.jsx
│ ├── main.css
│ ├── main.tsx
│ ├── menu-items
│ ├── dashboard.jsx
│ ├── index.jsx
│ ├── pages.jsx
│ └── support.jsx
│ ├── pages
│ ├── authentication
│ │ ├── AuthCard.jsx
│ │ ├── AuthWrapper.jsx
│ │ ├── Login.jsx
│ │ ├── Logoff.jsx
│ │ ├── Register.jsx
│ │ ├── Signup.jsx
│ │ ├── auth-forms
│ │ │ ├── AuthLogin.jsx
│ │ │ ├── AuthRegister.jsx
│ │ │ └── FirebaseSocial.jsx
│ │ ├── forgotPassword.jsx
│ │ ├── newMFA.jsx
│ │ └── openid.jsx
│ ├── backups
│ │ ├── backupDialog.jsx
│ │ ├── backups.jsx
│ │ ├── fileExplorer.jsx
│ │ ├── index.jsx
│ │ ├── overview.jsx
│ │ ├── repositories.jsx
│ │ ├── restore.jsx
│ │ ├── restoreDialog.jsx
│ │ ├── single-backup-index.jsx
│ │ └── single-repo-index.jsx
│ ├── components-overview
│ │ ├── AntIcons.jsx
│ │ ├── Color.jsx
│ │ ├── ComponentSkeleton.jsx
│ │ ├── Shadow.jsx
│ │ └── Typography.jsx
│ ├── config
│ │ ├── routeConfigPage.jsx
│ │ ├── routes
│ │ │ ├── newRoute.jsx
│ │ │ ├── routeSecurity.jsx
│ │ │ ├── routeman.jsx
│ │ │ └── routeoverview.jsx
│ │ ├── trust.jsx
│ │ └── users
│ │ │ ├── configman.jsx
│ │ │ ├── containerPicker.jsx
│ │ │ ├── formShortcuts.jsx
│ │ │ ├── proxyman.jsx
│ │ │ ├── restart.jsx
│ │ │ └── usermanagement.jsx
│ ├── constellation
│ │ ├── addDevice.jsx
│ │ ├── dns.jsx
│ │ ├── free.jsx
│ │ ├── index.jsx
│ │ ├── resyncDevice.jsx
│ │ └── vpn.jsx
│ ├── cron
│ │ ├── jobLogs.jsx
│ │ ├── jobsManage.jsx
│ │ └── newJob.jsx
│ ├── dashboard
│ │ ├── AlertPage.jsx
│ │ ├── MetricHeaders.jsx
│ │ ├── MetricsPicker.jsx
│ │ ├── components
│ │ │ ├── mini-plot.jsx
│ │ │ ├── plot.jsx
│ │ │ ├── table.jsx
│ │ │ └── utils.jsx
│ │ ├── containerMetrics.jsx
│ │ ├── eventsExplorer.jsx
│ │ ├── eventsExplorerStandalone.jsx
│ │ ├── index.jsx
│ │ ├── proxyDashboard.jsx
│ │ ├── resourceDashboard.jsx
│ │ └── routeMonitoring.jsx
│ ├── extra-pages
│ │ └── SamplePage.jsx
│ ├── home
│ │ ├── index.jsx
│ │ └── migrate014.jsx
│ ├── market
│ │ ├── listing.jsx
│ │ └── sources.jsx
│ ├── newInstall
│ │ └── newInstall.jsx
│ ├── openid
│ │ ├── openid-edit.jsx
│ │ └── openid-list.jsx
│ ├── servapps
│ │ ├── actionBar.jsx
│ │ ├── containers
│ │ │ ├── compose-editor.jsx
│ │ │ ├── docker-compose.jsx
│ │ │ ├── index.jsx
│ │ │ ├── logs.jsx
│ │ │ ├── network.jsx
│ │ │ ├── newService.jsx
│ │ │ ├── newServiceForm.jsx
│ │ │ ├── overview.jsx
│ │ │ ├── setup.jsx
│ │ │ ├── terminal.jsx
│ │ │ └── volumes.jsx
│ │ ├── createNetwork.jsx
│ │ ├── createVolumes.jsx
│ │ ├── defaultport.json
│ │ ├── deleteModal.jsx
│ │ ├── exposeModal.jsx
│ │ ├── index.jsx
│ │ ├── linkContainersButton.jsx
│ │ ├── networks.jsx
│ │ ├── servapps.jsx
│ │ └── volumes.jsx
│ └── storage
│ │ ├── FormatModal.jsx
│ │ ├── disks.jsx
│ │ ├── index.jsx
│ │ ├── mergerDialog.jsx
│ │ ├── merges.jsx
│ │ ├── mountDialog.jsx
│ │ ├── mountDiskDialog.jsx
│ │ ├── mountPicker.jsx
│ │ ├── mountPickerEntry.jsx
│ │ ├── mounts.jsx
│ │ ├── parity.jsx
│ │ ├── raid.jsx
│ │ ├── raidDialog.jsx
│ │ ├── rclone
│ │ ├── rclone-free.jsx
│ │ ├── rclone-providers.js
│ │ ├── rclone-serve.js
│ │ ├── rclone-transfers.jsx
│ │ ├── rclone_config.jsx
│ │ ├── rclone_new.jsx
│ │ ├── rclone_serve_config.jsx
│ │ └── rclone_serve_new.jsx
│ │ ├── smart.jsx
│ │ ├── snapRaidDialog.jsx
│ │ └── vmWarning.jsx
│ ├── react-app-env.d.jsx
│ ├── reportWebVitals.jsx
│ ├── routes
│ ├── LoginRoutes.jsx
│ ├── MainRoutes.jsx
│ └── index.jsx
│ ├── setupTests.jsx
│ ├── store
│ ├── index.jsx
│ └── reducers
│ │ ├── actions.jsx
│ │ ├── index.jsx
│ │ └── menu.jsx
│ ├── themes
│ ├── index.jsx
│ ├── overrides
│ │ ├── Badge.jsx
│ │ ├── Button.jsx
│ │ ├── CardContent.jsx
│ │ ├── Checkbox.jsx
│ │ ├── Chip.jsx
│ │ ├── IconButton.jsx
│ │ ├── InputLabel.jsx
│ │ ├── LinearProgress.jsx
│ │ ├── Link.jsx
│ │ ├── ListItemIcon.jsx
│ │ ├── OutlinedInput.jsx
│ │ ├── Tab.jsx
│ │ ├── TableCell.jsx
│ │ ├── Tabs.jsx
│ │ ├── Typography.jsx
│ │ └── index.jsx
│ ├── palette.jsx
│ ├── shadows.jsx
│ ├── theme
│ │ └── index.jsx
│ └── typography.jsx
│ └── utils
│ ├── SyntaxHighlight.jsx
│ ├── container-security.jsx
│ ├── dns-challenge-comp.jsx
│ ├── dns-config.json
│ ├── dns-list.json
│ ├── docker.js
│ ├── free.jsx
│ ├── hooks.js
│ ├── icons.demo.json
│ ├── indexs.js
│ ├── locales
│ ├── ar
│ │ └── translation.json
│ ├── cn-TW
│ │ └── translation.json
│ ├── cn
│ │ └── translation.json
│ ├── de-CH
│ │ └── translation.json
│ ├── de
│ │ └── translation.json
│ ├── en-FUNNYSHAKESPEARE
│ │ └── translation.json
│ ├── en
│ │ └── translation.json
│ ├── es
│ │ └── translation.json
│ ├── fr
│ │ └── translation.json
│ ├── hi
│ │ └── translation.json
│ ├── i18n.jsx
│ ├── it
│ │ └── translation.json
│ ├── jp
│ │ └── translation.json
│ ├── kr
│ │ └── translation.json
│ ├── nl
│ │ └── translation.json
│ ├── pl
│ │ └── translation.json
│ ├── pt
│ │ └── translation.json
│ ├── ru
│ │ └── translation.json
│ └── tr
│ │ └── translation.json
│ ├── password-strength.jsx
│ ├── routes.jsx
│ └── servapp-icon.jsx
├── compare.png
├── cosmos_gray.png
├── diag_SN.png
├── diag_SN2.png
├── docker.sh
├── dockerfile
├── dockerfile.local
├── gen-doc-dns.js
├── go.mod
├── go.sum
├── header-tester.js
├── icons
├── demo.png
├── doc.png
└── ws.png
├── package-lock.json
├── package.json
├── readme.md
├── schema.png
├── screenshot1.png
├── sponsors.js
├── src
├── CRON.go
├── authorizationserver
│ ├── oauth2.go
│ ├── oauth2_auth.go
│ ├── oauth2_discover.go
│ ├── oauth2_introspect.go
│ ├── oauth2_jwks.go
│ ├── oauth2_revoke.go
│ ├── oauth2_token.go
│ └── oauth2_user.go
├── backup.go
├── backups
│ ├── API.go
│ ├── index.go
│ └── restic.go
├── config.go
├── configapi
│ ├── get.go
│ ├── patch.go
│ ├── restart.go
│ ├── route.go
│ └── set.go
├── constellation
│ ├── DNS.go
│ ├── NATS.go
│ ├── api_devices_block.go
│ ├── api_devices_config.go
│ ├── api_devices_create.go
│ ├── api_devices_index.go
│ ├── api_devices_list.go
│ ├── api_nebula.go
│ ├── api_nebula_connect.go
│ ├── index.go
│ ├── nebula.go
│ ├── nebula_default.go
│ └── sync.go
├── cron
│ ├── API.go
│ ├── Websocket.go
│ ├── index.go
│ └── tracker.go
├── dns.go
├── docker
│ ├── api.go
│ ├── api_autoupdate.go
│ ├── api_blueprint.go
│ ├── api_containers.go
│ ├── api_getcontainers.go
│ ├── api_getlogs.go
│ ├── api_images.go
│ ├── api_managecont.go
│ ├── api_migrate.go
│ ├── api_networks.go
│ ├── api_secureContainer.go
│ ├── api_terminal.go
│ ├── api_update.go
│ ├── api_updateContainer.go
│ ├── api_volumes.go
│ ├── backups.go
│ ├── bootstrap.go
│ ├── checkPorts.go
│ ├── docker.go
│ ├── events.go
│ ├── export.go
│ ├── ip.go
│ ├── network.go
│ └── run.go
├── httpServer.go
├── icons.go
├── image.go
├── index.go
├── launcher
│ └── launcher.go
├── market
│ ├── index.go
│ ├── init.go
│ └── update.go
├── metrics
│ ├── aggl.go
│ ├── alerts.go
│ ├── api.go
│ ├── events.go
│ ├── http.go
│ ├── index.go
│ └── system.go
├── migrate.go
├── newInstall.go
├── proxy
│ ├── SmartResponseWriter.go
│ ├── SocketProxy.go
│ ├── Socketshield.go
│ ├── UDPShield.go
│ ├── app_gate.go
│ ├── avahi.go
│ ├── botblock.go
│ ├── buildFromConfig.go
│ ├── routeTo.go
│ ├── routerGen.go
│ └── shield.go
├── storage
│ ├── API_CRUD.go
│ ├── API_SnapRAID.go
│ ├── API_parts.go
│ ├── SMARTDefinition.go
│ ├── disks.go
│ ├── filepicker.go
│ ├── index.go
│ ├── mdadm.go
│ ├── mergerFS.go
│ ├── mounts.go
│ ├── rclone.go
│ └── snapRAID.go
├── system.go
├── terminal.go
├── update.go
├── user
│ ├── 2fa_check.go
│ ├── 2fa_new.go
│ ├── 2fa_reset.go
│ ├── create.go
│ ├── delete.go
│ ├── edit.go
│ ├── emails.go
│ ├── get.go
│ ├── list.go
│ ├── login.go
│ ├── logout.go
│ ├── me.go
│ ├── password_reset.go
│ ├── register.go
│ ├── resend.go
│ ├── sudo.go
│ ├── token.go
│ └── userRoute.go
└── utils
│ ├── certificates.go
│ ├── cleanup.go
│ ├── cloud.go
│ ├── db.go
│ ├── dns.go
│ ├── emails.go
│ ├── events.go
│ ├── log.go
│ ├── loggedIn.go
│ ├── logger.go
│ ├── middleware.go
│ ├── notifications.go
│ ├── types.go
│ ├── utils.go
│ └── validator.go
├── start.sh
├── tag.js
├── test
├── test-server.js
├── translate-all.sh
├── translate.js
└── vite.config.js
/.clabot:
--------------------------------------------------------------------------------
1 | {
2 | "contributors": ["azukaar", "jwr1", "Jogai", "InterN0te", "catmandx", "revam", "Kawanaao", "davis4acca", "george-radu-cs", "BearTS", "lilkidsuave", "ryan-schubert", "madejackson", "RaidMax", "r41d"],
3 | "message": "We require contributors to sign our [Contributor License Agreement](https://github.com/azukaar/Cosmos-Server/blob/master/cla.md). In order for us to review and merge your code, add yourself to the .clabot file as contributor, as a way of signing the CLA."
4 | }
5 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: [azukaar]
4 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature request.yml:
--------------------------------------------------------------------------------
1 | name: Feature Request
2 | description: Request a new feature
3 | title: "[FEAT]: "
4 | labels: [feature, review]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | Thanks for taking the time to request a new feature! before doing so, make sure that the feature you're requesting isn't already requested. You can do so by searching the issues first.
10 | - type: textarea
11 | id: feature-description
12 | attributes:
13 | label: Feature Description
14 | description: A clear and concise description of the feature you're requesting.
15 | placeholder: "As a user, I want to be able to do X so that I can Y."
16 | validations:
17 | required: true
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/issue report.yml:
--------------------------------------------------------------------------------
1 | name: Issue Report
2 | description: File an issue report
3 | title: "[BUG]: "
4 | labels: [bug, review]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | Thanks for taking the time to fill out this bug report!
10 | - type: textarea
11 | id: what-happened
12 | attributes:
13 | label: What happened?
14 | description: "A clear and concise description of what the bug is."
15 | placeholder: "When I do X, I see Y."
16 | validations:
17 | required: true
18 | - type: textarea
19 | id: what-should-happen
20 | attributes:
21 | label: What should have happened?
22 | description: "A clear and concise description of what you expected to happen."
23 | placeholder: "When I do X, I should see Z."
24 | validations:
25 | required: true
26 | - type: textarea
27 | id: reproduction
28 | attributes:
29 | label: How to reproduce the bug?
30 | description: "A clear and concise description of how to reproduce the bug."
31 | placeholder: "Steps to reproduce the behavior:"
32 | value: |
33 | 1. Go to '...'
34 | 2. Click on '....'
35 | 3. Scroll down to '....'
36 | 4. See error
37 | validations:
38 | required: true
39 | - type: textarea
40 | id: logs
41 | attributes:
42 | label: Relevant log output
43 | description: "Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks."
44 | render: shell
45 | - type: textarea
46 | id: other-details
47 | attributes:
48 | label: Other details
49 | description: "Anything else you'd like to add?"
50 | - type: textarea
51 | id: system-details
52 | attributes:
53 | label: System details
54 | description: "Please fill out the following details about your system depending on how relevant (always include Cosmos Version!)."
55 | value: |
56 | - OS: [e.g. iOS]
57 | - Browser [e.g. chrome, safari]
58 | - Version [e.g. 22]
59 | validations:
60 | required: true
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | build
3 | .vite
4 | static
5 | .bin
6 | client/dist
7 | client/.vite
8 | config_dev.json
9 | config_dev.old.json
10 | tests
11 | todo.txt
12 | LICENCE
13 | tokens.json
14 | .vscode
15 | GeoLite2-Country.mmdb
16 | dns-blacklist.txt
17 | zz_test_config
18 | nebula-arm
19 | nebula-arm-cert
20 | nebula
21 | nebula-cert
22 | vite.config.js
23 | src/launcher/update.go
24 | stats.html
25 | restic
26 | restic-arm
27 | rclone
28 | rclone-arm
29 | test-backup
30 | /backups
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 16
2 |
--------------------------------------------------------------------------------
/.swp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/.swp
--------------------------------------------------------------------------------
/Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/Logo.png
--------------------------------------------------------------------------------
/banner.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/banner.jpg
--------------------------------------------------------------------------------
/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/banner.png
--------------------------------------------------------------------------------
/build-dev.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo " ---- Build Cosmos ----"
4 |
5 | rm -rf build
6 |
7 | cp src/update.go src/launcher/update.go
8 |
9 | go build -o build/cosmos src/*.go
10 | if [ $? -ne 0 ]; then
11 | exit 1
12 | fi
13 | go build -o build/cosmos-launcher ./src/launcher/launcher.go ./src/launcher/update.go
14 | if [ $? -ne 0 ]; then
15 | exit 1
16 | fi
17 |
18 | echo " ---- Build complete, copy assets ----"
19 |
20 | cp start.sh build/start.sh
21 | chmod +x build/start.sh
22 | chmod +x build/cosmos
23 | chmod +x build/cosmos-launcher
24 |
25 | cp -r static build/
26 | cp -r GeoLite2-Country.mmdb build/
27 | cp nebula-arm-cert nebula-cert nebula-arm nebula build/
28 | cp -r Logo.png build/
29 | cp restic build/
30 | mkdir build/images
31 | cp client/src/assets/images/icons/cosmos_gray.png build/cosmos_gray.png
32 | cp client/src/assets/images/icons/cosmos_gray.png cosmos_gray.png
33 | echo '{' > build/meta.json
34 | cat package.json | grep -E '"version"' >> build/meta.json
35 | echo ' "buildDate": "'`date`'",' >> build/meta.json
36 | echo ' "built from": "'`hostname`'"' >> build/meta.json
37 | echo '}' >> build/meta.json
38 |
39 | echo " ---- copy complete ----"
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo " ---- Build Cosmos ----"
4 |
5 | rm -rf build
6 |
7 | cp src/update.go src/launcher/update.go
8 |
9 | env GOARCH=arm64 go build -o build/cosmos-arm64 src/*.go
10 | if [ $? -ne 0 ]; then
11 | exit 1
12 | fi
13 | env GOARCH=arm64 go build -o build/cosmos-launcher-arm64 ./src/launcher/launcher.go ./src/launcher/update.go
14 | if [ $? -ne 0 ]; then
15 | exit 1
16 | fi
17 |
18 | go build -o build/cosmos src/*.go
19 | if [ $? -ne 0 ]; then
20 | exit 1
21 | fi
22 | go build -o build/cosmos-launcher ./src/launcher/launcher.go ./src/launcher/update.go
23 | if [ $? -ne 0 ]; then
24 | exit 1
25 | fi
26 |
27 | echo " ---- Build complete, copy assets ----"
28 |
29 | cp start.sh build/start.sh
30 | cp restic-arm restic build/
31 |
32 | chmod +x build/start.sh
33 | chmod +x build/cosmos
34 | chmod +x build/cosmos-arm64
35 | chmod +x build/cosmos-launcher
36 | chmod +x build/cosmos-launcher-arm64
37 | chmod +x build/restic
38 | chmod +x build/restic-arm
39 |
40 | cp -r static build/
41 | cp -r GeoLite2-Country.mmdb build/
42 | cp nebula-arm-cert nebula-cert nebula-arm nebula build/
43 | cp -r Logo.png build/
44 | mkdir build/images
45 | cp client/src/assets/images/icons/cosmos_gray.png build/cosmos_gray.png
46 | cp client/src/assets/images/icons/cosmos_gray.png cosmos_gray.png
47 | echo '{' > build/meta.json
48 | cat package.json | grep -E '"version"' >> build/meta.json
49 | echo ' "buildDate": "'`date`'",' >> build/meta.json
50 | echo ' "built from": "'`hostname`'"' >> build/meta.json
51 | echo '}' >> build/meta.json
52 |
53 | echo " ---- copy complete ----"
--------------------------------------------------------------------------------
/client/TEMPLATE LICENSE:
--------------------------------------------------------------------------------
1 | Built from original template from CodedThemes.
2 | The template was distributed with the licence.
3 | This licence does not cover the changes made to the template:
4 |
5 | MIT License
6 |
7 | Copyright (c) 2022 CodedThemes
8 |
9 | Permission is hereby granted, free of charge, to any person obtaining a copy
10 | of this software and associated documentation files (the "Software"), to deal
11 | in the Software without restriction, including without limitation the rights
12 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 | copies of the Software, and to permit persons to whom the Software is
14 | furnished to do so, subject to the following conditions:
15 |
16 | The above copyright notice and this permission notice shall be included in all
17 | copies or substantial portions of the Software.
18 |
19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25 | SOFTWARE.
26 |
--------------------------------------------------------------------------------
/client/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Cosmos
8 |
9 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/client/src/App.test.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import { render, screen } from '@testing-library/react';
3 | import App from './App';
4 |
5 | test('renders learn react link', () => {
6 | render();
7 | const linkElement = screen.getByText(/learn react/i);
8 | expect(linkElement).toBeInTheDocument();
9 | });
10 |
--------------------------------------------------------------------------------
/client/src/PrivateRoute.jsx:
--------------------------------------------------------------------------------
1 | import { Suspense } from "react"
2 | import { Await, Navigate } from "react-router"
3 | import isLoggedIn from "./isLoggedIn"
4 |
5 | function PrivateRoute({ children }) {
6 | return
7 |
8 | {authStatus => {
9 | switch (authStatus) {
10 | case "OK": return children
11 | default: return
12 | }
13 | }}
14 |
15 |
16 | }
17 |
18 | export default PrivateRoute
19 |
--------------------------------------------------------------------------------
/client/src/api/authentication.demo.jsx:
--------------------------------------------------------------------------------
1 | import wrap from './wrap';
2 |
3 | function login(values) {
4 | return new Promise((resolve, reject) => {
5 | resolve({
6 | "status": "ok",
7 | })
8 | });
9 | }
10 |
11 | function me() {
12 | return new Promise((resolve, reject) => {
13 | resolve({
14 | "status": "ok",
15 | })
16 | });
17 | }
18 |
19 | function logout() {
20 | return new Promise((resolve, reject) => {
21 | resolve({
22 | "status": "ok",
23 | })
24 | });
25 | }
26 |
27 | export {
28 | login,
29 | logout,
30 | me
31 | };
--------------------------------------------------------------------------------
/client/src/api/authentication.jsx:
--------------------------------------------------------------------------------
1 | import wrap from './wrap';
2 |
3 | function login(values) {
4 | return wrap(fetch('/cosmos/api/login', {
5 | method: 'POST',
6 | headers: {
7 | 'Content-Type': 'application/json'
8 | },
9 | body: JSON.stringify(values)
10 | }))
11 | }
12 |
13 | function sudo(values) {
14 | return wrap(fetch('/cosmos/api/sudo', {
15 | method: 'POST',
16 | headers: {
17 | 'Content-Type': 'application/json'
18 | },
19 | body: JSON.stringify(values)
20 | }))
21 | }
22 |
23 | function me() {
24 | return fetch('/cosmos/api/me', {
25 | method: 'GET',
26 | headers: {
27 | 'Content-Type': 'application/json'
28 | }
29 | })
30 | .then((res) => res.json())
31 | }
32 |
33 | function logout() {
34 | return wrap(fetch('/cosmos/api/logout', {
35 | method: 'GET',
36 | headers: {
37 | 'Content-Type': 'application/json'
38 | }
39 | }))
40 | }
41 |
42 | export {
43 | login,
44 | logout,
45 | me,
46 | sudo
47 | };
--------------------------------------------------------------------------------
/client/src/api/config.demo.ts:
--------------------------------------------------------------------------------
1 | import configDemo from './demo.config.json';
2 |
3 | interface Route {
4 | Name: string;
5 | }
6 |
7 | type Operation = 'replace' | 'move_up' | 'move_down' | 'delete' | 'add';
8 |
9 | function get() {
10 | return new Promise((resolve, reject) => {
11 | resolve(configDemo)
12 | });
13 | }
14 |
15 | function set(values) {
16 | return new Promise((resolve, reject) => {
17 | resolve({
18 | "status": "ok",
19 | })
20 | });
21 | }
22 |
23 | function restart() {
24 | return new Promise((resolve, reject) => {
25 | resolve({
26 | "status": "ok",
27 | })
28 | });
29 | }
30 |
31 | function canSendEmail() {
32 | return new Promise((resolve, reject) => {
33 | resolve({
34 | "status": "ok",
35 | "data": {
36 | "canSendEmail": true,
37 | }
38 | })
39 | });
40 | }
41 |
42 | async function rawUpdateRoute(routeName: string, operation: Operation, newRoute?: Route): Promise {
43 | return new Promise((resolve, reject) => {
44 | resolve()
45 | });
46 | }
47 |
48 | async function replaceRoute(routeName: string, newRoute: Route): Promise {
49 | return rawUpdateRoute(routeName, 'replace', newRoute);
50 | }
51 |
52 | async function moveRouteUp(routeName: string): Promise {
53 | return rawUpdateRoute(routeName, 'move_up');
54 | }
55 |
56 | async function moveRouteDown(routeName: string): Promise {
57 | return rawUpdateRoute(routeName, 'move_down');
58 | }
59 |
60 | async function deleteRoute(routeName: string): Promise {
61 | return rawUpdateRoute(routeName, 'delete');
62 | }
63 | async function addRoute(newRoute: Route): Promise {
64 | return rawUpdateRoute("", 'add', newRoute);
65 | }
66 |
67 | export {
68 | get,
69 | set,
70 | restart,
71 | rawUpdateRoute,
72 | replaceRoute,
73 | moveRouteUp,
74 | moveRouteDown,
75 | deleteRoute,
76 | addRoute,
77 | canSendEmail,
78 | };
--------------------------------------------------------------------------------
/client/src/api/cron.jsx:
--------------------------------------------------------------------------------
1 | import wrap from './wrap';
2 |
3 | function listen() {
4 | let protocol = 'ws://';
5 | if (window.location.protocol === 'https:') {
6 | protocol = 'wss://';
7 | }
8 | return new WebSocket(protocol + window.location.host + '/cosmos/api/listen-jobs');
9 | }
10 |
11 | function list() {
12 | return wrap(fetch('/cosmos/api/jobs', {
13 | method: 'GET',
14 | headers: {
15 | 'Content-Type': 'application/json'
16 | }
17 | }))
18 | }
19 |
20 | function run(scheduler, name) {
21 | return wrap(fetch('/cosmos/api/jobs/run', {
22 | method: 'POST',
23 | headers: {
24 | 'Content-Type': 'application/json'
25 | },
26 | body: JSON.stringify({
27 | scheduler: scheduler,
28 | name: name
29 | })
30 | }))
31 | }
32 |
33 | function get(scheduler, name) {
34 | return wrap(fetch('/cosmos/api/jobs/get', {
35 | method: 'POST',
36 | headers: {
37 | 'Content-Type': 'application/json'
38 | },
39 | body: JSON.stringify({
40 | scheduler: scheduler,
41 | name: name
42 | })
43 | }))
44 | }
45 |
46 | function stop(scheduler, name) {
47 | return wrap(fetch('/cosmos/api/jobs/stop', {
48 | method: 'POST',
49 | headers: {
50 | 'Content-Type': 'application/json'
51 | },
52 | body: JSON.stringify({
53 | scheduler: scheduler,
54 | name: name
55 | })
56 | }))
57 | }
58 |
59 | function deleteJob(name) {
60 | return wrap(fetch('/cosmos/api/jobs/delete', {
61 | method: 'POST',
62 | headers: {
63 | 'Content-Type': 'application/json'
64 | },
65 | body: JSON.stringify({
66 | name: name
67 | })
68 | }))
69 | }
70 |
71 | function runningJobs() {
72 | return wrap(fetch('/cosmos/api/jobs/running', {
73 | method: 'GET',
74 | headers: {
75 | 'Content-Type': 'application/json'
76 | }
77 | }))
78 | }
79 |
80 | export {
81 | listen,
82 | list,
83 | run,
84 | stop,
85 | get,
86 | deleteJob,
87 | runningJobs
88 | }
89 |
--------------------------------------------------------------------------------
/client/src/api/downloadButton.jsx:
--------------------------------------------------------------------------------
1 | import { ArrowDownOutlined } from "@ant-design/icons";
2 | import { Button } from "@mui/material";
3 | import ResponsiveButton from "../components/responseiveButton";
4 |
5 | export const DownloadFile = ({ filename, content, contentGetter, label, style }) => {
6 | const downloadFile = async () => {
7 | // Get the content
8 | if (contentGetter) {
9 | try {
10 | content = await contentGetter();
11 | if(typeof content !== "string") {
12 | content = JSON.stringify(content, null, 2);
13 | }
14 | } catch (e) {
15 | console.error(e);
16 | return;
17 | }
18 | }
19 |
20 | // Create a blob with the content
21 | const blob = new Blob([content], { type: "text/plain;charset=utf-8" });
22 |
23 | // Create a link element
24 | const link = document.createElement("a");
25 | link.href = URL.createObjectURL(blob);
26 | link.download = filename;
27 |
28 | // Append the link to the document (needed for Firefox)
29 | document.body.appendChild(link);
30 |
31 | // Simulate a click to start the download
32 | link.click();
33 |
34 | // Cleanup the DOM by removing the link element
35 | document.body.removeChild(link);
36 | }
37 |
38 | return (
39 | }
45 | >
46 | {label}
47 |
48 | );
49 | }
--------------------------------------------------------------------------------
/client/src/api/market.demo.ts:
--------------------------------------------------------------------------------
1 | import marketDemo from './market.demo.json';
2 |
3 | function list() {
4 | return new Promise((resolve, reject) => {
5 | resolve(marketDemo);
6 | });
7 | }
8 |
9 | export {
10 | list,
11 | };
--------------------------------------------------------------------------------
/client/src/api/market.ts:
--------------------------------------------------------------------------------
1 | import wrap from './wrap';
2 |
3 | function list() {
4 | return wrap(fetch('/cosmos/api/markets', {
5 | method: 'GET',
6 | headers: {
7 | 'Content-Type': 'application/json'
8 | },
9 | }))
10 | }
11 |
12 | export {
13 | list,
14 | };
--------------------------------------------------------------------------------
/client/src/api/metrics.jsx:
--------------------------------------------------------------------------------
1 | import wrap from './wrap';
2 |
3 | function get(metarr) {
4 | return wrap(fetch('/cosmos/api/metrics?metrics=' + metarr.join(','), {
5 | method: 'GET',
6 | headers: {
7 | 'Content-Type': 'application/json'
8 | },
9 | }))
10 | }
11 |
12 | function reset() {
13 | return wrap(fetch('/cosmos/api/reset-metrics', {
14 | method: 'GET',
15 | headers: {
16 | 'Content-Type': 'application/json'
17 | },
18 | }))
19 | }
20 |
21 | function list() {
22 | return wrap(fetch('/cosmos/api/list-metrics', {
23 | method: 'GET',
24 | headers: {
25 | 'Content-Type': 'application/json'
26 | },
27 | }))
28 | }
29 |
30 | function events(from, to, search = '', query = '', page = '', logLevel) {
31 | return wrap(fetch('/cosmos/api/events?from=' + from + '&to=' + to + '&search=' + search + '&query=' + query + '&page=' + page + '&logLevel=' + logLevel, {
32 | method: 'GET',
33 | headers: {
34 | 'Content-Type': 'application/json'
35 | },
36 | }))
37 | }
38 |
39 | export {
40 | get,
41 | reset,
42 | list,
43 | events
44 | };
--------------------------------------------------------------------------------
/client/src/api/users.demo.json:
--------------------------------------------------------------------------------
1 | {
2 | "data": [
3 | {
4 | "nickname": "Cosmos",
5 | "registerKey": "",
6 | "registerKeyExp": "0001-01-01T00:00:00Z",
7 | "role": 2,
8 | "link": "/api/user/Cosmos",
9 | "email": "",
10 | "registeredAt": "2023-04-01T16:40:34.169Z",
11 | "lastPasswordChangedAt": "0001-01-01T00:00:00Z",
12 | "createdAt": "2023-04-01T16:40:34.169Z",
13 | "lastLogin": "2023-04-30T22:17:26.463Z"
14 | },
15 | {
16 | "nickname": "Gertrude",
17 | "registerKey": "",
18 | "registerKeyExp": "0001-01-01T00:00:00Z",
19 | "role": 1,
20 | "link": "/api/user/Gertrude",
21 | "email": "",
22 | "registeredAt": "2023-04-29T12:20:09.268Z",
23 | "lastPasswordChangedAt": "2023-04-29T12:20:09.268Z",
24 | "createdAt": "2023-04-29T11:46:36.521Z",
25 | "lastLogin": "2023-04-30T16:37:38.815Z"
26 | },
27 | {
28 | "nickname": "John",
29 | "registerKey": "",
30 | "registerKeyExp": "0001-01-01T00:00:00Z",
31 | "role": 1,
32 | "link": "/api/user/John",
33 | "email": "",
34 | "registeredAt": "2023-04-29T13:31:59.04Z",
35 | "lastPasswordChangedAt": "2023-04-29T13:31:59.04Z",
36 | "createdAt": "2023-04-29T13:10:23.515Z",
37 | "lastLogin": "2023-04-29T13:33:31.982Z"
38 | },
39 | {
40 | "nickname": "Wilfred",
41 | "registerKey": "4S4ALTTl5Z9ROiY1tqFgT46xPiNk9FU9FI83WsOT15NXKhz6",
42 | "registerKeyExp": "2023-05-08T15:14:21.856Z",
43 | "role": 1,
44 | "link": "/api/user/Wilfred",
45 | "email": "wilfred@gmail.com",
46 | "registeredAt": "0001-01-01T00:00:00Z",
47 | "lastPasswordChangedAt": "0001-01-01T00:00:00Z",
48 | "createdAt": "2023-05-01T15:14:21.812Z",
49 | "lastLogin": "0001-01-01T00:00:00Z"
50 | }
51 | ],
52 | "status": "OK"
53 | }
--------------------------------------------------------------------------------
/client/src/api/wrap.js:
--------------------------------------------------------------------------------
1 | let snackit;
2 |
3 | export function wrapRClone(apicall) {
4 | return apicall.then(async (response) => {
5 | let rep = await response.json();
6 | if (response.status >= 400) {
7 | snackit(rep.error);
8 | const e = new Error(rep.error);
9 | e.status = response.status;
10 | e.code = response.status;
11 | throw e;
12 | }
13 | return rep;
14 | });
15 | };
16 |
17 | export default function wrap(apicall, noError = false) {
18 | return apicall.then(async (response) => {
19 | let rep;
20 | try {
21 | rep = await response.text();
22 |
23 | try {
24 | rep = JSON.parse(rep);
25 | } catch (err) {
26 | rep = {
27 | message: rep,
28 | status: response.status,
29 | code: response.status
30 | };
31 | }
32 | } catch (err) {
33 | if (!noError) {
34 | snackit('Server error');
35 | throw new Error('Server error');
36 | } else {
37 | const e = new Error(rep.message);
38 | e.status = rep.status;
39 | e.code = rep.code;
40 | throw e;
41 | }
42 | }
43 |
44 | if (response.status == 200) {
45 | return rep;
46 | }
47 |
48 | if (!noError && rep.message) {
49 | snackit(rep.message);
50 | }
51 |
52 | const e = new Error(rep.message);
53 | e.status = rep.status;
54 | e.code = rep.code;
55 | throw e;
56 | });
57 | }
58 |
59 | export function setSnackit(snack) {
60 | snackit = snack;
61 | }
62 |
63 | export {
64 | snackit
65 | };
--------------------------------------------------------------------------------
/client/src/assets/images/auth/AuthBackground.jsx:
--------------------------------------------------------------------------------
1 | // material-ui
2 | import { useTheme } from '@mui/material/styles';
3 | import { Box } from '@mui/material';
4 |
5 | import logo from '../icons/cosmos.png';
6 |
7 | // ==============================|| AUTH BLUR BACK SVG ||============================== //
8 |
9 | const AuthBackground = () => {
10 | const theme = useTheme();
11 | return (
12 |
13 |
14 |
15 | );
16 | };
17 |
18 | export default AuthBackground;
19 |
--------------------------------------------------------------------------------
/client/src/assets/images/const_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/const_banner.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/constellation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/constellation.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/constellation_full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/constellation_full.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/constellation_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/constellation_white.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/cosmos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/cosmos.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/cosmos_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/cosmos_gray.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/cosmos_simple_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/cosmos_simple_black.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/cosmos_simple_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/cosmos_simple_white.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/database.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/assets/images/icons/discord(1).svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/assets/images/icons/discord.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/assets/images/icons/discord_white.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/assets/images/icons/disk.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/assets/images/icons/drive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/drive.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/facebook.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/client/src/assets/images/icons/folder.svg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/folder.svg
--------------------------------------------------------------------------------
/client/src/assets/images/icons/google.svg:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/client/src/assets/images/icons/lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/lock.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/lock.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/src/assets/images/icons/part.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/icons/part.png
--------------------------------------------------------------------------------
/client/src/assets/images/icons/twitter.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/client/src/assets/images/stor_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/stor_banner.png
--------------------------------------------------------------------------------
/client/src/assets/images/users/avatar-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/users/avatar-1.png
--------------------------------------------------------------------------------
/client/src/assets/images/users/avatar-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/users/avatar-2.png
--------------------------------------------------------------------------------
/client/src/assets/images/users/avatar-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/users/avatar-3.png
--------------------------------------------------------------------------------
/client/src/assets/images/users/avatar-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/users/avatar-4.png
--------------------------------------------------------------------------------
/client/src/assets/images/users/avatar-group.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/users/avatar-group.png
--------------------------------------------------------------------------------
/client/src/assets/images/wallpaper2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/wallpaper2.jpg
--------------------------------------------------------------------------------
/client/src/assets/images/wallpaper2_light.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/azukaar/Cosmos-Server/f181788dfaf9233a59bae54554dc96b14d1039d1/client/src/assets/images/wallpaper2_light.jpg
--------------------------------------------------------------------------------
/client/src/assets/third-party/apex-chart.css:
--------------------------------------------------------------------------------
1 | .apexcharts-legend-series .apexcharts-legend-marker {
2 | left: -4px !important;
3 | top: 2px !important;
4 | }
5 |
--------------------------------------------------------------------------------
/client/src/components/@extended/AnimateButton.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | // third-party
4 | import { motion } from 'framer-motion';
5 |
6 | // ==============================|| ANIMATION BUTTON ||============================== //
7 |
8 | export default function AnimateButton({ children, type }) {
9 | switch (type) {
10 | case 'rotate': // only available in paid version
11 | case 'slide': // only available in paid version
12 | case 'scale': // only available in paid version
13 | default:
14 | return (
15 |
16 | {children}
17 |
18 | );
19 | }
20 | }
21 |
22 | AnimateButton.propTypes = {
23 | children: PropTypes.node,
24 | type: PropTypes.oneOf(['slide', 'scale', 'rotate'])
25 | };
26 |
27 | AnimateButton.defaultProps = {
28 | type: 'scale'
29 | };
30 |
--------------------------------------------------------------------------------
/client/src/components/@extended/Dot.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 |
3 | // material-ui
4 | import { useTheme } from '@mui/material/styles';
5 | import { Box } from '@mui/material';
6 |
7 | const Dot = ({ color, size }) => {
8 | const theme = useTheme();
9 | let main;
10 | switch (color) {
11 | case 'secondary':
12 | main = theme.palette.secondary.main;
13 | break;
14 | case 'error':
15 | main = theme.palette.error.main;
16 | break;
17 | case 'warning':
18 | main = theme.palette.warning.main;
19 | break;
20 | case 'info':
21 | main = theme.palette.info.main;
22 | break;
23 | case 'success':
24 | main = theme.palette.success.main;
25 | break;
26 | case 'primary':
27 | default:
28 | main = theme.palette.primary.main;
29 | }
30 |
31 | return (
32 |
40 | );
41 | };
42 |
43 | Dot.propTypes = {
44 | color: PropTypes.string,
45 | size: PropTypes.number
46 | };
47 |
48 | export default Dot;
49 |
--------------------------------------------------------------------------------
/client/src/components/@extended/Transitions.jsx:
--------------------------------------------------------------------------------
1 | import PropTypes from 'prop-types';
2 | import { forwardRef } from 'react';
3 |
4 | // material-ui
5 | import { Fade, Box, Grow } from '@mui/material';
6 |
7 | // ==============================|| TRANSITIONS ||============================== //
8 |
9 | const Transitions = forwardRef(({ children, position, type, ...others }, ref) => {
10 | let positionSX = {
11 | transformOrigin: '0 0 0'
12 | };
13 |
14 | switch (position) {
15 | case 'top-right':
16 | case 'top':
17 | case 'bottom-left':
18 | case 'bottom-right':
19 | case 'bottom':
20 | case 'top-left':
21 | default:
22 | positionSX = {
23 | transformOrigin: '0 0 0'
24 | };
25 | break;
26 | }
27 |
28 | return (
29 |
30 | {type === 'grow' && (
31 |
32 | {children}
33 |
34 | )}
35 | {type === 'fade' && (
36 |
44 | {children}
45 |
46 | )}
47 |
48 | );
49 | });
50 |
51 | Transitions.propTypes = {
52 | children: PropTypes.node,
53 | type: PropTypes.oneOf(['grow', 'fade', 'collapse', 'slide', 'zoom']),
54 | position: PropTypes.oneOf(['top-left', 'top-right', 'top', 'bottom-left', 'bottom-right', 'bottom'])
55 | };
56 |
57 | Transitions.defaultProps = {
58 | type: 'grow',
59 | position: 'top-left'
60 | };
61 |
62 | export default Transitions;
63 |
--------------------------------------------------------------------------------
/client/src/components/Loadable.jsx:
--------------------------------------------------------------------------------
1 | import { Suspense } from 'react';
2 |
3 | // project import
4 | import Loader from './Loader';
5 |
6 | // ==============================|| LOADABLE - LAZY LOADING ||============================== //
7 |
8 | const Loadable = (Component) => (props) =>
9 | (
10 | }>
11 |
12 |
13 | );
14 |
15 | export default Loadable;
16 |
--------------------------------------------------------------------------------
/client/src/components/Loader.jsx:
--------------------------------------------------------------------------------
1 | // material-ui
2 | import { styled } from '@mui/material/styles';
3 | import LinearProgress from '@mui/material/LinearProgress';
4 |
5 | // loader style
6 | const LoaderWrapper = styled('div')(({ theme }) => ({
7 | position: 'fixed',
8 | top: 0,
9 | left: 0,
10 | zIndex: 2001,
11 | width: '100%',
12 | '& > * + *': {
13 | marginTop: theme.spacing(2)
14 | }
15 | }));
16 |
17 | // ==============================|| Loader ||============================== //
18 |
19 | const Loader = () => (
20 |
21 |
22 |
23 | );
24 |
25 | export default Loader;
26 |
--------------------------------------------------------------------------------
/client/src/components/Logo/Logo.jsx:
--------------------------------------------------------------------------------
1 | // material-ui
2 | import { useTheme } from '@mui/material/styles';
3 | import { fontWeight } from '@mui/system';
4 |
5 | import logo from '../../assets/images/icons/cosmos_simple_black.png';
6 | import logoDark from '../../assets/images/icons/cosmos_simple_white.png';
7 |
8 | // ==============================|| LOGO SVG ||============================== //
9 |
10 | const Logo = () => {
11 | const theme = useTheme();
12 | const isLight = theme.palette.mode === 'light';
13 |
14 | return (
15 | /**
16 | * if you want to use image instead of svg uncomment following, and comment out