Compare commits

..

296 Commits

Author SHA1 Message Date
link
752134942a V0.3.3 (#334)
* switch branches

* update user interface

* switch branch

* switch branch

* change branch

* submit 0.3.3

* Update UI

* update version function

* Update UI

* Update user.go

* update disk

* update person info interface

* Update main.go

* Update UI

* update alpha

* updata ui

* Update assist.sh

* Update assist.sh

* update update function

* add upload sh

* Update init.go

* upload shell script

* Update system.go

* update update.sh

* Update init.go

* update update.sh

* update update.sh

* Update update.sh

* Update system.go

* Update system.go

* update UI

* Update CHANGELOG.md
2022-07-01 15:19:16 +08:00
link
faf683a02c V0.3.3 (#331)
* switch branches

* update user interface

* switch branch

* switch branch

* change branch

* submit 0.3.3

* Update UI
2022-06-29 11:22:12 +08:00
link
f99f49dd7e V0.3.3 (#330)
* switch branches

* update user interface

* switch branch

* switch branch

* change branch

* submit 0.3.3
2022-06-29 11:09:58 +08:00
David Tippett
b0dc30277b Adding simple Developing file (#311)
* Adding developing guide with env setup

Signed-off-by: David Tippett <dtaivpp@gmail.com>

* Fixing formatting on developing guide

Signed-off-by: David Tippett <dtaivpp@gmail.com>

* Switching nav to bulleted list

Signed-off-by: David Tippett <dtaivpp@gmail.com>

* Forgot a word o_o

Signed-off-by: David Tippett <dtaivpp@gmail.com>
2022-06-21 08:57:55 +08:00
a624669980@163.com
d91fef0a19 Update route.go 2022-06-16 21:20:10 +08:00
a624669980@163.com
6bb044ab04 Update version.go 2022-06-16 20:11:11 +08:00
a624669980@163.com
78479f9604 Update file.go 2022-06-16 16:57:13 +08:00
a624669980@163.com
8fe893847f Update CHANGELOG.md 2022-06-16 15:52:50 +08:00
link
f506d6ce49 Dev (#298)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval

* Update UI

* fixed bug

- Fix the problem of application opening failure on non-80 ports
- Modify port failure problem
- Modify environment variables disappearing problem

* update version function

* Fix version update issues

* fixed bug

- [System] Fixed the issue of widgets displaying wrongly on mobile devices.
- [App] Fix the problem of application opening failure on non-80 ports ([#283](https://github.com/IceWhaleTech/CasaOS/issues/283) [#280](https://github.com/IceWhaleTech/CasaOS/issues/280))
- [System] Modify port failure problem ([#282](https://github.com/IceWhaleTech/CasaOS/issues/282))
- [App]Modify environment variables disappearing problem([#284](https://github.com/IceWhaleTech/CasaOS/issues/284))
- [System]Fix no update alert([#278](https://github.com/IceWhaleTech/CasaOS/issues/278))
- [System] Fixed some bugs of application cpu usage and memory staging([#272]https://github.com/IceWhaleTech/CasaOS/issues/272)

* update UI

* Update CHANGELOG.md

* update app service

* update ui

* Fix application installation host mode error

* update ui

* Update UI
2022-06-15 19:01:26 +08:00
link
5d7c5ba120 Dev (#296)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval

* Update UI

* fixed bug

- Fix the problem of application opening failure on non-80 ports
- Modify port failure problem
- Modify environment variables disappearing problem

* update version function

* Fix version update issues

* fixed bug

- [System] Fixed the issue of widgets displaying wrongly on mobile devices.
- [App] Fix the problem of application opening failure on non-80 ports ([#283](https://github.com/IceWhaleTech/CasaOS/issues/283) [#280](https://github.com/IceWhaleTech/CasaOS/issues/280))
- [System] Modify port failure problem ([#282](https://github.com/IceWhaleTech/CasaOS/issues/282))
- [App]Modify environment variables disappearing problem([#284](https://github.com/IceWhaleTech/CasaOS/issues/284))
- [System]Fix no update alert([#278](https://github.com/IceWhaleTech/CasaOS/issues/278))
- [System] Fixed some bugs of application cpu usage and memory staging([#272]https://github.com/IceWhaleTech/CasaOS/issues/272)

* update UI

* Update CHANGELOG.md

* update app service

* update ui
2022-06-15 10:22:27 +08:00
link
eedffd7c19 Dev (#292)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval

* Update UI

* fixed bug

- Fix the problem of application opening failure on non-80 ports
- Modify port failure problem
- Modify environment variables disappearing problem

* update version function

* Fix version update issues

* fixed bug

- [System] Fixed the issue of widgets displaying wrongly on mobile devices.
- [App] Fix the problem of application opening failure on non-80 ports ([#283](https://github.com/IceWhaleTech/CasaOS/issues/283) [#280](https://github.com/IceWhaleTech/CasaOS/issues/280))
- [System] Modify port failure problem ([#282](https://github.com/IceWhaleTech/CasaOS/issues/282))
- [App]Modify environment variables disappearing problem([#284](https://github.com/IceWhaleTech/CasaOS/issues/284))
- [System]Fix no update alert([#278](https://github.com/IceWhaleTech/CasaOS/issues/278))
- [System] Fixed some bugs of application cpu usage and memory staging([#272]https://github.com/IceWhaleTech/CasaOS/issues/272)

* update UI

* Update CHANGELOG.md
2022-06-14 18:22:02 +08:00
link
0885c1386d Dev (#291)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval

* Update UI

* fixed bug

- Fix the problem of application opening failure on non-80 ports
- Modify port failure problem
- Modify environment variables disappearing problem

* update version function

* Fix version update issues

* fixed bug

- [System] Fixed the issue of widgets displaying wrongly on mobile devices.
- [App] Fix the problem of application opening failure on non-80 ports ([#283](https://github.com/IceWhaleTech/CasaOS/issues/283) [#280](https://github.com/IceWhaleTech/CasaOS/issues/280))
- [System] Modify port failure problem ([#282](https://github.com/IceWhaleTech/CasaOS/issues/282))
- [App]Modify environment variables disappearing problem([#284](https://github.com/IceWhaleTech/CasaOS/issues/284))
- [System]Fix no update alert([#278](https://github.com/IceWhaleTech/CasaOS/issues/278))
- [System] Fixed some bugs of application cpu usage and memory staging([#272]https://github.com/IceWhaleTech/CasaOS/issues/272)

* update UI
2022-06-14 18:11:15 +08:00
link
0297fe67af Dev (#290)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval

* Update UI

* fixed bug

- Fix the problem of application opening failure on non-80 ports
- Modify port failure problem
- Modify environment variables disappearing problem

* update version function

* Fix version update issues

* fixed bug

- [System] Fixed the issue of widgets displaying wrongly on mobile devices.
- [App] Fix the problem of application opening failure on non-80 ports ([#283](https://github.com/IceWhaleTech/CasaOS/issues/283) [#280](https://github.com/IceWhaleTech/CasaOS/issues/280))
- [System] Modify port failure problem ([#282](https://github.com/IceWhaleTech/CasaOS/issues/282))
- [App]Modify environment variables disappearing problem([#284](https://github.com/IceWhaleTech/CasaOS/issues/284))
- [System]Fix no update alert([#278](https://github.com/IceWhaleTech/CasaOS/issues/278))
- [System] Fixed some bugs of application cpu usage and memory staging([#272]https://github.com/IceWhaleTech/CasaOS/issues/272)

* update UI
2022-06-14 18:10:22 +08:00
link
3f53e6f33b Dev (#288)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval

* Update UI

* fixed bug

- Fix the problem of application opening failure on non-80 ports
- Modify port failure problem
- Modify environment variables disappearing problem

* update version function

* Fix version update issues
2022-06-14 13:24:53 +08:00
link
94d0efdb12 Dev (#285)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval

* Update UI

* fixed bug

- Fix the problem of application opening failure on non-80 ports
- Modify port failure problem
- Modify environment variables disappearing problem
2022-06-13 20:43:19 +08:00
link
1e821d1c10 Dev (#277)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval

* Update UI
2022-06-10 15:32:27 +08:00
link
2c80b53ee8 Dev (#276)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval
2022-06-10 15:16:56 +08:00
link
c33af66c6e Dev (#275)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution

* Update send data interval
2022-06-10 14:47:50 +08:00
link
9d47874ae3 Dev (#274)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution
2022-06-10 13:33:53 +08:00
link
c7b7a30210 Dev (#264)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI
2022-06-08 19:44:05 +08:00
link
fde665cd4d Dev (#263)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate
2022-06-08 19:32:05 +08:00
link
eaf2341a2a Dev (#262)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate
2022-06-08 19:31:01 +08:00
link
d4bed3e5c7 Dev (#261)
* fix bug

* updata UI

* 0.3.2

### Added

- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))

### Changed

- [Apps] Hide the display of non-essential environment variables in the application.
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI
2022-06-08 18:19:45 +08:00
Tiger Wang (王豫)
fcb2b3f5a5 Create config.yml 2022-06-02 20:30:00 -04:00
link
60349c941a Update demo.yml 2022-05-18 16:59:43 +08:00
link
11bc70a710 Update demo.yml 2022-05-18 16:58:33 +08:00
link
665766019f Update demo.yml 2022-05-18 16:39:59 +08:00
link
57cef9624c Dev (#199)
* fix bug

* updata UI
2022-05-17 16:31:23 +08:00
link
6bd41ad016 fix bug (#198) 2022-05-17 12:57:34 +08:00
link
05425d638f Update CHANGELOG.md 2022-05-16 20:45:38 +08:00
link
bd5a2e35d4 update ui (#192) 2022-05-16 15:57:54 +08:00
link
123e7e8758 Merge pull request #183 from IceWhaleTech/dev
Update UI
2022-05-13 20:27:53 +08:00
LinkLeong
1ec3e2e9fb Update UI 2022-05-13 20:27:26 +08:00
link
0719c3cc0c Merge pull request #182 from IceWhaleTech/dev
update api url
2022-05-13 19:11:28 +08:00
LinkLeong
0a4ceb7c4c update api url 2022-05-13 19:09:35 +08:00
link
655f59f00a Merge pull request #181 from IceWhaleTech/dev
Dev
2022-05-13 18:56:35 +08:00
LinkLeong
5289f471d6 Update .gitignore 2022-05-13 18:55:52 +08:00
LinkLeong
59597befb6 delete github.com 2022-05-13 18:55:34 +08:00
link
df2477a12f Merge pull request #179 from IceWhaleTech/dev
Dev
2022-05-13 18:21:44 +08:00
LinkLeong
b709abe682 Merge branch 'main' into dev 2022-05-13 18:15:56 +08:00
LinkLeong
d0f3dc806e New Feature
- [Apps] This is a feature that has been highly requested by the community. Import the original Docker application into CasaOS. Now it's easy to import with just a few clicks!
- [Apps] App list supports a custom sorting function! You can arrange apps in different orders by dragging the icons.
- [Apps] App custom installation supports Docker Compose configuration import in YAML format.
- [Files] Added thumbnail preview function for image files.
- [Connect] Multiple CasaConenct devices in the LAN will be transmitted through the LAN network.
- [System] Added a switch for auto-mounting USB disk devices.

🎈 Enhancement
- [System] Optimized the system update alert, you will see the new version update log from the next version.
- [Apps] Added live preview for icons in custom installed apps.
- [Apps] Optimized the input of WebUI.
- [Files] Completely updated the image preview, now it supports switching all images in the same folder, as well as dragging, zooming, rotating and resetting.
- [Widgets] Added color levels for CPU and RAM charts.
- [Conenct] Optimized the display of the right-click menu of the Connect friends list.

🎈 Changed
- [Files] Change the initial display directory to /DATA

🐞 Fixed
- [System] Fixed an issue with Raspberry Pi devices failing to boot using USB disks. (Achieved by disabling USB disk auto-mount)
- [Apps] Fixed the issue that some Docker CLI commands failed to import.
- [Apps] Fixed the issue that the app is not easily recognized in /DATA/AppData directory and docker command line after installation, it will be shown as the app name. (Newly installed apps only)
- [Apps] Fixed the issue that Pi-hole cannot be launched after installation in the app store.
- [Apps] Fixed the issue that apps cannot be updated with WatchTower.
- [Files] Fixed the issue that when there is an upload task, the task status is lost after closing Files.
2022-05-13 18:12:26 +08:00
LinkLeong
92d085acf9 update changelog 2022-05-05 13:46:55 +08:00
link
20dbae21c8 Update github.go 2022-04-24 17:53:57 +08:00
link
9258cb4b9e Merge pull request #151 from IceWhaleTech/dev
Update UI
2022-04-08 14:44:28 +08:00
link
d9794851f9 Update UI 2022-04-08 14:44:02 +08:00
link
1fcb530ff2 Merge pull request #149 from IceWhaleTech/dev
Update UI
2022-04-07 16:20:19 +08:00
link
364d411438 Update UI 2022-04-07 16:17:47 +08:00
link
0dacc5db12 Merge pull request #141 from igorpecovnik/patch-1
Tested on Rockpro64, Odroid C2, Neo2, Cubox-i, amd64
2022-04-06 12:14:38 +08:00
link
fcbff194d2 Merge branch 'main' into patch-1 2022-04-06 12:14:31 +08:00
link
04e93b0e3c Merge pull request #138 from alvarosamudio/main
add a new OS to systems
2022-04-06 12:12:07 +08:00
link
2eff7fa8bc Merge pull request #148 from IceWhaleTech/dev
Dev
2022-04-06 12:11:39 +08:00
link
dd0645ee0f Add CasaConnect function 2022-04-06 12:10:51 +08:00
Igor Pečovnik
c93aa6286e Tested on Rockpro64, Odroid C2, Neo2, Cubox-i, x86
Basically it should work on all.
https://www.armbian.com/download/
https://docs.armbian.com/#what-is-the-difference-between-armbian-and-debianubuntu
2022-03-29 15:57:16 +02:00
Alvaro Samudio
bf7b32309f add Elementary OS 6.1 Jólnir to systems 2022-03-25 14:49:21 +00:00
Alvaro Samudio
cd779448ce add Deepin to systems 2022-03-25 14:41:05 +00:00
link
c3b2c1d599 Merge branch 'main' into dev 2022-03-18 11:41:04 +08:00
link
b7949e100f Merge Branches 2022-03-18 11:40:38 +08:00
link
80d24570d6 Merge pull request #130 from IceWhaleTech/Adding-ipv6-Support
fixed
2022-03-18 11:31:05 +08:00
link
539b72a388 fixed 2022-03-18 11:30:06 +08:00
link
a7d15a896e Need to fix bugs 2022-03-18 11:13:07 +08:00
link
9796c5aad7 prepare for test 2022-03-16 15:41:14 +08:00
link
892cd99eb3 Add some acquaintance network interface 2022-03-11 18:01:09 +08:00
link
02cb4cd392 Merge pull request #126 from IceWhaleTech/dev
fixed file upload bug
2022-03-10 16:26:00 +08:00
link
9213f9e379 fixed file upload bug 2022-03-10 16:25:33 +08:00
link
4473056d5c Merge pull request #125 from IceWhaleTech/dev
upload file manage
2022-03-10 13:41:15 +08:00
link
07e96511cd upload file manage 2022-03-10 13:40:42 +08:00
link
ce1dc52bc2 Merge pull request #123 from IceWhaleTech/dev
update file
2022-03-09 19:44:47 +08:00
link
d890b16644 update file 2022-03-09 19:44:08 +08:00
link
5737936318 Merge pull request #122 from IceWhaleTech/dev
Dev
2022-03-09 16:38:18 +08:00
link
33acfababd new file manager
Added CasaOS own file manager, now you can browse, upload, download files from the system, even edit code online, preview photos and videos through it. It will appear in the first position of Apps.
Added CPU core count display and memory capacity display.
2022-03-09 16:37:03 +08:00
link
28c1a52171 Determine the hole punching technique 2022-02-28 14:14:39 +08:00
link
892eef424c Merge branch 'main' into dev 2022-02-18 19:14:30 +08:00
link
f3c73ba79b Update usb-mount.sh 2022-02-18 19:14:11 +08:00
link
c6928c333d Add websocket 2022-02-18 19:06:03 +08:00
link
63c6c2cebb Merge pull request #111 from IceWhaleTech/dev
Delete CasaOS-linux-amd64
2022-02-17 19:22:14 +08:00
link
6cba025679 Delete CasaOS-linux-amd64 2022-02-17 19:21:19 +08:00
link
d25b93c972 Merge pull request #110 from IceWhaleTech/dev
Dev
2022-02-17 18:53:54 +08:00
link
b14861703c Merge branch 'dev' of ssh://github.com/IceWhaleTech/CasaOS into dev 2022-02-17 18:53:29 +08:00
link
32604225ce update ui 2022-02-17 18:52:14 +08:00
link
f623b29c38 Merge pull request #109 from IceWhaleTech/dev
Dev
2022-02-17 18:47:44 +08:00
link
94ae6ee8ec Merge branch 'main' into dev 2022-02-17 18:47:36 +08:00
link
5115bf72e1 update desc 2022-02-17 18:44:51 +08:00
link
e1a928cd78 Fixed issues 2022-02-17 18:43:25 +08:00
link
3977519c43 Update assist.sh 2022-01-30 11:21:24 +08:00
link
2f87834ac9 Merge pull request #93 from IceWhaleTech/dev
Update route.go
2022-01-28 16:25:01 +08:00
link
53335012d8 Update route.go 2022-01-28 16:24:28 +08:00
link
9d6302f7e3 Merge pull request #92 from IceWhaleTech/dev
Update UI
2022-01-28 16:14:59 +08:00
link
20950e2a60 Update UI 2022-01-28 16:14:35 +08:00
link
0e0e507f8f Merge pull request #91 from IceWhaleTech/dev
update ui
2022-01-28 15:35:15 +08:00
link
46e14617b6 update ui 2022-01-28 15:34:32 +08:00
link
903c73fafb Merge pull request #90 from IceWhaleTech/dev
update web
2022-01-28 14:33:40 +08:00
link
42a56df4a5 update web 2022-01-28 14:32:49 +08:00
link
493dc5c032 Merge pull request #89 from IceWhaleTech/dev
Compatible with more types of disks
2022-01-28 14:06:58 +08:00
link
9a73bc2a18 Compatible with more types of disks
Add usb display
2022-01-28 14:06:27 +08:00
link
55a9acd9f6 Merge pull request #85 from IceWhaleTech/dev
Apply multilingual support
2022-01-26 18:51:14 +08:00
link
d060968b7a Apply multilingual support 2022-01-26 18:50:34 +08:00
link
88a7f53130 Merge pull request #82 from IceWhaleTech/dev
Dev
2022-01-26 11:33:33 +08:00
link
26e5b18a5d Merge branch 'dev' of ssh://github.com/IceWhaleTech/CasaOS into dev 2022-01-26 11:33:02 +08:00
link
011ace96f6 update ui 2022-01-26 11:32:57 +08:00
link
5c00655d14 Merge pull request #81 from IceWhaleTech/dev
Dev
2022-01-26 10:46:50 +08:00
link
eb36c262db Merge branch 'main' into dev 2022-01-26 10:46:43 +08:00
link
29d1861545 Merge branch 'main' into dev 2022-01-26 10:45:11 +08:00
link
3c9b410693 update dependency 2022-01-26 10:44:55 +08:00
link
4c3b41433b Update assist.sh 2022-01-24 22:06:31 +08:00
link
1fd13668c0 Merge pull request #78 from IceWhaleTech/dev
Dev
2022-01-24 17:22:48 +08:00
link
d1ab7261a6 Update usb-mount.sh 2022-01-24 17:21:43 +08:00
link
0fc65bcb3a update mount path 2022-01-24 17:08:28 +08:00
link
f1ce8bfd99 Merge pull request #77 from IceWhaleTech/dev
update disk
2022-01-24 11:19:47 +08:00
link
3f472f1864 update disk 2022-01-24 11:19:04 +08:00
link
229d94cae7 Merge pull request #74 from IceWhaleTech/dev
Fixed Storage Panel
2022-01-21 17:50:44 +08:00
link
c28e1bbf93 Fixed Storage Panel 2022-01-21 17:50:12 +08:00
link
a840029000 Merge pull request #73 from IceWhaleTech/dev
update UI
2022-01-20 18:45:54 +08:00
link
aad2646cf2 Merge branch 'dev' of ssh://github.com/IceWhaleTech/CasaOS into dev 2022-01-20 18:45:17 +08:00
link
ca1f8ad73e Update UI 2022-01-20 18:44:55 +08:00
link
dea02763a2 Update UI 2022-01-20 18:44:40 +08:00
link
ea67385a64 Merge pull request #72 from IceWhaleTech/dev
Storage Manager
2022-01-20 18:41:56 +08:00
link
fa2daa2767 Merge branch 'main' into dev 2022-01-20 18:41:49 +08:00
link
fcb906aa85 Storage Manager
Fix the app store classification problem
Fix the application market classification problem
2022-01-20 18:38:59 +08:00
老竭力
489a617126 Update casa.yml 2022-01-04 16:22:38 +08:00
老竭力
601e7ce10b Update casa.yml 2022-01-04 14:51:09 +08:00
老竭力
4a6fc9a945 Update system.go 2022-01-04 14:47:46 +08:00
老竭力
b377af1d24 Update casa.yml 2021-12-30 19:17:11 +08:00
老竭力
3fc00f8da7 Update casa.yml 2021-12-30 19:13:40 +08:00
老竭力
6e39fe5f8c Update casa.yml 2021-12-30 19:04:37 +08:00
老竭力
20c240a123 Update casa.yml 2021-12-30 19:00:11 +08:00
老竭力
3ea9fc0de0 Update casa.yml 2021-12-30 18:52:37 +08:00
老竭力
b80b08ef07 Update casa.yml 2021-12-30 18:50:45 +08:00
老竭力
505af8d101 Update casa.yml 2021-12-30 18:46:17 +08:00
老竭力
ae35a6d291 Update casa.yml 2021-12-30 18:44:07 +08:00
John Guan
2b95c07a47 Update casa.yml 2021-12-30 18:16:19 +08:00
John Guan
27a011e715 Update casa.yml 2021-12-30 18:01:01 +08:00
link
476831a12f Merge pull request #65 from IceWhaleTech/dev
update action system
2021-12-30 16:59:05 +08:00
link
9675eff69e update action system 2021-12-30 16:58:24 +08:00
link
85a044246e Merge pull request #64 from IceWhaleTech/dev
update action system
2021-12-30 16:53:32 +08:00
link
5c41fbcf3d update action system 2021-12-30 16:52:58 +08:00
link
6baab7a525 Merge pull request #63 from IceWhaleTech/dev
update action system
2021-12-30 16:42:39 +08:00
link
ab3b5a9077 update action system 2021-12-30 16:41:16 +08:00
link
5811c271b2 Merge pull request #62 from IceWhaleTech/dev
update web
2021-12-30 16:20:50 +08:00
link
cf5387346d update web 2021-12-30 16:20:30 +08:00
link
8df63c6c5c Merge pull request #60 from IceWhaleTech/dev
New App Store
2021-12-29 16:42:56 +08:00
link
1d17d27c96 New App Store 2021-12-29 16:42:20 +08:00
John Guan
bdcbae69a5 Update README.md 2021-12-14 11:41:42 +08:00
John Guan
cdbc3437be Update README.md 2021-12-14 10:40:17 +08:00
link
8940b520e0 Merge pull request #53 from IceWhaleTech/dev
update ui
2021-12-11 15:44:55 +08:00
link
1d62fbd670 update ui 2021-12-11 15:44:17 +08:00
link
a0b56d809e Merge pull request #52 from IceWhaleTech/dev
update cpu changes when the application is removed
2021-12-10 18:08:49 +08:00
link
f1f6d33e26 update cpu changes when the application is removed 2021-12-10 18:08:02 +08:00
link
f292edd2ba Merge pull request #51 from IceWhaleTech/dev
update app.go
2021-12-10 17:14:46 +08:00
link
caa9b50b65 update app.go 2021-12-10 17:14:01 +08:00
link
61b824065b Merge pull request #50 from IceWhaleTech/dev
update stats steam
2021-12-10 16:34:29 +08:00
link
9a900b2ca0 update stats steam 2021-12-10 16:33:39 +08:00
link
4c1cbc98a4 Merge pull request #49 from IceWhaleTech/dev
fixed bug
2021-12-10 14:18:01 +08:00
link
8660b95756 fixed bug 2021-12-10 14:17:36 +08:00
link
e7ebdc040f Merge pull request #48 from IceWhaleTech/dev
feat: Multiple updates
2021-12-09 19:03:45 +08:00
link
6c235d3f2a feat: Multiple updates
1.Add the function of modifying the WebUI port.
2.Add the function to modify the search engine.
3.Add the multi-language function and add Chinese translation.
4.Add detailed CPU and memory statistics.
2021-12-09 19:02:41 +08:00
link
997d912f4d Merge branch 'main' into dev 2021-12-06 17:12:53 +08:00
link
2508a4e07d Pull Submit 2021-12-06 17:08:36 +08:00
link
90b997337c Merge pull request #42 from xuchaoa/main
format code and fix wrong spell
2021-12-06 03:07:48 -06:00
xuc2
0bb3c92335 format code and fix wrong spell 2021-12-03 16:48:07 +08:00
link
7fd539c57e Merge pull request #40 from IceWhaleTech/dev
update volume path
2021-12-01 20:49:48 -06:00
link
52bd22ab2b update volume path 2021-12-02 10:49:02 +08:00
John Guan
46e9458e82 Update demo.yml 2021-12-01 21:58:57 +08:00
John Guan
3f5595e794 Update demo.yml 2021-12-01 21:54:02 +08:00
John Guan
d22cc7d3f6 Update demo.yml 2021-12-01 21:49:23 +08:00
John Guan
eb03a3e6c7 Update demo.yml 2021-12-01 21:46:34 +08:00
John Guan
65cc1f4752 Update demo.yml 2021-12-01 21:36:44 +08:00
John Guan
99db197a39 Update demo.yml 2021-12-01 21:31:17 +08:00
John Guan
7e2a5d553c Update demo.yml 2021-12-01 21:14:34 +08:00
John Guan
f02337b83b Update demo.yml 2021-12-01 21:09:18 +08:00
John Guan
f66b67b0c9 Update demo.yml 2021-12-01 21:05:52 +08:00
John Guan
91087b5341 Update demo.yml 2021-12-01 21:01:40 +08:00
John Guan
c67191d8c2 Update demo.yml 2021-12-01 20:45:36 +08:00
John Guan
0fac461783 Update demo.yml 2021-12-01 20:11:32 +08:00
John Guan
ec5bc922e7 Update demo.yml 2021-12-01 20:07:44 +08:00
John Guan
7194792c3f Update demo.yml 2021-12-01 19:51:36 +08:00
John Guan
76c8bade7f Update demo.yml 2021-12-01 19:50:30 +08:00
John Guan
126857fab0 Create demo.yml 2021-12-01 19:43:50 +08:00
link
9ca57e105e Merge pull request #38 from IceWhaleTech/dev
add uninstall.sh
2021-12-01 02:50:01 -06:00
link
2651140095 add uninstall.sh 2021-12-01 16:48:38 +08:00
link
14175bc438 Merge pull request #37 from IceWhaleTech/dev
fixed bug
2021-12-01 02:39:22 -06:00
link
956328da86 fixed bug 2021-12-01 16:25:56 +08:00
link
cc46a96a75 Merge pull request #27 from IceWhaleTech/v0.2.1
fixed path error
2021-11-25 05:44:33 -06:00
link
049090444e fixed path error 2021-11-25 19:41:25 +08:00
link
796c25b7a5 Merge pull request #26 from IceWhaleTech/v0.2.1
add sync function
2021-11-25 03:35:47 -06:00
link
9057290188 add sync function 2021-11-25 17:35:01 +08:00
John Guan
fcc57bb734 Update README.md 2021-11-24 18:35:14 +08:00
link
a98f5e087c Merge pull request #24 from IceWhaleTech/add-license-1
Create LICENSE
2021-11-19 03:34:09 -06:00
link
403d563869 Create LICENSE 2021-11-19 17:33:57 +08:00
John Guan
88c15104b4 update README.md 2021-11-12 17:52:16 +08:00
link
6176289b88 Merge pull request #23 from IceWhaleTech/v0.2.1
update volumes
2021-11-10 03:51:14 -06:00
link
5cfd44da79 update volumes 2021-11-10 17:50:46 +08:00
link
2437da33a6 Merge pull request #21 from IceWhaleTech/v0.2.1
Update system.go
2021-11-09 05:11:58 -06:00
link
49ca0af746 Update system.go 2021-11-09 19:10:18 +08:00
link
9440b89fab Merge pull request #20 from IceWhaleTech/v0.2.1
Fixing bugs
2021-11-09 04:58:59 -06:00
link
f020c1162d Fixing bugs
Resolve application installation path errors
2021-11-09 18:57:50 +08:00
link
120fb2cea2 Merge pull request #19 from IceWhaleTech/v0.2.1
update ui
2021-11-04 03:04:37 -05:00
link
37130966cf update ui 2021-11-04 16:03:33 +08:00
link
795b82c42c Update issue templates 2021-11-04 15:26:36 +08:00
link
57ad33d53a Merge pull request #17 from IceWhaleTech/v0.2.1
update ui
2021-11-03 06:06:21 -05:00
link
a6ceee7bc0 update ui 2021-11-03 19:05:41 +08:00
link
44bb05fad0 Merge pull request #16 from IceWhaleTech/v0.2.1
New App Store
2021-11-03 04:08:45 -05:00
link
a5fee0ee97 New App Store
Add App Store for installation
Fix favicon display in dark mode
2021-11-03 17:07:46 +08:00
John Guan
da99b2d01a Update README.md 2021-11-03 10:51:32 +08:00
link
1433e3297b Merge pull request #15 from IceWhaleTech/v0.2.1
Update UI
2021-10-29 06:36:37 -05:00
link
cad7af13af Update UI 2021-10-29 19:35:51 +08:00
link
39cb8904a3 Merge pull request #14 from IceWhaleTech/v0.2.1
V0.2.1
2021-10-29 05:39:54 -05:00
link
2ed372b3cd Update system.go 2021-10-29 18:39:07 +08:00
link
8bca76b78b Add new features
add casaOS logs
add application  terminal
add application  logs
2021-10-29 18:37:27 +08:00
link
595e0f28af Merge pull request #13 from IceWhaleTech/v0.2.1
update disk display
2021-10-27 06:04:34 -05:00
link
4939fe10aa update disk display
add casaos logs api
update ui
2021-10-27 19:03:59 +08:00
link
d2962a8e70 Merge pull request #12 from IceWhaleTech/v0.2.1
Add some features
2021-10-27 04:29:44 -05:00
link
d7d53d639b Add some features
Add terminal
Improve single user management function
2021-10-27 17:27:46 +08:00
link
d2ff1b0506 Merge pull request #10 from IceWhaleTech/v0.2.1
update UI
2021-10-22 05:28:34 -05:00
link
7191735737 update UI 2021-10-22 18:28:00 +08:00
link
21f3fd85d9 Merge pull request #9 from IceWhaleTech/v0.2.1
update initialization config
2021-10-22 04:59:00 -05:00
link
ba77e07e36 update initialization config
initialization user config
2021-10-22 17:57:22 +08:00
link
0d6e7ca339 Merge pull request #8 from IceWhaleTech/v0.2.1
update route.go
2021-10-22 04:19:53 -05:00
link
b1d5d9858b update route.go 2021-10-22 17:19:07 +08:00
link
4f06be0e45 Merge pull request #7 from IceWhaleTech/v0.2.1
update webui
2021-10-22 04:10:24 -05:00
link
812ffd56a8 update webui 2021-10-22 17:09:43 +08:00
老竭力
6ba845eec5 Update issue templates 2021-10-22 16:58:29 +08:00
link
4fa72289ed Merge pull request #6 from IceWhaleTech/v0.2.1
remove build file
2021-10-22 03:55:06 -05:00
link
5cdd842a3e remove build file
remove main
remove CasaOS
2021-10-22 16:54:17 +08:00
link
cc5504c0a9 Merge pull request #5 from IceWhaleTech/v0.2.1
Add authentication
2021-10-22 03:52:39 -05:00
link
b3aa22605d Add authentication
Add user authentication module, Login page and initialization page.
Fixed the problem that the application could not start after the system restarted.
2021-10-22 16:49:09 +08:00
John Guan
32e00b17b1 update README.md 2021-10-20 11:23:25 +08:00
John Guan
16108f03ac Merge branch 'main' of https://github.com/IceWhaleTech/CasaOS 2021-10-20 11:10:53 +08:00
John Guan
e7f990b224 Update README.md 2021-10-20 11:10:51 +08:00
link
c5d824c4ba Merge pull request #3 from IceWhaleTech/v0.2.1
Optimize installation process
2021-10-19 06:12:40 -05:00
link
39ccbe251f Optimize installation process
auto create file or dir
2021-10-19 19:07:16 +08:00
link
e69d2e587b Merge pull request #2 from IceWhaleTech/v0.2.1
update create file and dir api
2021-10-18 05:25:26 -05:00
link
8a28d3c589 update create file and dir api 2021-10-18 18:24:18 +08:00
link
8fe0e4aa73 Update casa.yml 2021-10-15 19:48:38 +08:00
link
30a23a93a2 Update casa.yml 2021-10-15 19:38:50 +08:00
link
53157fbb1f Merge pull request #1 from IceWhaleTech/v0.2.1
add widget
2021-10-14 22:45:31 -05:00
link
fb15695dab add widget
Add CPU RAM Status
Add Disk Info
2021-10-15 11:43:41 +08:00
老竭力
5f5091f1e2 🦄 refactor: Change build method
Change build method
add static.go to public folder
2021-09-30 18:52:03 +08:00
a624669980
df92766c74 Catalog Adjustment 2021-09-30 18:45:01 +08:00
a624669980
cc8b3e8f06 Modify gitgnore 2021-09-30 18:42:29 +08:00
John Guan
a116db8dbd Update .gitignore 2021-09-30 18:40:16 +08:00
a624669980
d697547cb7 Modify default config 2021-09-30 17:55:59 +08:00
a624669980
01960c0391 Modify default config 2021-09-30 17:54:29 +08:00
a624669980
953c393e71 Modify default config 2021-09-30 17:53:26 +08:00
a624669980
0873f7dd46 Modify the publishing process 2021-09-30 17:00:55 +08:00
a624669980
8d93a7f320 Modify the publishing process 2021-09-30 16:57:10 +08:00
a624669980
801eca0a14 Modify the publishing process 2021-09-30 16:56:03 +08:00
a624669980
a3ec7b70c9 Modify the publishing process 2021-09-30 16:55:00 +08:00
a624669980
4a77548b23 Modify the publishing process 2021-09-30 16:51:20 +08:00
a624669980
15ccade3d3 Modify the publishing process 2021-09-30 16:42:00 +08:00
a624669980
587fb6fb8a Modify the publishing process 2021-09-30 16:29:32 +08:00
a624669980
5bcb663ac8 Modify the publishing process 2021-09-30 16:26:36 +08:00
a624669980
cbd945536d Modify the publishing process 2021-09-30 16:14:09 +08:00
a624669980
081e9213c2 Modify the publishing process 2021-09-30 16:13:14 +08:00
a624669980
966fae2d4c Modify the publishing process 2021-09-30 16:12:45 +08:00
a624669980
dc4f9ea990 Modify the publishing process 2021-09-30 16:06:56 +08:00
a624669980
05b9c75714 Modify the publishing process 2021-09-30 15:55:02 +08:00
a624669980
4aeeea2325 Modify the publishing process 2021-09-30 15:52:56 +08:00
a624669980
72531cf6c2 Modify the publishing process 2021-09-30 15:45:09 +08:00
a624669980
9ad9be8c61 Modify the publishing process 2021-09-30 15:34:02 +08:00
a624669980
1aa15932a0 Modify the publishing process 2021-09-30 15:24:18 +08:00
a624669980
dbc6a4265a Modify the publishing process 2021-09-30 15:22:05 +08:00
a624669980
edea1f144a Modify the publishing process 2021-09-30 15:10:41 +08:00
a624669980
85c59c03cf Modify the publishing process 2021-09-30 14:52:32 +08:00
a624669980
a1f57bf1d1 Modify the publishing version 2021-09-30 14:45:33 +08:00
a624669980
e6f2c46c28 Modify the publishing process 2021-09-30 14:43:45 +08:00
a624669980
55c6c21aa3 Ignore profile 2021-09-29 19:51:40 +08:00
a624669980
40617185e9 Task modified to remote acquisition
token modified to no expiration time
2021-09-29 19:49:34 +08:00
link
c3dba45e17 Update casa.yml
change path
2021-09-29 18:02:22 +08:00
link
83f58366a6 Fix pack error 2021-09-29 17:43:59 +08:00
link
3fa09dad8e add workflows 2021-09-29 17:33:58 +08:00
jerrykuku
f0f0eb2ef0 🦄 refactor:
Change submodule UI to branch main
2021-09-29 13:50:16 +08:00
jerrykuku
436b87f8a8 🦄 refactor: Change submoudle
Change Frontend submoudle to UI
2021-09-29 13:38:03 +08:00
jerrykuku
f0888ef2ac Remove UI submodule. 2021-09-29 13:33:08 +08:00
Lauren
03e23ec203 Update README.md 2021-09-28 22:48:40 +08:00
a624669980
3e1d24624a Application modification and new creation failure issues 2021-09-28 19:22:20 +08:00
John Guan
1e3585d47c Update README.md 2021-09-27 19:29:56 +08:00
John Guan
db7fe3781e Update README.md 2021-09-27 19:27:16 +08:00
John Guan
c2ad576cd9 Update README.md
Adjusting the wording
2021-09-27 19:08:39 +08:00
John Guan
5c8d4b4b94 Update README.md
Adjusting the wording
2021-09-27 18:42:37 +08:00
John Guan
88f0cdf738 Update README.md
Adjusting the wording
2021-09-27 18:41:15 +08:00
John Guan
b759585d20 Merge branch 'main' of https://github.com/IceWhaleTech/CasaOS into main 2021-09-27 17:31:34 +08:00
John Guan
183bc211cd Update README.md 2021-09-27 17:31:30 +08:00
a624669980
9bce06d171 Merge remote-tracking branch 'origin/main' 2021-09-27 17:22:33 +08:00
a624669980
2491a03d4b update makefile 2021-09-27 17:22:18 +08:00
John Guan
4b02ad914d Update README.md
update banner link
2021-09-27 16:19:45 +08:00
John Guan
a1b876d088 Update README.md 2021-09-27 16:10:41 +08:00
a624669980
2cb16144ca Addressing security issues 2021-09-27 16:07:12 +08:00
John Guan
93b1b618d2 Delete README-ZH.md 2021-09-27 15:54:57 +08:00
John Guan
97e88f595a Update README.md 2021-09-27 15:54:07 +08:00
a624669980
2448173f44 Merge remote-tracking branch 'origin/main' 2021-09-27 15:43:22 +08:00
a624669980
191aaff575 build 0.1.1 2021-09-27 15:40:31 +08:00
John Guan
1e6393f502 Update README.md 2021-09-27 15:27:05 +08:00
a624669980
bf86654579 add casa-ui 2021-09-27 14:35:07 +08:00
a624669980
285462c571 add casa-ui 2021-09-27 14:33:15 +08:00
a624669980
92753dbfd7 add UI 2021-09-27 14:24:54 +08:00
a624669980
2c1ca2b095 暂存 2021-09-27 14:17:36 +08:00
304 changed files with 19789 additions and 30711 deletions

32
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,32 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
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]
**Additional context**
Add any other context about the problem here.

5
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Questions, Ideas, Discussions
url: https://github.com/IceWhaleTech/CasaOS/discussions
about: Ask questions, propose ideas, or discuss anything related to CasaOS

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -0,0 +1,15 @@
---
name: Submit application
about: Add an app to this project
title: ''
labels: ''
assignees: LinkLeong
---
Tested platform
e.g. linux/amd64,linux/arm-v7,linux-arm64
Please export and upload the configuration file of this application

148
.github/workflows/casa.yml vendored Normal file
View File

@@ -0,0 +1,148 @@
# This is a basic workflow to help you get started with Actions
name: Build CasaOS
on:
repository_dispatch:
workflow_dispatch:
inputs:
ssh:
description: 'SSH connection to Actions'
required: false
default: 'false'
#on:
# push:
# branches:
# - 'main'
# tags:
# - 'v*'
env:
REPO_URL: https://github.com/IceWhaleTech/CasaOS.git
REPO_BRANCH: main
PACK_SH_URL: https://raw.githubusercontent.com/jerrykuku/actions-casa/main/pack.sh
PACK_SH: pack.sh
TZ: Asia/Shanghai
jobs:
xgo:
strategy:
fail-fast: false
matrix:
go_version:
- 1.17.1
runs-on: ubuntu-latest
steps:
# - name: Get release
# id: get_release
# uses: bruceadams/get-release@v1.2.3
# env:
# GITHUB_TOKEN: ${{ github.token }}
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: true
# - name: Initialization environment
# env:
# DEBIAN_FRONTEND: noninteractive
# run: |
# sudo timedatectl set-timezone "$TZ"
# sudo mkdir -p /workdir
# sudo chown $USER:$GROUPS /workdir
# - name: Clone source code
# working-directory: /workdir
# run: |
# df -hT $PWD
# git clone $REPO_URL -b $REPO_BRANCH --recursive casa
# ln -sf /workdir/casa $GITHUB_WORKSPACE/casa
# ls
- name: Set enviroment for github-release
run: |
echo "VERSION=$(cat types/system.go | grep CURRENTVERSION | awk '$2 == "CURRENTVERSION"{print $4}' | sed 's/"//g')" >>$GITHUB_ENV
echo "BODY=$(cat types/system.go | grep BODY | awk -F= '{print $2}' | sed 's/"//g')" >>$GITHUB_ENV
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Build frontend with nodejs and yarn
run: |
cd UI
ls
yarn install
yarn build
- name: list work
run: pwd
- name: Build with xgo
uses: crazy-max/ghaction-xgo@v1
with:
xgo_version: v0.7.5
go_version: ${{ matrix.go_version }}
dest: build
prefix: casa
targets: linux/amd64,linux/arm64,linux/arm-7
v: true
x: false
race: false
ldflags: -s -w
buildmode: default
#
# - name: List Files
# run: |
# ls
# mkdir build
# ls
# echo "::set-output name=status::success"
- name: Pack builds
run: |
wget $PACK_SH_URL
chmod +x $PACK_SH
./$PACK_SH
echo "::set-output name=status::success"
- name: list work
run: ls
- name: Update release
uses: meeDamian/github-release@2.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
files: >
linux-amd64-casaos.tar.gz
linux-arm64-casaos.tar.gz
linux-arm-7-casaos.tar.gz
tag: v${{ env.VERSION }}
body: >
${{ env.BODY }}
name: v${{ env.VERSION }}
gzip: false
allow_override: false
prerelease: true
# - name: Upload linux-amd64-casaos.tar.gz
# id: upload_assets_amd64
# uses: shogo82148/actions-upload-release-asset@v1
# with:
# upload_url: ${{ steps.get_release.outputs.upload_url }}
# asset_path: /workdir/casa/upload/linux-amd64-casaos.tar.gz
#
# - name: Upload linux-arm64-casaos.tar.gz
# id: upload_assets_arm64
# uses: shogo82148/actions-upload-release-asset@v1
# with:
# upload_url: ${{ steps.get_release.outputs.upload_url }}
# asset_path: /workdir/casa/upload/linux-arm64-casaos.tar.gz

79
.github/workflows/demo.yml vendored Normal file
View File

@@ -0,0 +1,79 @@
name: Demo Reset
# Controls when the workflow will run
on:
schedule:
- cron: "0 * * * *"
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# OLD_INSTANCE_SNAPSHOT_NAME=$(aws lightsail get-instance-snapshots | grep '"name": "CasaOS-Demo-Snapshot-[0-9]' | sed 's/ //g' | sed 's/"//g' | sed 's/,//g' | sed 's/name://g')
# OLD_INSTANCE_NAME=$(aws lightsail get-instances | grep '"name": "CasaOS-Demo-[0-9]' | sed 's/ //g' | sed 's/"//g' | sed 's/,//g' | sed 's/name://g')
# NEW_INSTANCE_NAME=CasaOS-Demo-$(date +%s)
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
reset:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: Configure AWS credentials from Test account
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
- name: Get old instance and snapshot name, create new instance name
run: |
echo "OLD_INSTANCE_SNAPSHOT_NAME=$(aws lightsail get-instance-snapshots | grep '"name": "CasaOS-Demo-Snapshot-1652856810' | sed 's/ //g' | sed 's/"//g' | sed 's/,//g' | sed 's/name://g')" >> $GITHUB_ENV
echo "OLD_INSTANCE_NAME=$(aws lightsail get-instances | grep '"name": "CasaOS-Demo-[0-9]' | sed 's/ //g' | sed 's/"//g' | sed 's/,//g' | sed 's/name://g')" >> $GITHUB_ENV
echo "NEW_INSTANCE_NAME=CasaOS-Demo-$(date +%s)" >> $GITHUB_ENV
- name: Create instances from snapshot
run: |
aws lightsail create-instances-from-snapshot \
--instance-snapshot-name ${{ env.OLD_INSTANCE_SNAPSHOT_NAME }} \
--instance-names ${{ env.NEW_INSTANCE_NAME }} \
--availability-zone us-west-2a \
--bundle-id medium_2_0
- name: Wait for new instance running
run: |
TIMEOUT=$(($(date +%s)+600))
while [ $TIMEOUT -gt $(date +%s) ]
do
NEW_INSTANCE_STATE=$(aws lightsail get-instance-state --instance-name ${{ env.NEW_INSTANCE_NAME }} | grep '"name":' | sed 's/ //g' | sed 's/"//g' | sed 's/name://g')
if [ $NEW_INSTANCE_STATE == running ]
then
echo "New instance is running now"
sleep 10s
break
fi
done
- name: Put instance public ports
run: |
aws lightsail put-instance-public-ports \
--port-infos fromPort=0,toPort=65535,protocol=all \
--instance-name ${{ env.NEW_INSTANCE_NAME }}
- name: Attach static ip
run: |
aws lightsail attach-static-ip \
--static-ip-name CasaOS-Demo-IP \
--instance-name ${{ env.NEW_INSTANCE_NAME }}
- name: Delete old instance
run: |
aws lightsail delete-instance \
--instance-name ${{ env.OLD_INSTANCE_NAME }}

9
.gitignore vendored
View File

@@ -20,6 +20,7 @@
# IntelliJ project files
.idea
.vscode
*.iml
out
gen
@@ -27,3 +28,11 @@ gen
/sql/
/out/
/db/
/docs/
/web/
/conf/conf.ini
/conf/conf.json
__debug_bin
main
CasaOS
github.com

3
.gitmodules vendored
View File

@@ -1,3 +1,4 @@
[submodule "UI"]
path = UI
url = https://github.com/ZimaBoard/CasaOS-UI.git
url = https://github.com/IceWhaleTech/CasaOS-UI.git
branch = main

441
CHANGELOG.md Normal file
View File

@@ -0,0 +1,441 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
### Changed
### Removed
### Security
### Fixed
## [0.3.3-pre] - 2022-07-01(UTC)
### Added
- [System]Add interface call log
- Adding Developing file ([#311](https://github.com/IceWhaleTech/CasaOS/pull/311))
- [App] add new tips for app section.
- [System] UI Configurable function modules: support turning off the search bar and recommended apps module in the settings.
- [System] Custom wallpapers: two new preset wallpapers, support for custom uploads, support for setting images from Files as wallpapers, Also support right click on dashboard to change wallpaper.
### Changed
- [App] Cache app store index and category data
- [System] casaos master program adapted to FHS standards
- [App] Update casaos icons.
- [System] Update translation.
### Removed
- [System] Remove upnp function module
- [System] Remove ddns function module
- [System] Remove search function module
- [System] Remove zerotier function module
- [System] Remove task function module
- [System] Remove file share function module
### Fixed
- [Disk] Fixed hard drive won't hibernate problem ([#202](https://github.com/IceWhaleTech/CasaOS/issues/202))
- [File] Fixed the backspace key that causes the folder to rewind ([#252](https://github.com/IceWhaleTech/CasaOS/issues/252))
- [App] Fixed app logo is not loading when imported. ([#320](https://github.com/IceWhaleTech/CasaOS/issues/320))
## [0.3.2.1] - 2022-06-16(UTC)
### Changed
- [System] Adjusted the display style.
### Fixed
- [System] Fixed the issue of widgets displaying wrongly on mobile devices.
- [App] Fix the problem of application opening failure on non-80 ports ([#283](https://github.com/IceWhaleTech/CasaOS/issues/283) [#280](https://github.com/IceWhaleTech/CasaOS/issues/280))
- [System] Modify port failure problem ([#282](https://github.com/IceWhaleTech/CasaOS/issues/282))
- [App]Modify environment variables disappearing problem([#284](https://github.com/IceWhaleTech/CasaOS/issues/284))
- [System]Fix no update alert([#278](https://github.com/IceWhaleTech/CasaOS/issues/278))
- [System] Fixed some bugs of application cpu usage and memory staging([#272](https://github.com/IceWhaleTech/CasaOS/issues/272))
- [App] Fixed plex and HA network mode error issues ([#299](https://github.com/IceWhaleTech/CasaOS/issues/299))
- [App] Fix application terminal not working ([#266](https://github.com/IceWhaleTech/CasaOS/issues/266))
## [0.3.2] - 2022-06-10
### Added
- [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc.
- [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204))
### Changed
- [Apps] Hide the display of non-essential environment variables in the application.([#196](https://github.com/IceWhaleTech/CasaOS/issues/196))
- [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket.
- [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214))
- [Language] Update language pack [zarevskaya](https://github.com/zarevskaya) [patrickhilker](https://github.com/patrickhilker)
- [System] Interface path adjustment
### Removed
- [Files] Remove the online preview function of PDF files
### Fixed
- [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68))
- [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210))
- [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240))
- [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224))
- [System] Fixed the problem of wireless network card traffic display.([#222](https://github.com/IceWhaleTech/CasaOS/issues/222))
## [0.3.1.1] - 2022-05-17
### Fixed
- Fix the data loss problem when importing local applications
## [0.3.1] - 2022-05-16
### Added
- CasaConnect and file add image thumbnail function
- Import of docker applications
- List support custom sorting function
- CasaConnect gives priority to LAN connections
- USB auto-mount switch (Raspberry Pi is off by default)
- Application custom installation supports Docker Compose configuration import in YAML format
- You will see the new version changelog from the next version
- Added live preview for icons in custom installed applications
### Changed
- Application data is no longer saved to the database
- Optimize app store speed issues
- Optimize the way WebUI is filled in
- Image preview has been completely upgraded and now supports switching between all images in the same folder, as well as dragging, zooming, rotating and resetting.
- Added color levels to the CPU and RAM charts
- Optimized the display of the Connect friends list right-click menu
- Change the initial display directory to /DATA
### Removed
- Historical Application Data
### Fixed
- Fixed the problem that some Docker CLI commands failed to import
- Fix the problem that the application is not easily recognized in /DATA/AppData directory and docker command line after installation, it will be shown as application name
- Fix Pi-hole installation failure
- Fixed the issue that the app could not be updated using WatchTower
- Fixed the problem that the task status was lost after closing Files when there was an upload task
## [0.3.0] - 2022-04-08
### Added
- Add CasaConnect function, now you can share private files peer-to-peer with your friends.
- Add a widget for network traffic monitoring.
- 12 new popular apps added to App Center
### Changed
- Updated the sidebar of Files.
- Updated the initial directory of Files to the Root directory.
- Armbian 22.02 armhf/arm64/amd64 platform tests passed [@igorpecovnik ](https://github.com/igorpecovnik)
- Elementary OS 6.1 Jólnir amd64 platform tests passed [@alvarosamudio ](https://github.com/alvarosamudio)
### Fixed
- Fix an issue in Files where the backspace button would trigger a return to the previous level of the directory when creating a folder.
- Fix the display problem of application list in CPU widget.
- Fix the problem that the ipv6 of the application cannot be opened
### Removed
- Interfaces related to "zerotier"
## [0.2.10] - 2022-03-10
### Added
- Added CasaOS own file manager, now you can browse, upload, download files from the system, even edit code online, preview photos and videos through it. It will appear in the first position of Apps.
- Added CPU core count display and memory capacity display.
### Changed
- Optimized the rendering performance of the home page.
- Optimized the internationalization display of the time widget.
- Show the icon of the stopped application as gray.
- Unify the animation of the drop-down menu.
- Optimize the display of the application drop-down menu.
- Replaced the default font to optimize the display.
### Fixed
- Fix the problem of failed to create storage space
## [0.2.9] - 2022-02-18
### Added
- Add a simple notification function
### Changed
- Custom installation of new parameters(Capabilities,Hostname,Privileged)
- Update front-end translation [@SemVer](https://github.com/zarevskaya) [@koboldMaki](https://github.com/koboldMaki) [@sgastol](https://github.com/sgastol) [@delki8](https://github.com/delki8)
- Modify the default location and name of the usb mount
### Fixed
- Fix the problem of being indexed by search engines
- Fix some style display issues
- Solve hard drive can't be formatted, can't finish adding storage
## [0.2.8] - 2022-01-30
### Added
- Add USB disk device display
### Changed
- Update translation [@baptiste313](https://github.com/baptiste313) [@thueske](https://github.com/thueske)
- Compatible with more types of drives
### Fixed
- Fix the language initialization bug
- Fix the problem that the login page could not be displayed
- Fix missing translated content
## [0.2.7] - 2022.01.26
### Changed
- Apply multilingual support
### Security
- Fix an injectable execution bug
## [0.2.6] - 2022.01.26
### Added
- Add a bug report panel.
- App Store apps start supporting multiple languages
### Fixed
- Fix a disk that cannot be formatted under certain circumstances
## [0.2.5] - 2022.01.24
### Added
- Storage Manager
### Changed
- Update Disk widget
- Update language files [@ImOstrovskiy](https://github.com/ImOstrovskiy) [@baptiste313](https://github.com/baptiste313)
### Fixed
- File synchronization issues
- Fix the app store classification problem
## [0.2.4] - 2021.12.30
### Changed
- Brand new App Store
- Optimize request method
### Fixed
- Fix Sync panel width display error.
- Fix App panel width display error.
## [0.2.3] - 2021.12.11
### Added
- Add detailed CPU and memory statistics.
- Add the multi-language function and add Chinese translation.
- Add the function to modify the search engine.
- Add the function of modifying the WebUI port
### Changed
- Update update script
- Preprocessing usb automounting
### Fixed
- Volume path problem when customizing the installation of applications
- Fix Cpu and Ram usage display error
- Fix translation errors
- Fixed an error when importing and exporting appfile.
## [0.2.2] - 2021.12.02
### Changed
- UI adjustment
### Fixed
- Fix the problem of data display error when manually installing apps
- Fix some spelling problems
- Fix the bug of synchronization module
## [0.2.1] - 2021.11.25
### Fixed
- Fix Sync display error
- Fix Sync Downoad url error
- Fix Smart Block display error
- Fix widgets settings dispaly error
- Fix application installation path error
## [0.2.0] - 2021.11.25
### Added
- Add sync function
## [0.1.11] - 2021.11.10
### Changed
- Adaptation of cell phone terminals
- Optimize user experience
- Replaced the default background
- Optimized the display performance and fixed some bugs
### Fixed
- Resolve application installation path errors
## [0.1.10] - 2021.11.04
### Added
- Add application terminal
- Add application logs
- Add system logs
- Add App Store for installation
## [0.1.9] - 2021.11.01 [YANKED]
## [0.1.8] - 2021.10.27
### Added
- Add system terminal
- Add the ability to modify the user name and password
### Changed
- Experience optimization
- Improve single user management function
- Fixed Disk widget display error
- Fixed Username display error after change
- Adaptation for mobile access
## [0.1.7] - 2021.10.22
### Added
- Add user authentication module, Login page and initialization page.
### Fixed
- Fix the problem that the application could not start after the system restarted.
- Home storage space data display exception
- Script override causes application loss after installation
- Fix docker network error
## [0.1.6] - 2021.10.19
### Added
- Add app icon auto-fill via docker image name.
- Add a file selector for app install.
### Changed
- Modify import reminder.
- Optimize the application installation process
### Fixed
- Fixed an issue with the app were it would disappear when the app was modified.
- Fixed device selector default dir to /dev
## [0.1.5] - 2021.10.15
### Added
- Add CPU RAM Status with widget
- Add Disk Info with widget
- Realize automatic loading of widgets
### Changed
- Enhance the Docker cli import experience and automatically fill in the folders that need to be mounted
### Removed
- Remove Weather widget.
### Fixed
- AppFile upload does not pass verification
- The setting menu of the app is displayed abnormally when the browser window is too narrow
- The port is occupied and the program cannot start
- Fix display bugs when windows size less than 1024px
## [0.1.4] - 2021.09.30
### Added
- Import and export of application configuration files
- Automatic parsing of docker commands
### Changed
- Improve the program release process
- Application installation process UX/UI optimization
### Fixed
- Authentication failure during the operation, resulting in the need to re-login
## [0.1.3] - 2021.09.29 [YANKED]
## [0.1.2] - 2021.09.28
### Fixed
- Application modification and new creation failure issues
## [0.1.1] - 2021.09.27
## [0.1.0] - 2021.09.26
### Added
- Application Center

33
DEVELOPING.md Normal file
View File

@@ -0,0 +1,33 @@
# CasaOS Development
Here we will describe the steps required to setup a development environment with CasaOS.
- [Setting up development environment](#setting-up-development-environment)
- [Pre-requisites](#pre-requisites)
- [1. Fork the Repo](#1.-fork-the-repo)
- [2. Clone the repo down](#2.-clone-the-repo-down)
- [3. Install dependencies](#3.-install-dependencies)
## Setting up a development environment
In this section we will walk you through the general process of setting up your development environment to get started.
### Pre-requisites
The following must be installed in order to get started. The details of how to install them is outside the scope of this doc, but generally they should be able to be installed with your systems package manager (apt, yum, brew, choco, etc).
- Go > v1.17.0
- yarn
- node.js
### 1. Fork the Repo
[Fork the repo](https://docs.github.com/en/get-started/quickstart/fork-a-repo) onto your own GitHub account for developing.
### 2. Clone the repo down
1. Navigate into your go workspace (check with `go env GOPATH`).
2. Navigate to the appropriate path for github. It should look something like this: `<path from GOPATH>/github.com/<GitHub Username>/`. If it doesn't exist create it.
3. Clone down the repo with the following: `git clone --recurse-submodules --remote-submodules https://github.com/<your GitHub Username>/CasaOS.git`
### 3. Install dependencies
1. `cd UI`
2. `yarn install`
3. `yarn build`
4. `cd ..`
5. `go get`

201
LICENSE Normal file
View File

@@ -0,0 +1,201 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -4,10 +4,10 @@ build: build-ui build-backend
build-ui:
cd UI && yarn install && yarn build
cd CasaOS-UI && yarn install && yarn build
build-backend:
export CGO_ENABLED=1;export CGO_LDFLAGS=-static;go mod tidy;go build -o ./casa main.go;upx --lzma --best casa
export CGO_ENABLED=1;export CGO_LDFLAGS=-static;go build -o ./casa main.go;upx --lzma --best casa
help:
@echo "call john"

View File

@@ -1,7 +0,0 @@
## 目录结构
- conf 配置文件
- route 路由
- service 方法的具体实现
- utils 工具
- main.go 入口

View File

@@ -1,2 +1,89 @@
# Oasis
# CasaOS - A simple, easy-to-use, elegant open-source Home Cloud system.
![CasaOS](https://raw.githubusercontent.com/IceWhaleTech/logo/main/casaos/casaos_banner_aldeyjarfoss.png)
[![Version](https://img.shields.io/github/v/release/IceWhaleTech/CasaOS?color=162453&label=CasaOS&style=flat-square)](https://github.com/IceWhaleTech/CasaOS)
[![Pull Requests](https://img.shields.io/github/issues-pr/IceWhaleTech/CasaOS?color=162453&style=flat-square)](https://github.com/IceWhaleTech/CasaOS/pulls)
[![Issues](https://img.shields.io/github/issues/IceWhaleTech/CasaOS?color=162453&style=flat-square)](https://github.com/IceWhaleTech/CasaOS/issues)
[![GitHub Stars](https://img.shields.io/github/stars/IceWhaleTech/CasaOS?color=162453&logo=github&style=flat-square)](https://github.com/IceWhaleTech/CasaOS/stargazers)
[![Discord](https://img.shields.io/discord/884667213326463016?color=162453&label=Chat&logo=discord&logoColor=fff&style=flat-square)](https://discord.gg/knqAbbBbeX)
CasaOS is an open-source Home Cloud system based on the Docker ecosystem and designed for home scenarios. It is committed to building the world's most simple, easy-to-use, and elegant Home Cloud system.
IceWhale team believes that through community-driven collaborative innovation and open communication with global developers, we can reshape the digital home experience like never before.
![CasaOS Snapshot](snapshot.png)
![CasaOS Snapshot Mobile](snapshot-mobile.png)
## Getting Started
> ⚠️ Note:
>
> CasaOS is still in the early development stage and may vary significantly with the final release. Feel free to test run and share your feedback in the [Discord server](https://discord.gg/knqAbbBbeX)!
### Quick Setup CasaOS
Fresh install a system from the list below and run the this command:
```sh
wget -qO- https://get.icewhale.io/casaos.sh | bash
```
or
```sh
curl -fsSL https://get.icewhale.io/casaos.sh | bash
```
### Uninstall CasaOS
```sh
curl -fsSL https://get.icewhale.io/casaos-uninstall.sh | bash
```
### System Compatibility
- Ubuntu Server 20.04 amd64 (✅ Recommend, Tested)
- Armbian 22.02 armhf/arm64/amd64 (✅ Recommend, Tested)
- Elementary OS 6.1 Jólnir amd64 (✅ Recommend, Tested)
- Deepin 20.4 amd64 (⚠️ Not Fully Tested Yet)
- Raspberry Pi Lite OS aarch64/arm64 (⚠️ Not Fully Tested Yet)
- Debian 11 amd64 (⚠️ Not Fully Tested Yet)
- OpenWrt 21.02 amd64 (⚠️ Not Fully Tested Yet)
- OpenWrt 21.02 aarch64/arm64 (⚠️ Not Fully Tested Yet)
## Key Features
- UI designed for home scenarios - simple, elegant, and easy-to-use
- Quick Docker app installation with only three steps, plus automatic management
- App Store for Home Cloud 🚧
- Home data/digital asset management 🚧
- Smart home manager 🚧
🚧 is under development.
We are actively moving forward with development, and you are more than welcome to share any idea with us!
## Community
The word Casa comes from the Spanish word for "home". Project CasaOS originated as a pre-installed system for crowdfunded product [ZimaBoard](https://www.zimaboard.com) on Kickstarter.
After looking at many systems and software on the market, the team found no server system designed for home scenarios, sadly true.
So, we set out to build this open source project to develop CasaOS with our own hands, everyone in the community, and you.
> A warm welcome for you to share and discuss your great ideas in the [Discord server](https://discord.gg/knqAbbBbeX)!
[![Discord Card](https://discordapp.com/api/guilds/884667213326463016/widget.png?style=banner2)](https://discord.gg/knqAbbBbeX)
## Maintainers
- Jerry Liu
- Link Liang
- Ober Zhang
- Zyaire Ann
- John Guan
- Right here, waiting for YOU!

1
UI Submodule

Submodule UI added at 7af1bf549d

View File

@@ -1,3 +0,0 @@
> 1%
last 2 versions
not dead

View File

@@ -1,2 +0,0 @@
// .env.dev
NODE_ENV='dev'

View File

@@ -1,2 +0,0 @@
// .env.production
NODE_ENV='prod'

View File

@@ -1,18 +0,0 @@
module.exports = {
root: true,
env: {
node: true
},
'extends': [
'plugin:vue/essential',
'eslint:recommended'
],
parserOptions: {
parser: 'babel-eslint'
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'vue/no-unused-vars':'off'
}
}

23
UI/.gitignore vendored
View File

@@ -1,23 +0,0 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

View File

@@ -1,32 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-22 14:24:43
* @LastEditors: JerryK
* @LastEditTime: 2021-09-22 14:44:31
* @Description:
* @FilePath: /CasaOS-UI/README.md
-->
# CasaOS-UI
The front-end of CasaOs,build with VueJS
## Project setup
```
yarn install
```
### Compiles and hot-reloads for development
```
yarn serve
```
### Compiles and minifies for production
```
yarn build
```
Will be output to the ../web folder
### Lints and fixes files
```
yarn lint
```

View File

@@ -1,5 +0,0 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

View File

@@ -1,43 +0,0 @@
{
"name": "CasaOS",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve --mode dev",
"build": "vue-cli-service build --no-clean --dest ../web --mode production",
"lint": "vue-cli-service lint"
},
"dependencies": {
"axios": "^0.21.4",
"buefy": "^0.9.0",
"core-js": "^3.6.5",
"easy-affix": "^1.0.8",
"lodash.debounce": "^4.0.8",
"lottie-vuejs": "^0.4.0",
"moment": "^2.29.1",
"nth-check": "^2.0.1",
"qs": "^6.10.1",
"vee-validate": "^3.4.12",
"vue": "^2.6.11",
"vue-router": "^3.2.0",
"vue-slider-component": "^3.2.14",
"vuex": "^3.4.0",
"vuex-persistedstate": "^4.0.0",
"yargs-parser": "^20.2.9"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-plugin-router": "~4.5.0",
"@vue/cli-plugin-vuex": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"babel-eslint": "^10.1.0",
"compression-webpack-plugin": "^9.0.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"node-sass": "^4.9.0",
"sass-loader": "^7.0.1",
"vue-cli-plugin-buefy": "~0.3.8",
"vue-template-compiler": "^2.6.11"
}
}

View File

@@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/ui/img/icon/mstile-150x150.png"/>
<TileColor>#da532c</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

View File

@@ -1,42 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-22 14:24:43
* @LastEditors: JerryK
* @LastEditTime: 2021-09-24 18:03:02
* @Description:
* @FilePath: /CasaOS-UI/public/index.html
-->
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="apple-touch-icon" sizes="180x180" href="<%= BASE_URL %>img/icon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="<%= BASE_URL %>img/icon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="<%= BASE_URL %>img/icon/favicon-16x16.png">
<link rel="manifest" href="<%= BASE_URL %>site.webmanifest">
<link rel="mask-icon" href="<%= BASE_URL %>img/icon/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<link rel="stylesheet" href="//cdn.materialdesignicons.com/2.0.46/css/materialdesignicons.min.css">
<script src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.4/js/all.js"
integrity="sha256-GaerX2a/DuOnPrxn/4vH13dobiFUe/27LO6gCZDNauA=" crossorigin="anonymous"></script>
<title>
<%= htmlWebpackPlugin.options.title %>
</title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

View File

@@ -1,14 +0,0 @@
{
"name": "",
"short_name": "",
"icons": [
{
"src": "/ui/img/icon/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

View File

@@ -1,110 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-23 16:42:14
* @Description: Main entry of application
* @FilePath: /CasaOS-UI/src/App.vue
-->
<template>
<!-- <div id="app" class="is-flex is-flex-direction-column" :style="{'background-image': 'url(' + require('./assets/background/AbstractShapes.jpg') + ')'}"> -->
<div id="app" class="is-flex is-flex-direction-column" :style="{'background-image': 'url(https://www.bing.com/th?id=OHR.Aldeyjarfoss_ZH-CN0106567013_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp)'}">
<!-- NavBar Start -->
<top-bar></top-bar>
<!-- NavBar End -->
<!-- Content Start -->
<div class="contents pt-55 pb-6">
<div class="container">
<div class="is-flex">
<!-- SideBar Start -->
<side-bar></side-bar>
<!-- SideBar End -->
<!-- MainContent Start -->
<div class="main-content">
<!-- SearchBar Start -->
<section>
<search-bar></search-bar>
</section>
<!-- SearchBar End -->
<!-- Suggestions For You Start -->
<section>
<suggestion></suggestion>
</section>
<!-- Suggestions For You End -->
<!-- Apps Start -->
<section>
<apps></apps>
</section>
<!-- Apps End -->
<!-- Shortcuts Start -->
<!-- <section>
<shortcuts></shortcuts>
</section> -->
<!-- Shortcuts End -->
</div>
<!-- MainContent End -->
</div>
</div>
</div>
<!-- Content End -->
<!-- BrandBar Start -->
<brand-bar></brand-bar>
<!-- BrandBar End -->
<!-- ContactBar Start -->
<contact-bar></contact-bar>
<!-- ContactBar End -->
</div>
</template>
<script>
import Apps from './components/Apps.vue'
import BrandBar from './components/BrandBar.vue'
import ContactBar from './components/ContactBar.vue'
import SearchBar from './components/SearchBar.vue'
import SideBar from './components/SideBar.vue'
import Suggestion from './components/Suggestion.vue'
import TopBar from './components/TopBar.vue'
//import Shortcuts from './components/Shortcuts.vue'
export default {
components: {
BrandBar,
ContactBar,
SideBar,
SearchBar,
Suggestion,
Apps,
TopBar,
//Shortcuts
},
created() {
// Check if not login then login and get token
if (!localStorage.getItem("user_token")) {
this.login()
}
},
methods: {
login() {
/**
* @description: Login
* @return void
*/
// this.$api.user.login({
// username: "admin",
// pwd: "admin"
// }).then((res) => {
// if (res.data.success == 200) {
// localStorage.setItem("user_token", res.data.data)
// }
// })
}
},
}
</script>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -1,152 +0,0 @@
// Included below are all the defined variables from Bulma
// Modify as needed, removing the !default attribute.
// Colors
$black: hsl(0, 0%, 4%) !default;
$black-bis: hsl(0, 0%, 7%) !default;
$black-ter: hsl(0, 0%, 14%) !default;
$grey-darker: hsl(0, 0%, 21%) !default;
$grey-dark: hsl(0, 0%, 29%) !default;
$grey: hsl(0, 0%, 48%) !default;
$grey-light: hsl(0, 0%, 71%) !default;
$grey-lighter: hsl(0, 0%, 86%) !default;
$white-ter: hsl(0, 0%, 96%) !default;
$white-bis: hsl(0, 0%, 98%) !default;
$white: hsl(0, 0%, 100%) !default;
$orange: hsl(14, 100%, 53%) !default;
$yellow: hsl(48, 100%, 67%) !default;
$green: hsl(141, 71%, 48%) !default;
$turquoise: hsl(171, 100%, 41%) !default;
$cyan: hsl(204, 86%, 53%) !default;
$blue: hsl(217, 71%, 53%) !default;
$purple: hsl(271, 100%, 71%) !default;
$red: hsl(348, 100%, 61%) !default;
// Typography
$family-sans-serif: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !default;
$family-monospace: monospace !default;
$render-mode: optimizeLegibility !default;
$size-1: 3rem !default;
$size-2: 2.5rem !default;
$size-3: 2rem !default;
$size-4: 1.5rem !default;
$size-5: 1.25rem !default;
$size-6: 1rem !default;
$size-7: 0.75rem !default;
$weight-light: 300 !default;
$weight-normal: 400 !default;
$weight-medium: 500 !default;
$weight-semibold: 600 !default;
$weight-bold: 700 !default;
// Responsiveness
// The container horizontal gap, which acts as the offset for breakpoints
$gap: 32px !default;
// 960, 1152, and 1344 have been chosen because they are divisible by both 12 and 16
$tablet: 769px !default;
// 960px container + 4rem
$desktop: 960px + (2 * $gap) !default;
// 1152px container + 4rem
$widescreen: 1152px + (2 * $gap) !default;
// 1344px container + 4rem;
$fullhd: 1344px + (2 * $gap) !default;
// Miscellaneous
$easing: ease-out !default;
$radius-small: 2px !default;
$radius: 3px !default;
$radius-large: 5px !default;
$radius-rounded: 290486px !default;
$speed: 86ms !default;
// Flags
$variable-columns: true !default;
// The default Bulma derived variables are declared below
$primary: $turquoise !default;
$info: $cyan !default;
$success: $green !default;
$warning: $yellow !default;
$danger: $red !default;
$light: $white-ter !default;
$dark: $grey-darker !default;
// Invert colors
$orange-invert: findColorInvert($orange) !default;
$yellow-invert: findColorInvert($yellow) !default;
$green-invert: findColorInvert($green) !default;
$turquoise-invert: findColorInvert($turquoise) !default;
$cyan-invert: findColorInvert($cyan) !default;
$blue-invert: findColorInvert($blue) !default;
$purple-invert: findColorInvert($purple) !default;
$red-invert: findColorInvert($red) !default;
$primary-invert: $turquoise-invert !default;
$info-invert: $cyan-invert !default;
$success-invert: $green-invert !default;
$warning-invert: $yellow-invert !default;
$danger-invert: $red-invert !default;
$light-invert: $dark !default;
$dark-invert: $light !default;
// General colors
$background: $white-ter !default;
$border: $grey-lighter !default;
$border-hover: $grey-light !default;
// Text colors
$text: $grey-dark !default;
$text-invert: findColorInvert($text) !default;
$text-light: $grey !default;
$text-strong: $grey-darker !default;
// Code colors
$code: $red !default;
$code-background: $background !default;
$pre: $text !default;
$pre-background: $background !default;
// Link colors
$link: $blue !default;
$link-invert: $blue-invert !default;
$link-visited: $purple !default;
$link-hover: $grey-darker !default;
$link-hover-border: $grey-light !default;
$link-focus: $grey-darker !default;
$link-focus-border: $blue !default;
$link-active: $grey-darker !default;
$link-active-border: $grey-dark !default;
// Typography
$family-primary: $family-sans-serif !default;
$family-code: $family-monospace !default;
$size-small: $size-7 !default;
$size-normal: $size-6 !default;
$size-medium: $size-5 !default;
$size-large: $size-4 !default;

View File

@@ -1,429 +0,0 @@
@import "~bulma/sass/utilities/initial-variables";
@import "~bulma/sass/utilities/functions";
// 1. Set your own initial variables and derived
// variables in _variables.scss
@import "variables";
@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;1,100;1,300;1,400;1,500;1,700&display=swap");
// 2. Setup your Custom Colors
$linkedin: #0077b5;
$linkedin-invert: findColorInvert($linkedin);
$twitter: #55acee;
$twitter-invert: findColorInvert($twitter);
$github: #333;
$github-invert: findColorInvert($github);
@import "~bulma/sass/utilities/derived-variables";
// 3. Add new color variables to the color map.
$addColors: (
"twitter": (
$twitter,
$twitter-invert,
),
"linkedin": (
$linkedin,
$linkedin-invert,
),
"github": (
$github,
$github-invert,
),
);
$colors: map-merge($colors, $addColors);
@import "~bulma";
@import "~buefy/src/scss/buefy";
$backDropColor: rgba(123, 123, 123, 0.16);
$backDropBlur: blur(1rem);
$backDropBorderRadius: 0.5rem;
// 4. Provide custom buefy overrides and site styles here
body,
html {
overflow: hidden;
font-family: "Roboto", sans-serif;
}
#app {
width: 100vw;
height: 100vh;
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
background-size: cover;
background-repeat: no-repeat;
background-position: center center;
}
.top-bar {
position: relative;
z-index: 10;
height: 3rem;
background: rgba(255, 255, 255, 0.22);
backdrop-filter: blur(180.282px);
.navbar-brand {
.dropdown-menu {
margin-top: 0.5rem;
min-width: 20rem;
.dropdown-content {
.dropdown-item {
padding: 1.25rem;
text-align: left;
.item {
height: 2rem;
}
}
}
}
}
.field {
line-height: 1rem;
}
.switch {
&.is-flex-direction-row-reverse {
.control-label {
padding-left: 0;
padding-right: calc(0.75em - 1px);
}
}
}
.update-container {
.button.is-rounded {
border-radius: 9999px !important;
padding-left: calc(1em + 0.25em);
padding-right: calc(1em + 0.25em);
}
}
.button{
&.is-small{
height: 2em;
}
}
}
.brand-bar {
position: fixed;
left: 2rem;
bottom: 2rem;
}
.contact-bar {
position: fixed;
right: 2rem;
bottom: 2rem;
height: 3.5rem;
background: rgba(0, 0, 0, 0.16);
backdrop-filter: blur(24px);
border-radius: 4px;
font-size: 1.5rem;
a {
color: $white;
margin: 0.5rem;
display: flex;
align-items: center;
&:hover {
color: #0077b5;
}
}
}
.contents {
flex: 1;
overflow: auto;
}
.side-bar {
width: 16rem;
position: fixed;
}
.main-content {
flex: 1;
margin-left: 17.5rem;
}
.pt-7 {
padding-top: 4rem;
}
.pt-55 {
padding-top: 2rem;
}
.p-55 {
padding: 2rem !important;
}
.button.is-light {
background-color: #a6afb9;
color: white;
}
.label {
font-size: 0.875rem;
margin-bottom: 0.5rem;
}
.button,
.input,
.textarea,
.taginput .taginput-container.is-focusable,
.select select,
.file-cta,
.file-name,
.pagination-previous,
.pagination-next,
.pagination-link,
.pagination-ellipsis {
&:focus {
box-shadow: none;
}
}
.image.is-72x72 {
height: 72px;
width: 72px;
}
// widgets
.widget {
background: $backDropColor;
backdrop-filter: $backDropBlur;
border-radius: $backDropBorderRadius;
padding: 0.875rem 1.5rem;
margin-bottom: 0.75rem;
}
// Cards
.wuji-card {
background: $backDropColor;
backdrop-filter: $backDropBlur;
border-radius: $backDropBorderRadius;
padding: 1.5rem;
color: $white;
position: relative;
.info {
flex: 1;
margin-right: 1rem;
color: white;
}
.simg {
img {
border-radius: 4px;
}
}
.icon-img {
position: relative;
&.stop::after {
position: absolute;
content: "";
width: 0.75rem;
height: 0.75rem;
background-color: #ff1616;
border-radius: 50%;
right: -0.375rem;
top: -0.375rem;
}
img {
border-radius: 8px;
margin: 0 auto;
}
}
.b-image-wrapper {
position: relative;
display: flex;
align-items: center;
justify-content: center;
&.stop::after {
position: absolute;
content: "";
width: 0.75rem;
height: 0.75rem;
background-color: #ff1616;
border-radius: 50%;
right: -0.375rem;
top: -0.375rem;
}
img {
border-radius: 8px;
margin: 0 auto;
}
}
.action-btn {
position: absolute;
right: 0.5rem;
top: 1rem;
visibility: hidden;
opacity: 0;
transition: all 0.2s;
}
p {
font-weight: 500;
}
.one-line {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
}
.two-line {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
&:hover {
.action-btn {
visibility: visible;
opacity: 1;
}
}
a {
color: white;
p {
color: white;
}
}
}
.flex1 {
flex: 1;
}
.title-bar {
margin-bottom: 1.5rem;
.title {
flex: 1;
margin-bottom: 0;
}
}
.ii {
.dropdown-menu {
background: rgba(255, 255, 255, 0.88);
backdrop-filter: $backDropBlur;
border-radius: $backDropBorderRadius;
overflow: hidden;
padding-top: 0;
.dropdown-content {
background: none;
padding: 0;
.button {
border-radius: 0;
padding-left: 1.5rem;
padding-right: 1.5rem;
&.is-text {
text-decoration: none;
justify-content: flex-start;
outline: none;
transition: all 0.2s;
border: none !important;
&.running {
color: #779e2a !important;
}
&.exited {
color: #ff1616 !important;
}
}
&:active {
background: none;
outline: none;
}
&:focus {
background: none;
box-shadow: none;
outline: none;
}
}
.bbor {
overflow: hidden;
border-top: #2c3e50 1px solid;
.is-text {
text-decoration: none;
justify-content: center !important ;
}
.column:first-child {
border-right: #2c3e50 1px solid;
}
}
}
}
}
//Panel
.modal-background {
background: rgba(0, 0, 0, 0.8);
}
.modal-card {
background: rgba(255, 255, 255, 0.88);
backdrop-filter: $backDropBlur;
border-radius: $backDropBorderRadius;
.modal-card-head,
.modal-card-body,
.modal-card-foot {
background-color: transparent;
border: none;
}
.modal-card-head {
padding: 3rem;
}
.modal-card-body {
padding: 0 3rem;
.button.is-static,
.input,
.textarea,
.taginput .taginput-container.is-focusable,
.select select,
.file-cta,
.file-name,
.pagination-previous,
.pagination-next,
.pagination-link,
.pagination-ellipsis {
font-size: 0.875rem;
height: 2.714em;
border: 1px solid #cfcfcf !important;
border-radius: 4px;
&:focus {
box-shadow: none;
}
}
.media {
padding: 0rem;
}
.field:last-child {
margin-bottom: 0.5rem;
}
.field-body {
.field:last-child {
margin-bottom: 0rem;
}
}
.port-item:not(:last-child) {
.field {
margin-bottom: 0;
}
}
}
.modal-card-foot {
padding: 1rem 3rem 2rem 3rem;
.button {
border-radius: 9999px;
padding-left: calc(1em + 0.25em);
padding-right: calc(1em + 0.25em);
}
}
}
.import-area .textarea {
max-height: 40em;
min-height: 16em;
}
.app-card {
.loading-background {
background: none !important;
border-radius: $backDropBorderRadius;
}
}

View File

@@ -1,53 +0,0 @@
<template>
<div class="widget has-text-white clock">
<div class="time">{{timeText}}</div>
<div class="data">{{dateText}}</div>
</div>
</template>
<script>
import moment from 'moment'
export default {
data() {
return {
timer: 0,
timeText:"",
dateText:""
}
},
mounted() {
if (this.timer) {
clearInterval(this.timer)
}
this.updateClock()
this.timer = setInterval(() => {
this.updateClock()
}, 1000)
},
methods: {
updateClock() {
this.timeText = moment().format('LT');
this.dateText = moment().format('dddd, MMMM Do')
}
},
}
</script>
<style lang="scss">
.clock {
font-family: Roboto;
font-style: normal;
font-weight: 300;
text-align: left;
.time {
font-size: 2.75rem;
line-height: 4.25rem;
opacity: 0.9;
}
.data {
line-height: 1.5rem;
opacity: 0.9;
}
}
</style>

View File

@@ -1,16 +0,0 @@
<template>
<div class="widget has-text-white clock">
<div class="time">09:40</div>
<div class="data">WednesdaySeptember 15</div>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>

View File

@@ -1,128 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-18 23:01:19
* @Description: App module
* @FilePath: \CasaOS-UI\src\components\Apps.vue
-->
<template>
<div class="has-text-left mt-6">
<!-- Title Bar Start -->
<div class="title-bar is-flex is-align-items-center">
<h1 class="title is-4 has-text-white is-flex-shrink-1">Apps</h1>
<div class="buttons ">
<b-button icon-left="plus" type="is-dark" size="is-small" rounded @click="showInstall">New App</b-button>
</div>
</div>
<!-- Title Bar End -->
<!-- App List Start -->
<div class="columns is-variable is-2 is-multiline ">
<div class="column is-narrow is-3" v-for="(item,index) in appList" :key="'app-'+index">
<app-card :item="item" @updateState="getList" @configApp="showConfigPanel"></app-card>
</div>
</div>
<!-- Title Bar End -->
</div>
</template>
<script>
import AppCard from './Apps/AppCard.vue'
import Panel from './Panel.vue'
export default {
data() {
return {
appList: [],
appConfig: {}
}
},
components: {
AppCard,
},
created() {
this.getList();
},
methods: {
/**
* @description: Fetch the list of installed apps
* @return {*} void
*/
getList() {
this.$api.app.myAppList().then(res => {
this.appList = res.data.data;
})
},
/**
* @description: Show Install Panel Programmatic
* @return {*} void
*/
showInstall() {
this.$api.app.appConfig().then(res => {
if (res.data.success == 200) {
this.$buefy.modal.open({
parent: this,
component: Panel,
hasModalCard: true,
customClass: '',
trapFocus: true,
canCancel: ['escape'],
scroll: "keep",
animation: "zoom-out",
events: {
'updateState': () => {
this.getList()
}
},
props: {
id: "0",
state: "install",
configData: res.data.data
}
})
}
})
},
/**
* @description: Show Settings Panel Programmatic
* @return {*} void
*/
showConfigPanel(id) {
this.$api.app.getContainerSettingdata(id).then(ret => {
this.$api.app.appConfig().then(res => {
if (res.data.success == 200) {
this.$buefy.modal.open({
parent: this,
component: Panel,
hasModalCard: true,
customClass: '',
trapFocus: true,
canCancel: ['escape'],
scroll: "keep",
animation: "zoom-out",
events: {
'updateState': () => {
this.getList()
}
},
props: {
id: id,
state: "update",
configData: res.data.data,
initDatas: ret.data.data
}
})
}
})
})
}
}
}
</script>
<style>
</style>

View File

@@ -1,202 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-18 23:12:57
* @Description: App Card item
* @FilePath: \CasaOS-UI\src\components\Apps\AppCard.vue
-->
<template>
<div class="wuji-card is-flex is-align-items-center is-justify-content-center p-55 app-card" @mouseover="hover = true" @mouseleave="hover = false">
<!-- Action Button Start -->
<div class="action-btn">
<b-dropdown aria-role="list" position="is-bottom-left" class="ii" ref="dro" @active-change="setDropState">
<template #trigger>
<p role="button">
<b-icon pack="fas" icon="ellipsis-v" size="is-small">
</b-icon>
</p>
</template>
<b-dropdown-item aria-role="menu-item" :focusable="false" custom paddingless>
<b-button type="is-text" tag="a" :target="(item.state == 'running') ?'_blank':'_self'" :href="(item.state == 'running') ? siteUrl(item.port,item.index) :'javascript:void(0)'" expanded>Open</b-button>
<b-button type="is-text" @click="configApp" expanded>Setting</b-button>
<b-button type="is-text" expanded @click="uninstallConfirm" :loading="isUninstalling">Unistall</b-button>
<div class="columns is-gapless bbor">
<div class="column is-flex is-justify-content-center is-align-items-center">
<b-button icon-pack="fas" icon-left="sync" type="is-text" expanded :loading="isRestarting" @click="restartApp"></b-button>
</div>
<div class="column is-flex is-justify-content-center is-align-items-center">
<b-button icon-pack="fas" icon-left="power-off" type="is-text" expanded @click="toggle(item)" :loading="isStarting" :class="item.state"></b-button>
</div>
</div>
</b-dropdown-item>
</b-dropdown>
</div>
<!-- Action Button End -->
<!-- Card Content Start -->
<div class="has-text-centered is-flex is-justify-content-center is-flex-direction-column pt-3 pb-3">
<a :target="(item.state == 'running') ?'_blank':'_self'" class="is-flex is-justify-content-center" :href="(item.state == 'running') ? siteUrl(item.port,item.index) :'javascript:void(0)'">
<b-image :src="item.icon" :src-fallback="require('@/assets/img/default.png')" webp-fallback=".jpg" class="is-72x72" :class="item.state | dotClass"></b-image>
</a>
<p class="mt-4 one-line">
<a class="one-line" :target="(item.state == 'running') ?'_blank':'_self'" :href="(item.state == 'running') ? siteUrl(item.port,item.index) :'javascript:void(0)'">
{{item.name}}
</a>
</p>
</div>
<!-- Card Content End -->
<!-- Loading Bar Start -->
<b-loading :is-full-page="false" v-model="isUninstalling" :can-cancel="false"></b-loading>
<!-- Loading Bar End -->
</div>
</template>
<script>
export default {
name: "app-card",
data() {
return {
hover: false,
dropState: false,
isUninstalling: false,
isRestarting: false,
isStarting: false,
isStoping: false,
isSaving: false,
}
},
props: {
item: {
type: Object
},
},
methods: {
/**
* @description: Create application access link
* @param {String} port App access port
* @param {String} index App access index page
* @return {String}
*/
siteUrl(port, index) {
return (process.env.NODE_ENV === "'dev'") ? `http://${this.$store.state.devIp}:${port}${index}` : `http://${document.domain}:${port}${index}`
},
/**
* @description: Set drop-down menu status
* @param {Boolean} e
* @return {*} void
*/
setDropState(e) {
this.dropState = e
},
/**
* @description: Restart Application
* @return {*} void
*/
restartApp() {
this.isRestarting = true
this.$api.app.startContainer(this.item.custom_id, { state: "restart" }).then((res) => {
console.log(res.data);
if (res.data.success == 200) {
this.updateState()
}
this.isRestarting = false;
})
},
/**
* @description: Confirm before uninstall
* @return {*} void
*/
uninstallConfirm() {
let _this = this
this.$buefy.dialog.confirm({
title: 'Attention',
message: 'Data cannot be recovered after deletion! <br>Continue on to uninstall this application?',
type: 'is-dark',
confirmText: 'Uninstall',
onConfirm: () => {
_this.isUninstalling = true
_this.uninstallApp()
}
})
},
/**
* @description: Uninstall app
* @return {*} void
*/
uninstallApp() {
this.isUninstalling = true
this.$api.app.uninstall(this.item.custom_id).then((res) => {
if (res.data.success == 200) {
console.log(res.data.data);
this.updateState()
}
this.isUninstalling = false;
})
},
/**
* @description: Emit the event that the app has been updated
* @return {*} void
*/
updateState() {
this.$emit("updateState")
},
/**
* @description: Emit the event that the app has been updated with custom_id
* @return {*} void
*/
configApp() {
this.$emit("configApp", this.item.custom_id)
},
/**
* @description: Start or Stop a App
* @param {Object} item the app info object
* @return {*} void
*/
toggle(item) {
this.isStarting = true;
let data = {
state: item.state == "running" ? "stop" : "start"
}
this.$api.app.startContainer(item.custom_id, data).then((res) => {
console.log(res.data);
item.state = res.data.data
this.isStarting = false
this.updateState()
})
},
},
watch: {
hover(val) {
if (!val && this.dropState)
this.$refs.dro.toggle();
}
},
filters: {
/**
* @description: Format Dot Class
* @param {String} state
* @return {String}
*/
dotClass(state) {
return state == 'running' ? 'start' : 'stop'
},
}
}
</script>
<style>
</style>

View File

@@ -1,27 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-18 23:13:58
* @Description: The left bottom brand bar
* @FilePath: \CasaOS-UI\src\components\BrandBar.vue
-->
<template>
<div class="brand-bar is-flex is-align-items-center has-text-white">
<figure class="image is-32x32">
<img :src="require('@/assets/img/casa.svg')">
</figure>
<span class="is-size-4 mr-3 ml-3">CasaOS</span>
<span>Made by IceWhale with and you !</span>
</div>
</template>
<script>
export default {
name: "brand-bar"
}
</script>
<style>
</style>

View File

@@ -1,28 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-18 23:14:33
* @Description: The right bottom contact bar
* @FilePath: \CasaOS-UI\src\components\ContactBar.vue
-->
<template>
<div class="contact-bar is-flex is-align-items-center has-text-white pl-3 pr-3">
<a href="#">
<b-icon pack="fas" icon="map-signs" size=""></b-icon>
</a>
<a href="https://discord.gg/Gx4BCEtHjx" target="_blank">
<b-icon pack="fab" icon="discord" size=""></b-icon>
</a>
<a href="https://github.com/ZimaBoard/CasaOS" target="_blank">
<b-icon pack="fab" icon="github" size=""></b-icon>
</a>
</div>
</template>
<script>
export default {
name: "contact-bar"
}
</script>

View File

@@ -1,453 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-22 16:27:00
* @Description: Install Panel of Docker
* @FilePath: /CasaOS-UI/src/components/Panel.vue
-->
<template>
<div class="modal-card">
<!-- Modal-Card Header Start -->
<header class="modal-card-head">
<div class="flex1">
<h3 class="title is-4 has-text-weight-normal">Create a new App manually</h3>
</div>
<b-button icon-left="file-import" type="is-dark" size="is-small" rounded @click="showImportPanel" v-if="currentSlide == 1 && state == 'install'">Import</b-button>
</header>
<!-- Modal-Card Header End -->
<!-- Modal-Card Body Start -->
<section class="modal-card-body">
<section v-show="currentSlide == 1">
<ValidationObserver ref="ob1">
<ValidationProvider rules="required" name="Image" v-slot="{ errors, valid }">
<b-field label="Docker Image *" :type="{ 'is-danger': errors[0], 'is-success': valid }" :message="errors">
<b-input v-model="initData.image" placeholder="e.g.,hello-world:latest" :readonly="state == 'update'"></b-input>
<!-- <b-autocomplete :data="data" placeholder="e.g. hello-world:latest" field="image" :loading="isFetching" @typing="getAsyncData" @select="option => selected = option" v-model="initData.image" :readonly="state == 'update'"></b-autocomplete> -->
</b-field>
</ValidationProvider>
<ValidationProvider rules="required" name="Name" v-slot="{ errors, valid }">
<b-field label="App name *" :type="{ 'is-danger': errors[0], 'is-success': valid }" :message="errors">
<b-input value="" v-model="initData.label" placeholder="Your custom App Name"></b-input>
</b-field>
</ValidationProvider>
<b-field label="Icon URL">
<b-input value="" v-model="initData.icon" placeholder="Your custom icon URL"></b-input>
</b-field>
<b-field label="Web UI">
<p class="control">
<span class="button is-static">{{baseUrl}}</span>
</p>
<b-input v-model="webui" placeholder="8080/web/index.html" expanded></b-input>
</b-field>
<b-field label="Network">
<b-select v-model="initData.network_model" placeholder="Select" expanded>
<optgroup v-for="net in networks" :key="net.driver" :label="net.driver">
<option v-for="(option,index) in net.networks" :value="option.id" :key="option.name+index">
{{ option.name}}
</option>
</optgroup>
</b-select>
</b-field>
<ports v-model="initData.ports" :showHostPost="showHostPort" v-if="showPorts"></ports>
<input-group v-model="initData.volumes" label="Data Volumes" message="No App Data Volumes now, Click “+” to add one."></input-group>
<input-group v-model="initData.envs" label="Environment Variables" message="No environment variables now, Click “+” to add one." name1="Key" name2="Value"></input-group>
<input-group v-model="initData.devices" label="Devices" message="No devices now, Click “+” to add one."></input-group>
<b-field label="Memory Limit">
<vue-slider :min="256" :max="totalMemory" v-model="initData.memory"></vue-slider>
</b-field>
<b-field label="CPU Shares">
<b-select v-model="initData.cpu_shares" placeholder="Select" expanded>
<option value="10">Low</option>
<option value="50">Medium</option>
<option value="90">High</option>
</b-select>
</b-field>
<b-field label="Restart Policy">
<b-select v-model="initData.restart" placeholder="Select" expanded>
<option value="on-failure">on-failure</option>
<option value="always">always</option>
<option value="unless-stopped">unless-stopped</option>
</b-select>
</b-field>
<b-field label="App Description">
<b-input v-model="initData.description"></b-input>
</b-field>
<b-loading :is-full-page="false" v-model="isLoading" :can-cancel="false"></b-loading>
</ValidationObserver>
</section>
<section v-show="currentSlide == 2">
<div class="installing-warpper">
<lottie-animation path="./ui/img/ani/rocket-launching.json" :autoPlay="true" :width="200" :height="200"></lottie-animation>
<h3 class="title is-6 has-text-centered" :class="{'has-text-danger':errorType == 3,'has-text-black':errorType != 3}" v-html="installText"></h3>
</div>
</section>
</section>
<!-- Modal-Card Body End -->
<!-- Modal-Card Footer Start-->
<footer class="modal-card-foot is-flex is-align-items-center">
<div class="flex1"></div>
<div>
<b-button v-if="currentSlide == 1" :label="cancelButtonText" @click="$emit('close')" rounded />
<b-button v-if="currentSlide == 2 && errorType == 3 " label="Back" @click="prevStep" rounded />
<b-button v-if="currentSlide == 1 && state == 'install'" label="Install" type="is-dark" @click="installApp()" rounded />
<b-button v-if="currentSlide == 1 && state == 'update'" label="Update" type="is-dark" @click="updateApp()" rounded />
<b-button v-if="currentSlide == 2" :label="cancelButtonText" type="is-dark" @click="$emit('close')" rounded />
</div>
</footer>
<!-- Modal-Card Footer End -->
</div>
</template>
<script>
import axios from 'axios'
import InputGroup from './forms/InputGroup.vue';
import Ports from './forms/Ports.vue'
import ImportPanel from './forms/ImportPanel.vue'
import LottieAnimation from "lottie-vuejs/src/LottieAnimation.vue";
import VueSlider from 'vue-slider-component'
import 'vue-slider-component/theme/default.css'
import { ValidationObserver, ValidationProvider } from "vee-validate";
import "@/plugins/vee-validate";
import debounce from 'lodash/debounce'
export default {
components: {
Ports,
InputGroup,
ValidationObserver,
ValidationProvider,
LottieAnimation,
VueSlider
},
data() {
return {
timer: 0,
data: [],
isLoading: false,
isFetching: false,
errorType: 1,
currentSlide: 1,
cancelButtonText: "Cancel",
webui: "",
baseUrl: "",
totalMemory: 0,
networks: [],
tempNetworks: [],
networkModes: [],
installPercent: 0,
installText: "",
initData: {
port_map: "",
cpu_shares: 10,
memory: 300,
restart: "always",
label: "",
position: true,
index: "",
icon: "",
network_model: "",
image: "",
description: "",
origin: "custom",
ports: [],
volumes: [],
envs: [],
devices: [],
}
}
},
props: {
id: String,
state: String,
configData: Object,
initDatas: {
type: Object
}
},
created() {
//If it is edit, Init data
if (this.initDatas != undefined) {
this.initData = this.initDatas
this.webui = this.initDatas.port_map + this.initDatas.index
}
//Get Max memory info form device
this.totalMemory = Math.floor(this.configData.memory.total / 1048576);
this.initData.memory = this.totalMemory
//Handling network types
this.tempNetworks = this.configData.networks;
this.networkModes = this.unique(this.tempNetworks.map(item => {
return item.driver
}))
this.networks = this.networkModes.map(item => {
let tempitem = {}
tempitem.driver = item
tempitem.networks = this.tempNetworks.filter(net => {
return net.driver == item
})
return tempitem
})
let gg = this.tempNetworks.filter(item => {
if (item.driver == "bridge") {
return item
}
})
this.initData.network_model = gg[0].id
// Set Front-end base url
this.baseUrl = `${window.location.protocol}//${document.domain}:`;
},
computed: {
showPorts() {
if (this.initData.network_model.indexOf("macvlan") > -1) {
return false
} else {
return true
}
},
showHostPort() {
if (this.initData.network_model.indexOf("host") > -1) {
return false
} else {
return true
}
}
},
methods: {
/**
* @description: Process the datas before submit
* @param {*}
* @return {*} void
*/
processData() {
// GET port map and index
if (this.webui != "") {
let slashArr = this.webui.split("/")
this.initData.port_map = slashArr[0]
this.initData.index = "/" + slashArr.slice(1).join("/");
}
let model = this.initData.network_model.split("-");
this.initData.network_model = model[0]
},
/**
* @description: Array deduplication
* @param {Array} arr
* @return {Array}
*/
unique(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
},
/**
* @description: Back to prev Step
* @param {*}
* @return {*} void
*/
prevStep() {
this.currentSlide--;
},
/**
* @description: Validate form async
* @param {Object} ref ref of component
* @return {Boolean}
*/
async checkStep(ref) {
let isValid = await ref.validate()
return isValid
},
/**
* @description: Submit datas after valid
* @param {*}
* @return {*} void
*/
installApp() {
this.checkStep(this.$refs.ob1).then(val => {
if (val) {
this.processData();
this.isLoading = true;
this.$api.app.install(this.id, this.initData).then((res) => {
this.isLoading = false;
if (res.data.success == 200) {
this.currentSlide = 2;
this.cancelButtonText = "Continue in background"
this.checkInstallState(res.data.data)
} else {
//this.currentSlide = 1;
this.$buefy.toast.open({
message: res.data.message,
type: 'is-warning'
})
}
})
}
})
},
/**
* @description: Check the installation process every 250 milliseconds
* @param {String} appId
* @return {*} void
*/
checkInstallState(appId) {
this.timer = setInterval(() => {
this.updateInstallState(appId)
}, 250)
},
/**
* @description: Update the installation status to the UI
* @param {String} appId
* @return {*} void
*/
updateInstallState(appId) {
this.$api.app.state(appId).then((res) => {
let resData = res.data.data;
this.installPercent = resData.speed;
this.errorType = resData.type;
if (this.errorType == 4) {
try {
let info = JSON.parse(resData.message)
let id = (info.id != undefined) ? info.id : "";
let progress = ""
if (info.progressDetail != undefined) {
let progressDetail = info.progressDetail
if (!isNaN(progressDetail.current / progressDetail.total)) {
progress = "<br>Progress:" + String(Math.floor((progressDetail.current / progressDetail.total) * 100)) + "%"
}
}
let status = info.status
this.installText = status + ":" + id + " " + progress
} catch (error) {
console.log(error);
}
} else {
this.installText = resData.message
}
if (resData.speed == 100 || this.errorType == 3) {
clearInterval(this.timer)
}
let _this = this
if (resData.speed == 100) {
setTimeout(() => {
_this.$emit('updateState')
_this.$emit('close')
}, 1000)
}
})
},
/**
* @description: Save edit update
* @return {*} void
*/
updateApp() {
this.processData();
this.isLoading = true;
this.$api.app.updateContainerSetting(this.id, this.initData).then((res) => {
if (res.data.success == 200) {
this.isLoading = false;
this.$emit('updateState')
} else {
this.$buefy.toast.open({
message: res.data.message,
type: 'is-warning'
})
}
this.$emit('close')
})
},
/**
* @description: Show import panel
* @return {*} void
*/
showImportPanel() {
this.$buefy.modal.open({
parent: this,
component: ImportPanel,
hasModalCard: true,
customClass: '',
trapFocus: true,
canCancel: ['escape'],
scroll: "keep",
animation: "zoom-out",
events: {
'update': (e) => {
this.initData = e
this.$buefy.dialog.alert({
title: 'Attention',
message: 'AutoFill only helps you to complete most of the configuration. Some of the configuration information still needs to be confirmed by you.',
type: 'is-dark'
})
}
},
props: {
initData: this.initData,
netWorks: this.networks
}
})
},
/**
* @description: Get remote synchronization information
* @param {*} function
* @return {*} void
*/
getAsyncData: debounce(function (name) {
if (!name.length) {
this.data = []
return
}
this.isFetching = true
axios.get(`https://hub.docker.com/api/content/v1/products/search?source=community&q=${name}&page=1&page_size=4`)
.then(({ data }) => {
this.data = []
data.summaries.forEach((item) => this.data.push(item.name))
})
.catch((error) => {
this.data = []
throw error
})
.finally(() => {
this.isFetching = false
})
}, 500)
},
destroyed() {
clearInterval(this.timer)
},
}
</script>

View File

@@ -1,105 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:23:01
* @Description: Top Search bar
* @FilePath: \CasaOS-UI\src\components\SearchBar.vue
-->
<template>
<b-field position="is-centered " class="search-bar has-text-white">
<b-input placeholder="Google Search..." v-model="keyText" icon="magnify" icon-right="magnify" icon-right-clickable @icon-right-click="gotoSearch" @keyup.enter.native="gotoSearch" size="is-large" :class="['ovh',isFocus?'fo':'']" expanded @focus="onFocus" @blur="onBlur">
</b-input>
</b-field>
</template>
<script>
export default {
name: "search-bar",
data() {
return {
isFocus: false,
keyText: ""
}
},
methods: {
/**
* @description: Handle Focus event
* @return {*} void
*/
onFocus() {
this.isFocus = true;
},
/**
* @description: Handle Blur event
* @return {*} void
*/
onBlur() {
if (this.keyText == "")
this.isFocus = false;
},
/**
* @description: Pop up a new window and jump to google search
* @return {*} void
*/
gotoSearch() {
window.open("https://www.google.com/search?q=" + this.keyText, '_blank')
}
},
}
</script>
<style lang="scss">
.search-bar {
input {
transition: all 0.2s;
appearance: none;
background: rgba(123, 123, 123, 0.16);
backdrop-filter: blur(0.875rem);
border-radius: 8px;
border: none;
outline: none;
font-size: 1.5rem;
color: white;
&:focus {
border: none;
box-shadow: none;
}
&::placeholder {
color: white;
}
}
.ovh {
overflow: hidden;
.icon.is-left {
transition: all 0.2s;
left: 0;
}
.icon.is-right {
transition: all 0.2s;
right: -3rem !important;
color: white !important;
}
input {
padding-left: 2.5em !important;
padding-right: 1em !important;
}
}
.fo {
.icon.is-left {
left: -3rem !important;
}
.icon.is-right {
transition: all 0.2s;
right: 0 !important;
}
input {
padding-right: 2.5em !important;
padding-left: 1em !important;
}
}
}
</style>

View File

@@ -1,56 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:23:49
* @Description:
* @FilePath: \CasaOS-UI\src\components\Shortcuts.vue
-->
<template>
<div class="has-text-left mt-6">
<div class="title-bar is-flex is-align-items-center">
<h1 class="title is-4 has-text-white is-flex-shrink-1">Shortcuts</h1>
<div class="buttons ">
<b-button icon-left="plus" type="is-dark" size="is-small" rounded>Add shortcut</b-button>
</div>
</div>
<div class="columns is-variable is-2 is-multiline ">
<div class="column is-narrow is-3" v-for="n in 10" :key="n">
<div class="wuji-card is-flex is-align-items-center ">
<figure class="image is-32x32 simg">
<img :src="require('@/assets/img/icon.png')">
</figure>
<p class="ml-4 flex1 one-line">Test</p>
<div class="action-btn1">
<b-dropdown aria-role="list" position="is-bottom-left" append-to-body>
<template #trigger>
<p role="button">
<b-icon pack="fas" icon="ellipsis-v" size="is-small">
</b-icon>
</p>
</template>
<b-dropdown-item aria-role="listitem">Action</b-dropdown-item>
<b-dropdown-item aria-role="listitem">Another action</b-dropdown-item>
<b-dropdown-item aria-role="listitem">Something else</b-dropdown-item>
</b-dropdown>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'shortcuts'
}
</script>
<style>
</style>

View File

@@ -1,27 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-18 23:20:56
* @Description:
* @FilePath: \CasaOS-UI\src\components\SideBar.vue
-->
<template>
<div class="side-bar mr-5">
<clock></clock>
</div>
</template>
<script>
import Clock from '../assets/widgets/Clock.vue'
export default {
name: 'side-bar',
components: { Clock },
}
</script>
<style>
</style>

View File

@@ -1,55 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-18 23:20:19
* @Description:
* @FilePath: \CasaOS-UI\src\components\Suggestion.vue
-->
<template>
<div class="has-text-left ">
<h1 class="title is-4 mt-6 has-text-white">Suggestions</h1>
<div class="columns is-variable is-2 is-multiline">
<div class="column is-one-third" v-for="(item,index) in list" :key="'ss'+index">
<a :href="item.url" target="_blank">
<div class="wuji-card is-flex is-align-items-center">
<div class="info ">
<div class="two-line ">
{{item.title}}
</div>
<div class="des two-line">
{{item.content}}
</div>
</div>
<figure class="image is-48x48 simg is-flex">
<img :src="item.image_url">
</figure>
</div>
</a>
</div>
</div>
</div>
</template>
<script>
export default {
name:'suggestion',
data() {
return {
list: []
}
},
mounted() {
this.$api.task.list().then(res => {
if (res.data.success == 200) {
this.list = res.data.data
}
})
},
}
</script>
<style>
</style>

View File

@@ -1,161 +0,0 @@
<!--
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-23 18:21:13
* @Description: Top bar
* @FilePath: /CasaOS-UI/src/components/TopBar.vue
-->
<template>
<div class="navbar top-bar is-flex is-align-items-center">
<div class="navbar-brand ml-3">
<b-dropdown aria-role="list" class="navbar-item" @active-change="onOpen">
<template #trigger>
<p role="button">
<b-icon pack="fas" icon="sliders-h">
</b-icon>
</p>
</template>
<b-dropdown-item aria-role="menu-item" :focusable="false" custom>
<h2 class="title is-4">CasaOS Setting</h2>
<div class="is-flex is-align-items-center item">
<div class="is-flex is-align-items-center flex1">
<b-icon pack="fas" icon="sync-alt" class="mr-1"></b-icon> <b>Update</b>
</div>
<div>
v{{updateInfo.current_version}}
</div>
<!-- <b-field>
<b-switch v-model="barData.auto_update" type="is-dark" size="is-small" class="is-flex-direction-row-reverse mr-0" @input="saveData">
Auto-Check
</b-switch>
</b-field> -->
</div>
<div class="is-flex is-align-items-center pl-5" v-if="!updateInfo.is_need">
{{latestText}}
<b-icon type="is-success" pack="fas" icon="check" class="ml-1"></b-icon>
</div>
<div class="is-flex is-align-items-center is-justify-content-end update-container pl-5" v-if="updateInfo.is_need">
<div class="flex1">{{updateText}}</div>
<b-button type="is-dark" size="is-small" class="ml-2" :loading="isUpdating" rounded @click="updateSystem">Update</b-button>
</div>
</b-dropdown-item>
</b-dropdown>
</div>
<div class="navbar-menu">
<div class="navbar-end mr-3">
<!-- <b-icon pack="far" icon="comment-alt"></b-icon> -->
</div>
</div>
</div>
</template>
<script>
export default {
name: "top-bar",
data() {
return {
timer: 0,
barData: {
auto_update: false,
background: "",
background_type: "d",
search_engine: "google",
search_switch: false,
shortcuts_switch: false,
widgets_switch: false
},
updateInfo: {
current_version: '0',
is_need: false,
version: Object
},
isUpdating: false,
latestText: "Currently the latest version",
updateText: "A new version is available!"
}
},
created() {
this.getConfig();
},
methods: {
/**
* @description: Get CasaOs Configs
* @return {*} void
*/
getConfig() {
this.$api.info.systemConfig().then(res => {
if (res.data.success == 200) {
this.barData = res.data.data
}
})
},
/**
* @description: Save CasaOs Configs
* @return {*} void
*/
saveData() {
this.$api.info.saveSystemConfig(this.barData).then(res => {
if (res.data.success == 200) {
console.log(res);
}
})
},
/**
* @description: Handle Dropmenu state
* @param {Boolean} isOpen
* @return {*} void
*/
onOpen(isOpen) {
if (isOpen) {
this.$api.info.checkVersion().then(res => {
if (res.data.success == 200) {
this.updateInfo = res.data.data
}
})
}
},
/**
* @description: Update System Version and check update state
* @return {*} void
*/
updateSystem() {
this.isUpdating = true;
this.$api.info.updateSystem().then(res => {
if (res.data.success == 200) {
console.log(res.data.data);
}
});
this.checkUpdateState();
},
/**
* @description: check update state if is_need is false then reload page
* @return {*} void
*/
checkUpdateState() {
this.timer = setInterval(() => {
this.$api.info.checkVersion().then(res => {
if (res.data.success == 200) {
if (!res.data.data.is_need) {
clearInterval(this.timer);
location.reload();
}
}
})
}, 3000)
}
},
}
</script>

View File

@@ -1,154 +0,0 @@
<template>
<div class="modal-card">
<!-- Modal-Card Header Start -->
<header class="modal-card-head">
<div class="flex1">
<h3 class="title is-4 has-text-weight-normal">Import From Docker CLI</h3>
</div>
</header>
<!-- Modal-Card Header End -->
<!-- Modal-Card Body Start -->
<section class="modal-card-body">
<b-field label="Command Line" :type="{ 'is-danger': parseError}" :message="errors">
<b-input maxlength="800" type="textarea" class="import-area" v-model="dockerCliCommands"></b-input>
</b-field>
</section>
<!-- Modal-Card Body End -->
<!-- Modal-Card Footer Start-->
<footer class="modal-card-foot is-flex is-align-items-center">
<div class="flex1"></div>
<div>
<b-button label="Cancel" @click="$emit('close')" rounded />
<b-button label="Sumbit" type="is-dark" @click="emitSubmit" rounded />
</div>
</footer>
<!-- Modal-Card Footer End -->
</div>
</template>
<script>
import parser from 'yargs-parser'
export default {
data() {
return {
dockerCliCommands: "",
parseError: false,
errors: "",
}
},
props: {
initData: Object,
netWorks: Array
},
created() {
console.log(this.netWorks);
},
methods: {
/**
* @description: Emit Event to tell parent Update
* @param {*}
* @return {*} void
*/
emitSubmit() {
if (this.parseCli()) {
this.errors = ""
this.$emit('update', this.initData)
this.$emit('close')
} else {
this.errors = "Please fill correct command line"
this.parseError = true;
}
},
/**
* @description: Parse Import Docker Cli Commands
* @return {Boolean}
*/
parseCli() {
const formattedInput = this.dockerCliCommands.replace(/\<[^\>]*\>/g, 'Custom_data').replace(/[\r\n]/g, "").replace(/\\/g, "\\ ").trim();
const parsedInput = parser(formattedInput)
console.log(parsedInput);
const { _: command, ...params } = parsedInput;
if (command[0] !== 'docker' || (command[1] !== 'run' && command[1] !== 'create')) {
return false
} else {
//Envs
this.initData.envs = this.makeArray(parsedInput.e).map(item => {
let ii = item.split("=");
return {
container: ii[0],
host: ii[1]
}
})
//Ports
this.initData.ports = this.makeArray(parsedInput.p).map(item => {
let pArray = item.split(":")
let endArray = pArray[1].split("/")
let protocol = (endArray[1]) ? endArray[1] : 'tcp';
return {
container: endArray[0],
host: pArray[0],
protocol: protocol
}
})
//Volume
this.initData.volumes = this.makeArray(parsedInput.v).map(item => {
let ii = item.split(":");
return {
container: ii[1],
host: ii[0]
}
})
// Devices
this.initData.devices = this.makeArray(parsedInput.device).map(item => {
let ii = item.split(":");
return {
container: ii[1],
host: ii[0]
}
})
//Network
if (parsedInput.network != undefined) {
let network = (parsedInput.network == 'physical') ? 'macvlan' : parsedInput.network;
let seletNetworks = this.netWorks.filter(item => {
if (item.driver == network) {
return true
}
})
if (seletNetworks.length > 0) {
this.initData.network_model = seletNetworks[0].networks[0].id;
}
}
//Image
this.initData.image = [...command].pop()
//Label
if (parsedInput.name != undefined) {
this.initData.label = parsedInput.name.replace(/^\S/, s => s.toUpperCase())
}
//Restart
if (parsedInput.restart != undefined) {
this.initData.restart = parsedInput.restart
}
return true
}
},
/**
* @description: Make String to Array
* @param {*}
* @return {Array}
*/
makeArray(foo) {
let newArray = (typeof (foo) == "string") ? [foo] : foo
return (newArray == undefined) ? [] : newArray
}
},
}
</script>
<style>
</style>

View File

@@ -1,108 +0,0 @@
<template>
<div class="mb-5">
<div class="field is-flex is-align-items-center mb-2">
<label class="label mb-0 flex1">{{label}}</label>
<b-button icon-left="plus" type="is-dark" size="is-small" rounded @click="addItem">Add</b-button>
</div>
<div class="is-flex is-align-items-center mb-5 info" v-if="vdata.length == 0">
<b-icon pack="fas" icon="info-circle" size="is-small" class="mr-2 "></b-icon>
<span>
{{message}}
</span>
</div>
<div class="port-item" v-for="(item,index) in vdata" :key="'port'+index">
<b-icon pack="fas" icon="times" size="is-small" class="is-clickable" @click.native="removeItem(index)"></b-icon>
<template v-if="index < 1">
<b-field grouped>
<b-field :label="name1" expanded>
<b-input :placeholder="name1" v-model="item.container" expanded @input="handleInput"></b-input>
</b-field>
<b-field :label="name2" expanded>
<b-input :placeholder="name2" v-model="item.host" expanded @input="handleInput"></b-input>
</b-field>
</b-field>
</template>
<template v-else>
<b-field grouped>
<b-input :placeholder="name1" v-model="item.container" expanded @input="handleInput"></b-input>
<b-input :placeholder="name2" v-model="item.host" expanded @input="handleInput"></b-input>
</b-field>
</template>
</div>
</div>
</template>
<script>
export default {
name:'input-group',
data() {
return {
isLoading: false,
items: [],
min: 0
}
},
model: {
prop: 'vdata',
event: 'change'
},
props: {
vdata: Array,
label: String,
message: String,
name1: {
type: String,
default: "Container"
},
name2: {
type: String,
default: "Host"
},
},
created() {
//this.items = this.vdata;
},
watch: {
},
mounted() {
//this.addItem()
},
methods: {
addItem() {
let itemObj = {
container: "",
host: ""
}
this.vdata.push(itemObj)
},
removeItem(index) {
this.vdata.splice(index, 1)
this.filterArray()
},
handleInput() {
this.filterArray()
},
filterArray() {
// let newArray = this.items.filter(item => {
// if (item.container != "" && item.host != "") {
// return true
// } else {
// return false
// }
// })
this.$emit('change', this.vdata)
}
},
}
</script>

View File

@@ -1,134 +0,0 @@
<template>
<div class="mb-5">
<div class="field is-flex is-align-items-center mb-2">
<label class="label mb-0 flex1">Ports</label>
<b-button icon-left="plus" type="is-dark" size="is-small" rounded @click="addItem">Add</b-button>
</div>
<div class="is-flex is-align-items-center mb-5 info" v-if="vdata.length == 0">
<b-icon pack="fas" icon="info-circle" size="is-small" class="mr-2 "></b-icon>
<span>
No App Ports now, Click + to add one.
</span>
</div>
<div class="port-item" v-for="(item,index) in vdata" :key="'port'+index">
<b-icon pack="fas" icon="times" size="is-small" class="is-clickable" @click.native="removeItem(index)"></b-icon>
<template v-if="index < 1">
<b-field grouped>
<b-field label="Container" expanded>
<b-input placeholder="Container" type="number" v-model="item.container" expanded @input="handleInput"></b-input>
</b-field>
<b-field label="Host" expanded>
<b-input placeholder="Host" type="number" v-model="item.host" expanded @input="handleInput" v-if="showHostPost"></b-input>
</b-field>
<b-field label="Protocol" expanded>
<b-select placeholder="Protocol" v-model="item.protocol" expanded @input="handleInput">
<option value="tcp">TCP</option>
<option value="udp">UDP</option>
<option value="both">TCP + UDP</option>
</b-select>
</b-field>
</b-field>
</template>
<template v-else>
<b-field grouped>
<b-input placeholder="Container" type="number" v-model="item.container" expanded @input="handleInput"></b-input>
<b-input placeholder="Host" type="number" v-model="item.host" expanded @input="handleInput" v-if="showHostPost"></b-input>
<b-select placeholder="Protocol" v-model="item.protocol" expanded @input="handleInput">
<option value="tcp">TCP</option>
<option value="udp">UDP</option>
<option value="both">TCP + UDP</option>
</b-select>
</b-field>
</template>
</div>
</div>
</template>
<script>
export default {
name: 'ports',
data() {
return {
isLoading: false,
items: [],
min: 0
}
},
model: {
prop: 'vdata',
event: 'change'
},
props: {
vdata: Array,
showHostPost: Boolean
},
created() {
//this.items = this.vdata;
},
mounted() {
if (this.vdata.length == 0) {
//this.addItem()
}
},
methods: {
addItem() {
let itemObj = {
container: "",
host: "",
protocol: "tcp"
}
this.vdata.push(itemObj)
},
removeItem(index) {
this.vdata.splice(index, 1)
this.filterArray()
},
handleInput() {
this.filterArray()
},
filterArray() {
// let newArray = this.items.filter(item => {
// if (item.container != "" && item.host != "") {
// return true
// } else {
// return false
// }
// })
this.$emit('change', this.vdata)
}
},
}
</script>
<style lang="scss">
.info {
font-size: 0.875rem;
color: #5a5a5a;
}
.port-item {
position: relative;
.icon {
position: absolute;
right: -1.5rem;
bottom: 0.825rem;
}
&:not(:last-child) {
margin-bottom: 0.5rem;
}
.field.is-expanded {
.label {
text-align: center;
font-weight: normal;
}
}
}
</style>

View File

@@ -1,17 +0,0 @@
import Vue from 'vue'
import App from '@/App.vue'
import router from '@/router'
import store from '@/store'
import api from '@/service/api.js'
import Buefy from 'buefy'
import '@/assets/scss/app.scss'
Vue.use(Buefy)
Vue.config.productionTip = false
Vue.prototype.$api = api;
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')

View File

@@ -1,28 +0,0 @@
import { required, confirmed, length, email, min } from "vee-validate/dist/rules";
import { extend } from "vee-validate";
extend("required", {
...required,
message: "This field is required"
});
extend("email", {
...email,
message: "This field must be a valid email"
});
extend("confirmed", {
...confirmed,
message: "This field confirmation does not match"
});
extend("length", {
...length,
message: "This field must have 2 options"
});
extend("min", {
...min,
message: "This field must have more than {length} characters"
});

View File

@@ -1,24 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-18 23:19:27
* @Description:
* @FilePath: \CasaOS-UI\src\router\index.js
*/
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = [
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
export default router

View File

@@ -1,19 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-23 15:59:52
* @Description:
* @FilePath: /CasaOS-UI/src/service/api.js
*/
import user from "./user.js";
import app from './app.js';
import task from './task.js';
import info from './info.js';
export default {
app,
info,
user,
task
}

View File

@@ -1,79 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:26:20
* @Description: Application API
* @FilePath: \CasaOS-UI\src\service\app.js
*/
import { api } from "./service.js";
const app = {
//Get Install Info
appConfig() {
return api.get("/app/install/config");
},
//Store List
storeList(data) {
return api.get("/app/list", data);
},
//Store App Info
storeAppInfo(id) {
return api.get("/app/appinfo/" + id);
},
//Store Category List
storeCategoryList() {
return api.get("/app/category");
},
//Check Port
checkPort(port, type) {
let data = {
type: type
}
return api.get('/app/check/' + port, data);
},
// Get a free port
getPort() {
return api.get('/app/getport');
},
// Get app Running State
getState(id, data) {
return api.get('/app/state/' + id, data);
},
//Install App
install(id, data) {
return api.post('/app/install/' + id, data);
},
//Install Info
state(id) {
return api.get('/app/speed/' + id);
},
// Uninstall App
uninstall(id) {
return api.delete('/app/uninstall/' + id);
},
//My App List
myAppList(data) {
return api.get('/app/mylist', data);
},
//Container info
getContainerInfo(id) {
return api.get('/app/info/' + id);
},
//Container Log
getContainerLogs(id) {
return api.get('/app/logs/' + id)
},
//Start Or Stop Or Restart A Container with ID
startContainer(id, data) {
return api.put('/app/state/' + id, data)
},
getContainerSettingdata(id) {
return api.get(`/app/update/${id}/info`)
},
//Update Container Settings
updateContainerSetting(id, data) {
return api.put(`/app/update/${id}/setting`, data);
}
}
export default app;

View File

@@ -1,37 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:26:08
* @Description: DDNS Service API
* @FilePath: \CasaOS-UI\src\service\ddns.js
*/
import { api } from "./service.js";
const ddns = {
//Add New DDNS
add(data) {
return api.post("/ddns/set", data);
},
//Delete a DDNS Item
delete(id) {
return api.delete("/ddns/delete/" + id);
},
//Get DDNS List
get_list() {
return api.get('/ddns/list');
},
//Ger DDNS Provider List
get_provider_list() {
return api.get('/ddns/getlist');
},
//Get Public Internet IP address (IPv4)
get_ipv4() {
return api.get('/ddns/ip');
},
// Ping Host
ping(host) {
return api.get('/ddns/ping/' + host);
}
}
export default ddns;

View File

@@ -1,35 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:26:02
* @Description: Disk API
* @FilePath: \CasaOS-UI\src\service\disk.js
*/
import { api } from "./service.js";
const disk = {
// get Path list
diskInfo() {
return api.get('/disk/info');
},
diskList() {
return api.get('/disk/list');
},
// System path
renamePath(oldpath, path) {
let data = {
oldpath: oldpath,
newpath: path
}
return api.get('/zima/rename', data);
},
// Make a new Dir
mkdir(path) {
let data = {
path: path
}
return api.get('/zima/mkdir', data)
}
}
export default disk;

View File

@@ -1,36 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:25:53
* @Description: File API
* @FilePath: \CasaOS-UI\src\service\file.js
*/
import { api } from "./service.js";
const file = {
// get Path list
dirPath(path) {
let data = {
path: path
}
return api.get('/file/dirpath', data);
},
// System path
renamePath(oldpath, path) {
let data = {
oldpath: oldpath,
newpath: path
}
return api.get('/file/rename', data);
},
// Make a new Dir
mkdir(path) {
let data = {
path: path
}
return api.post('/file/mkdir', data)
}
}
export default file;

View File

@@ -1,53 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-23 17:41:01
* @Description: System HardWare Info API
* @FilePath: /CasaOS-UI/src/service/info.js
*/
import { api } from "./service.js";
const info = {
//CPU info
cpuInfo() {
return api.get("/zima/getcpuinfo");
},
//Memory Info
memoryInfo() {
return api.get("/zima/getmeminfo");
},
//Network Info
networkInfo() {
return api.get('/zima/getnetinfo');
},
//Disk Info
diskInfo() {
return api.get('/zima/getdiskinfo');
},
//All Info
allInfo() {
return api.get('/zima/getinfo');
},
// System Info
systemInfo() {
return api.get('/zima/sysinfo');
},
//Get CasaOS Config
systemConfig() {
return api.get('/sys/config')
},
//Save CasaOs Config
saveSystemConfig(data) {
return api.post('/sys/config', data)
},
// Check Verison
checkVersion() {
return api.get('/sys/check');
},
//Update System
updateSystem(){
return api.post('/sys/update');
}
}
export default info;

View File

@@ -1,138 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-23 17:26:31
* @Description:
* @FilePath: /CasaOS-UI/src/service/service.js
*/
import axios from 'axios'
import qs from 'qs'
import router from '@/router'
import store from '@/store'
// Set Post Headers
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
axios.defaults.withCredentials = false;
if (process.env.NODE_ENV === "'dev'") {
axios.defaults.baseURL = `http://${store.state.devIp}:8089/v1`;
} else {
axios.defaults.baseURL = `${document.location.protocol}//${document.location.host}/v1`
}
//Create a axios instance, And set timeout to 30s
const instance = axios.create({
timeout: 10000,
});
window.isRefreshing = false
let refreshSubscribers = []
function subscribeTokenRefresh(cb) {
refreshSubscribers.push(cb)
}
function onRrefreshed(token) {
refreshSubscribers.map(cb => cb(token))
}
// Request interceptors
instance.interceptors.request.use((config) => {
let token = ''
if (sessionStorage.getItem("user_token")) {
token = sessionStorage.getItem("user_token")
}
if (localStorage.getItem("user_token")) {
token = localStorage.getItem("user_token")
}
config.headers.Authorization = token
if (token === "" && config.url !== "user/login") {
if (!window.isRefreshing) {
window.isRefreshing = true;
axios.post('user/login', qs.stringify({
username: "admin",
pwd: "admin"
})).then(res => {
token = res.data.data;
store.commit('setToken', token)
localStorage.setItem("user_token", token)
onRrefreshed(token);
})
}
let retry = new Promise((resolve) => {
/* (token) => {...}这个函数就是回调函数 */
subscribeTokenRefresh((token) => {
config.headers.Authorization = token
/* 将请求挂起 */
resolve(config)
})
})
return retry
} else {
return config;
}
}, (error) => {
// Do something with request error
return Promise.reject(error)
})
// 响应拦截(请求返回后拦截)
instance.interceptors.response.use(response => {
//console.log("响应拦截", response);
return response;
}, error => {
console.log('catch', error)
if (error.response) {
switch (error.response.status) {
case 401:
sessionStorage.removeItem('user_token') //可能是token过期清除它
router.replace({ //跳转到登录页面
path: '/',
query: { redirect: router.currentRoute.fullPath } // 将跳转的路由path作为参数登录成功后跳转到该路由
})
break;
case 404:
store.commit('setServiceError', true);
break;
case 500:
break;
}
} else {
store.commit('setServiceError', true);
}
return Promise.reject(error)
})
//按照请求类型对axios进行封装
const api = {
get(url, data) {
return instance.get(url, { params: data })
},
post(url, data) {
let newData = (url.indexOf("install") > 0 || url.indexOf("sys") > 0) ? JSON.stringify(data) : qs.stringify(data)
if (url.indexOf("install") > 0) {
axios.defaults.headers.post['Content-Type'] = 'application/json';
} else {
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
}
return instance.post(url, newData)
},
put(url, data) {
let newData = (url.indexOf("setting") > 0) ? JSON.stringify(data) : qs.stringify(data)
if (url.indexOf("setting") > 0) {
axios.defaults.headers.post['Content-Type'] = 'application/json';
} else {
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
}
return instance.put(url, newData)
},
delete(url, data) {
return instance.delete(url, { params: data })
}
}
export { api }

View File

@@ -1,21 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:26:45
* @Description: Task API
* @FilePath: \CasaOS-UI\src\service\task.js
*/
import { api } from "./service.js";
const task = {
//List
list() {
return api.get("/task/list");
},
//Mark
completion(id) {
return api.put(`/task/completion/${id}`);
}
}
export default task;

View File

@@ -1,47 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:26:47
* @Description: User API
* @FilePath: \CasaOS-UI\src\service\user.js
*/
import { api } from "./service.js";
const user = {
//login
login(data) {
return api.post("user/login", data);
},
// Create UserName and Password
createUsernameAndPaword(data) {
return api.post("/user/setusernamepwd", data);
},
// Change User Avatar
changeAvatar(data) {
return api.post("/user/changhead", data);
},
// Change UserName
changeUserName(data) {
return api.put("/user/changusername", data);
},
// Change User Password
changePassword(data) {
return api.put("/user/changuserpwd", data);
},
// Get user info
getUserInfo() {
return api.get("/user/info");
},
// Change User Info
changeUserInfo(data) {
return api.post('/user/changuserinfo', data)
}
}
export default user;

View File

@@ -1,64 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-19 09:26:50
* @Description: Zerotier API
* @FilePath: \CasaOS-UI\src\service\zerotier.js
*/
import { api } from "./service.js";
const zerotier = {
//Check if Need login to zerotier
isLogin() {
return api.get("/zerotier/islogin");
},
//Login
login(data) {
return api.post("/zerotier/login", data);
},
//Register
register(data) {
return api.post('/zerotier/register', data);
},
//networklist
networkLits() {
return api.get('/zerotier/list');
},
//joinNetwork
joinNetwork(id) {
return api.post(`/zerotier/join/${id}`);
},
// leaveNetwork
leaveNetwork(id) {
return api.post(`/zerotier/leave/${id}`);
},
// Get Network detial
networkDetail(id) {
return api.get(`/zerotier/info/${id}`);
},
// Edit Network
editNetwork(id, data) {
return api.put(`/zerotier/edit/${id}`, data)
},
// Delete A Network
delNetwork(id) {
return api.delete(`/zerotier/network/${id}/del`)
},
createNetwork() {
return api.post('/zerotier/create')
},
// Get Network member list
getMembers(id) {
return api.get(`/zerotier/member/${id}`)
},
// Edit Member
editMember(id, mId, data) {
return api.put(`/zerotier/member/${id}/edit/${mId}`, data)
},
// Delete Member
delMemeber(id, mId) {
return api.delete(`/zerotier/member/${id}/del/${mId}`)
}
}
export default zerotier;

View File

@@ -1,34 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-18 21:32:13
* @LastEditors: JerryK
* @LastEditTime: 2021-09-22 16:28:16
* @Description:
* @FilePath: /CasaOS-UI/src/store/index.js
*/
import Vue from 'vue'
import Vuex from 'vuex'
//import createPersistedState from "vuex-persistedstate";
Vue.use(Vuex)
export default new Vuex.Store({
//plugins: [createPersistedState()],
state: {
token: "",
devIp: "192.168.2.217",
serviceError: false
},
mutations: {
setToken(state, val) {
state.token = val
},
setServiceError(state, val) {
state.serviceError = val
}
},
actions: {
},
modules: {
}
})

View File

@@ -1,23 +0,0 @@
/*
* @Author: JerryK
* @Date: 2021-09-22 10:10:10
* @LastEditors: JerryK
* @LastEditTime: 2021-09-22 15:26:47
* @Description:
* @FilePath: /CasaOS-UI/vue.config.js
*/
const webpack = require('webpack')
module.exports = {
publicPath: '/ui/',
runtimeCompiler: true,
lintOnSave: false,
productionSourceMap: false,
pluginOptions: {
},
chainWebpack: config => {
config.plugin('ignore')
.use(new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/));
}
}

File diff suppressed because it is too large Load Diff

41
alpha.md Normal file
View File

@@ -0,0 +1,41 @@
<!--
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-06-27 11:37:26
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-30 14:16:31
* @FilePath: /CasaOS/alpha.md
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
-->
# alpha Test Description
## :warning: Warning
There is a risk of data loss in non-release versions, so please be careful to back up your data.
## Install/Update
``` curl -fsSL https://get.casaos.io | bash -v v0.3.3-alpha ```
## Check change log
[CHANGELOG](https://github.com/IceWhaleTech/CasaOS/blob/main/CHANGELOG.md)
## Check Design drawings
[Design drawings](https://www.figma.com/file/pvlGobvuWEvbCb3GLqXfim/CasaOS-V0.3.3)
## Feedback questions
Go [here]() to give feedback on your question, note that try to match the picture or video
## Retest after update
Wait for the fix to appear and update and retest, and follow up on the issue
## Thanks
Thank you for your great support, we will return your support from time to time.

40
conf/conf.conf Normal file
View File

@@ -0,0 +1,40 @@
[app]
PAGE_SIZE = 10
RuntimeRootPath = runtime/
LogPath = ./CasaOS/logs/server/
LogSaveName = log
LogFileExt = log
DateStrFormat = 20060102
DateTimeFormat = 2006-01-02 15:04:05
TimeFormat = 15:04:05
DateFormat = 2006-01-02
DBPath = ./CasaOS/server/db
ShellPath = ./CasaOS/server/shell
UserDataPath = ./CasaOS/conf
TempPath = ./CasaOS/temp
[server]
HttpPort = 8089
UDPPort = 54216
RunMode = release
;ServerApi = https://api.casaos.io/casaos-api
ServerApi = http://127.0.0.1:8091
Handshake = socket.casaos.io
Token = af268e4f-9f3a-408a-b59b-cf1a4f7f88c8
USBAutoMount =
SocketPort = 58313
[system]
ConfigStr = {"auto_update":false,"background":"","background_type":"","search_engine":"https://duckduckgo.com/?q=","search_switch":false,"shortcuts_switch":false,"widgets_switch":false,"lang":"en_us"}
WidgetList = [{"name":"clock","show":true},{"name":"cpu","show":true},{"name":"disks","show":true},{"name":"network","show":true}]
[file]
ShareDir =
DownloadDir = ./CasaOS/DATA/Downloads
[user]
Description = nothing
UserName = casaos
Initialized = true
PWD = 123456

32
conf/conf.conf.sample Normal file
View File

@@ -0,0 +1,32 @@
[app]
PAGE_SIZE = 10
RuntimeRootPath = runtime/
LogPath = /var/log/casaos/
LogSaveName = log
LogFileExt = log
DateStrFormat = 20060102
DateTimeFormat = 2006-01-02 15:04:05
TimeFormat = 15:04:05
DateFormat = 2006-01-02
DBPath = /var/lib/casaos
ShellPath = /usr/share/casaos/shell
UserDataPath = /var/lib/casaos/conf
TempPath = /var/lib/casaos/temp
[server]
HttpPort = 80
UDPPort =
RunMode = release
ServerApi = https://api.casaos.io/casaos-api
Handshake = socket.casaos.io
Token =
USBAutoMount =
[system]
WidgetList =
[file]
ShareDir =
DownloadDir =

View File

@@ -1,49 +0,0 @@
[app]
PAGE_SIZE = 10
RuntimeRootPath = runtime/
LogSavePath = /casaOS/logs/server/
LogSaveName = log
LogFileExt = log
; 必须的格式
DateStrFormat = 20060102
DateTimeFormat = 2006-01-02 15:04:05
TimeFormat = 15:04:05
DateFormat = 2006-01-02
[server]
HttpPort = 8089
RunMode = debug
;ServerApi = http://113.52.135.30:8090
;ServerApi = https://casaos.zimaboard.com
;ServerApi = http://192.168.2.167:8090
ServerApi = http://192.168.2.142:8090
[user]
UserName = admin
PWD = zimaboard
Email = aaa@222.ddd
Description = ddddddd
Token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImVyZXJlIiwicGFzc3dvcmQiOiJhZHNmZGYiLCJleHAiOjE2MjQwMDU0ODEsImlzcyI6Imdpbi1ibG9nIn0.JNsCccZuFCwlSMLJg62iOIB2xymk_k7xGa11xhZ07bc
[zerotier]
UserName = ddddd
PWD =
Token = yBKYyavr2RdFAIVN7iTpzlsB1o6CqTgm
[redis]
Host = 192.168.2.167:6379
Password =
MaxIdle = 30
MaxActive = 30
IdleTimeout = 200
[system]
AutoUpdate = true
SearchSwitch = true
WidgetsSwitch = false
ShortcutsSwitch = true
SearchEngine = baidu
Background = http://baidu.com1
BackgroundType = d

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

74
go.mod
View File

@@ -1,57 +1,85 @@
module oasis
module github.com/IceWhaleTech/CasaOS
go 1.16
require (
github.com/PuerkitoBio/goquery v1.7.0
github.com/Curtis-Milo/nat-type-identifier-go v0.0.0-20220215191915-18d42168c63d
github.com/Microsoft/go-winio v0.5.0 // indirect
github.com/Microsoft/hcsshim v0.8.22 // indirect
github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 // indirect
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/containerd/containerd v1.5.2
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/ambelovsky/go-structs v1.1.0 // indirect
github.com/ambelovsky/gosf v0.0.0-20201109201340-237aea4d6109
github.com/ambelovsky/gosf-socketio v0.0.0-20201109193639-add9d32f8b19 // indirect
github.com/bits-and-blooms/bitset v1.2.1 // indirect
github.com/containerd/containerd v1.5.7
github.com/containerd/continuity v0.2.0 // indirect
github.com/disintegration/imaging v1.6.2
github.com/docker/distribution v2.8.0+incompatible // indirect
github.com/docker/docker v20.10.7+incompatible
github.com/docker/go-connections v0.4.0
github.com/dsoprea/go-exif/v3 v3.0.0-20210625224831-a6301f85c82b
github.com/dsoprea/go-logging v0.0.0-20200710184922-b02d349568dd // indirect
github.com/forease/gotld v0.0.0-20190808124948-c50ff635576b
github.com/gin-contrib/gzip v0.0.2 // indirect
github.com/gin-contrib/gzip v0.0.2
github.com/gin-gonic/gin v1.7.2
github.com/go-ini/ini v1.62.0
github.com/go-ole/go-ole v1.2.5 // indirect
github.com/go-openapi/jsonreference v0.19.6 // indirect
github.com/go-openapi/spec v0.20.3 // indirect
github.com/go-openapi/swag v0.19.15 // indirect
github.com/go-openapi/spec v0.20.4 // indirect
github.com/go-playground/validator/v10 v10.6.1 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/golang-jwt/jwt/v4 v4.4.1
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/gomodule/redigo v1.8.5
github.com/google/go-github/v36 v36.0.0
github.com/google/uuid v1.3.0 // indirect
github.com/googollee/go-socket.io v1.6.2
github.com/gorilla/mux v1.8.0 // indirect
github.com/gorilla/websocket v1.4.2
github.com/jinzhu/copier v0.3.2
github.com/json-iterator/go v1.1.11 // indirect
github.com/klauspost/compress v1.13.6 // indirect
github.com/leodido/go-urn v1.2.1 // indirect
github.com/lucas-clemente/quic-go v0.25.0
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-isatty v0.0.13 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mattn/go-sqlite3 v1.14.11 // indirect
github.com/mholt/archiver/v3 v3.5.1
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.2 // indirect
github.com/opencontainers/selinux v1.8.5 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/pkg/errors v0.9.1
github.com/prestonTao/upnp v0.0.0-20150206124352-f4370df5e109
github.com/prometheus/procfs v0.7.3 // indirect
github.com/robfig/cron v1.2.0
github.com/satori/go.uuid v1.2.0
github.com/shirou/gopsutil/v3 v3.21.5
github.com/sirupsen/logrus v1.8.1
github.com/smartystreets/assertions v1.2.0 // indirect
github.com/smartystreets/goconvey v1.6.4 // indirect
github.com/swaggo/gin-swagger v1.3.0
github.com/swaggo/swag v1.7.0
github.com/tidwall/gjson v1.8.0
github.com/swaggo/swag v1.7.3
github.com/tidwall/gjson v1.10.2
github.com/tklauser/go-sysconf v0.3.6 // indirect
github.com/ugorji/go v1.2.6 // indirect
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e
golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6 // indirect
golang.org/x/tools v0.1.3 // indirect
google.golang.org/grpc v1.39.0 // indirect
go.opencensus.io v0.23.0 // indirect
go.uber.org/zap v1.10.0
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
golang.org/x/mod v0.5.0 // indirect
golang.org/x/net v0.0.0-20211020060615-d418f374d309 // indirect
golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f
golang.org/x/sys v0.0.0-20211020174200-9d6173849985 // indirect
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
golang.org/x/tools v0.1.7 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0 // indirect
google.golang.org/grpc v1.41.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
gopkg.in/ini.v1 v1.62.0 // indirect
gorm.io/driver/mysql v1.1.1 // indirect
gorm.io/driver/sqlite v1.1.5
gorm.io/gorm v1.21.15
src.techknowlogick.com/xgo v1.4.1-0.20210909190026-ce016894db20 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
gorm.io/driver/sqlite v1.2.6
gorm.io/gorm v1.22.5
)

450
go.sum

File diff suppressed because it is too large Load Diff

131
main.go
View File

@@ -3,59 +3,140 @@ package main
import (
"flag"
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"time"
"github.com/IceWhaleTech/CasaOS/model/notify"
"github.com/IceWhaleTech/CasaOS/pkg/cache"
"github.com/IceWhaleTech/CasaOS/pkg/config"
"github.com/IceWhaleTech/CasaOS/pkg/sqlite"
"github.com/IceWhaleTech/CasaOS/pkg/utils/encryption"
"github.com/IceWhaleTech/CasaOS/pkg/utils/loger"
"github.com/IceWhaleTech/CasaOS/pkg/utils/random"
"github.com/IceWhaleTech/CasaOS/route"
"github.com/IceWhaleTech/CasaOS/service"
"github.com/robfig/cron"
"gorm.io/gorm"
"net/http"
"oasis/pkg/config"
"oasis/pkg/sqlite"
loger2 "oasis/pkg/utils/loger"
"oasis/route"
"oasis/service"
"time"
)
var sqliteDB *gorm.DB
var swagHandler gin.HandlerFunc
var configFlag = flag.String("c", "", "config address")
var dbFlag = flag.String("db", "", "db path")
var showUserInfo = flag.Bool("show-user-info", false, "show user info")
var resetUser = flag.Bool("ru", false, "reset user")
var user = flag.String("user", "", "user name")
func init() {
flag.Parse()
config.InitSetup(*configFlag)
loger2.LogSetup()
sqliteDB = sqlite.GetDb(config.AppInfo.ProjectPath)
config.UpdateSetup()
loger.LogInit()
if len(*dbFlag) == 0 {
*dbFlag = config.AppInfo.DBPath + "/db"
}
sqliteDB = sqlite.GetDb(*dbFlag)
//gredis.GetRedisConn(config.RedisInfo),
service.MyService = service.NewService(sqliteDB, loger2.NewOLoger())
service.MyService = service.NewService(sqliteDB)
service.Cache = cache.Init()
service.GetToken()
service.UDPAddressMap = make(map[string]string)
//go service.SocketConnect()
service.CancelList = make(map[string]string)
service.InternalInspection = make(map[string][]string)
service.NewVersionApp = make(map[string]string)
route.InitFunction()
// go service.LoopFriend()
// go service.MyService.App().CheckNewImage()
}
// @title Oasis API
// @title casaOS API
// @version 1.0.0
// @contact.name lauren.pan
// @contact.url https://www.zimaboard.com
// @contact.email lauren.pan@icewhale.org
// @description Oasis v1版本api
// @host 192.168.2.114:8089
// @description casaOS v1版本api
// @host 192.168.2.217:8089
// @securityDefinitions.apikey ApiKeyAuth
// @in header
// @name Authorization
// @BasePath /v1
func main() {
service.NotifyMsg = make(chan notify.Message, 10)
if *showUserInfo {
fmt.Println("CasaOS User Info")
fmt.Println("UserName:" + config.UserInfo.UserName)
fmt.Println("Password:" + config.UserInfo.PWD)
return
}
fmt.Println("Reset User", *resetUser)
if *resetUser {
if user == nil || len(*user) == 0 {
fmt.Println("user is empty")
return
}
userData := service.MyService.User().GetUserAllInfoByName(*user)
if userData.Id == 0 {
fmt.Println("user not exist")
return
}
password := random.RandomString(6, false)
userData.Password = encryption.GetMD5ByStr(password)
service.MyService.User().UpdateUserPassword(userData)
fmt.Println("User reset successful")
fmt.Println("UserName:" + userData.UserName)
fmt.Println("Password:" + password)
return
}
go func() {
service.UDPService()
service.SendIPToServer()
}()
go route.SocketInit(service.NotifyMsg)
go func() {
for i := 0; i < 1000; i++ {
time.Sleep(2 * time.Second)
//service.NotifyMsg <- strconv.Itoa(i)
}
}()
//model.Setup()
//gredis.Setup()
r := route.InitRouter(swagHandler)
service.SyncTask(sqliteDB)
cron2 := cron.New() //创建一个cron实例
//执行定时任务每5秒执行一次
err := cron2.AddFunc("0 0 0 1/1 * *", func() {
r := route.InitRouter()
//service.SyncTask(sqliteDB)
cron2 := cron.New()
//every day execution
err := cron2.AddFunc("0 0/5 * * * *", func() {
//service.PushIpInfo(*&config.ServerInfo.Token)
//service.UpdataDDNSList(mysqldb)
service.SyncTask(sqliteDB)
//service.SyncTask(sqliteDB)
service.SendIPToServer()
service.LoopFriend()
//service.MyService.App().CheckNewImage()
})
if err != nil {
fmt.Println(err)
}
err = cron2.AddFunc("0/5 * * * * *", func() {
if service.ClientCount > 0 {
//route.SendNetINfoBySocket()
//route.SendCPUBySocket()
//route.SendMemBySocket()
// route.SendDiskBySocket()
//route.SendUSBBySocket()
route.SendAllHardwareStatusBySocket()
}
})
if err != nil {
fmt.Println(err)
}
//启动/关闭
cron2.Start()
defer cron2.Stop()
s := &http.Server{
@@ -65,6 +146,10 @@ func main() {
WriteTimeout: 60 * time.Second,
MaxHeaderBytes: 1 << 20,
}
s.ListenAndServe()
// if err := r.Run(fmt.Sprintf(":%v", config.ServerInfo.HttpPort)); err != nil {
// fmt.Println("failed run app: ", err)
// }
}

View File

@@ -1,28 +1,37 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2021-10-08 10:29:08
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-21 15:10:03
* @FilePath: /CasaOS/middleware/gin.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package middleware
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"github.com/IceWhaleTech/CasaOS/pkg/utils/loger"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
)
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
//origin := c.Request.Header.Get("Origin") //请求头部
//if origin != "" {
//接收客户端发送的origin (重要!)
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Header("Access-Control-Allow-Origin", "*")
//服务器支持的所有跨域请求的方法
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE")
//允许跨域设置可以返回其他子段,可以自定义字段
c.Header("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session")
c.Header("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session,Language")
// 允许浏览器(客户端)可以解析的头部 (重要)
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers")
//c.Writer.Header().Set("Access-Control-Allow-Headers", "Accept, Authorization, Content-Type, Content-Length, X-CSRF-Token, Token, session, Origin, Host, Connection, Accept-Encoding, Accept-Language, X-Requested-With")
//设置缓存时间
c.Header("Access-Control-Max-Age", "172800")
//允许客户端传递校验信息比如 cookie (重要)
c.Header("Access-Control-Allow-Credentials", "true")
c.Set("content-type", "application/json")
//}
@@ -41,3 +50,9 @@ func Cors() gin.HandlerFunc {
c.Next()
}
}
func WriteLog() gin.HandlerFunc {
return func(c *gin.Context) {
loger.Info("request:", zap.Any("path", c.Request.URL.String()), zap.Any("param", c.Params), zap.Any("query", c.Request.URL.Query()), zap.Any("body", c.Request.Body), zap.Any("method", c.Request.Method))
c.Next()
}
}

27
model/app-analyse.go Normal file
View File

@@ -0,0 +1,27 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-03-18 11:40:55
* @LastEditors: LinkLeong
* @LastEditTime: 2022-05-13 14:48:01
* @FilePath: /CasaOS/model/app-analyse.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package model
type AppAnalyse struct {
Name string `json:"name"`
Type string `json:"type"`
UUId string `json:"uuid"`
Language string `json:"language"`
Version string `json:"version"`
}
type ConnectionStatus struct {
From string `json:"from"`
To string `json:"to"`
Error string `json:"error"`
UUId string `json:"uuid"`
Event string `json:"event"`
}

View File

@@ -6,33 +6,52 @@ import (
"time"
)
type ServerAppListCollection struct {
List []ServerAppList `json:"list"`
Recommend []ServerAppList `json:"recommend"`
Community []ServerAppList `json:"community"`
Version string `json:"version"`
}
type ServerAppList struct {
Id uint `gorm:"column:id;primary_key" json:"id"`
Title string `json:"title"`
Description string `json:"description"`
Tagline string `json:"tagline"`
Tags Strings `gorm:"type:json" json:"tags"`
Icon string `json:"icon"`
ScreenshotLink Strings `gorm:"type:json" json:"screenshot_link"`
Category string `json:"category"`
TcpPort uint `json:"tcp_port"`
PortMap uint `json:"port_map"`
ImageVersion string `json:"image_version"`
Tip string `json:"tip"`
Configures configures `gorm:"type:json" json:"configures"`
NetworkModel string `json:"network_mode"`
Image string `json:"image"`
Index string `json:"index"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
State string `json:"state"`
Author string `json:"author"`
MinMemory int `json:"min_memory"`
MinDisk int `json:"min_disk"`
MaxMemory uint64 `json:"max_memory"`
Thumbnail string `json:"thumbnail"`
Healthy string `json:"healthy"`
Plugins Strings `json:"plugins"`
Id uint `gorm:"column:id;primary_key" json:"id"`
Title string `json:"title"`
Description string `json:"description"`
Tagline string `json:"tagline"`
Tags Strings `gorm:"type:json" json:"tags"`
Icon string `json:"icon"`
ScreenshotLink Strings `gorm:"type:json" json:"screenshot_link"`
Category string `json:"category"`
CategoryId int `json:"category_id"`
CategoryFont string `json:"category_font"`
PortMap string `json:"port_map"`
ImageVersion string `json:"image_version"`
Tip string `json:"tip"`
Envs EnvArray `json:"envs"`
Ports PortArray `json:"ports"`
Volumes PathArray `json:"volumes"`
Devices PathArray `json:"devices"`
NetworkModel string `json:"network_model"`
Image string `json:"image"`
Index string `json:"index"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
State string `json:"state"`
Author string `json:"author"`
MinMemory int `json:"min_memory"`
MinDisk int `json:"min_disk"`
MaxMemory uint64 `json:"max_memory"`
Thumbnail string `json:"thumbnail"`
Healthy string `json:"healthy"`
Plugins Strings `json:"plugins"`
Origin string `json:"origin"`
Type int `json:"type"`
QueryCount int `json:"query_count"`
Developer string `json:"developer"`
HostName string `json:"host_name"`
Privileged bool `json:"privileged"`
CapAdd Strings `json:"cap_add"`
Cmd Strings `json:"cmd"`
}
type Ports struct {

View File

@@ -1,10 +1,24 @@
/*
* @Author: link a624669980@163.com
* @Date: 2022-05-16 17:37:08
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-22 17:45:53
* @FilePath: /CasaOS/model/category.go
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
package model
type ServerCategoryList struct {
Version string `json:"version"`
Item []CategoryList `json:"item"`
}
type CategoryList struct {
Id uint `gorm:"column:id;primary_key" json:"id"`
//CreatedAt time.Time `json:"created_at"`
//
//UpdatedAt time.Time `json:"updated_at"`
Font string `json:"font"`
Name string `json:"name"`
Count uint `json:"count"`
}

View File

@@ -20,12 +20,57 @@ type LSBLKModel struct {
Format string `json:"format"`
Health string `json:"health"`
HotPlug bool `json:"hotplug"`
UUID string `json:"uuid"`
FSUsed string `json:"fsused"`
Temperature int `json:"temperature"`
Tran string `json:"tran"`
MinIO uint64 `json:"min-io"`
UsedPercent float64 `json:"used_percent"`
Serial string `json:"serial"`
Children []LSBLKModel `json:"children"`
SubSystems string `json:"subsystems"`
//详情特有
StartSector uint64 `json:"start_sector,omitempty"`
Rota bool `json:"rota"` //true(hhd) false(ssd)
DiskType string `json:"disk_type"`
EndSector uint64 `json:"end_sector,omitempty"`
}
type Drive struct {
Name string `json:"name"`
Size uint64 `json:"size"`
Model string `json:"model"`
Health string `json:"health"`
Temperature int `json:"temperature"`
DiskType string `json:"disk_type"`
NeedFormat bool `json:"need_format"`
Serial string `json:"serial"`
Path string `json:"path"`
}
type DriveUSB struct {
Name string `json:"name"`
Size uint64 `json:"size"`
Used uint64 `json:"use"`
Model string `json:"model"`
Mount bool `json:"mount"` //是否完全挂载
Avail uint64 `json:"avail"` //可用空间
}
type Storage struct {
Name string `json:"name"`
MountPoint string `json:"mountpoint"`
Size string `json:"size"`
Avail string `json:"avail"` //可用空间
Type string `json:"type"`
CreatedAt int64 `json:"create_at"`
Path string `json:"path"`
DriveName string `json:"drive_name"`
}
type Summary struct {
Size uint64 `json:"size"`
Avail uint64 `json:"avail"` //可用空间
Health bool `json:"health"`
Used uint64 `json:"used"`
}

18
model/docker.go Normal file
View File

@@ -0,0 +1,18 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2021-12-08 18:10:25
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-14 17:20:36
* @FilePath: /CasaOS/model/docker.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package model
type DockerStatsModel struct {
Icon string `json:"icon"`
Title string `json:"title"`
Data interface{} `json:"data"`
Pre interface{} `json:"pre"`
}

33
model/file.go Normal file
View File

@@ -0,0 +1,33 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-05-20 16:27:12
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-09 18:18:46
* @FilePath: /CasaOS/model/file.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package model
type FileOperate struct {
Type string `json:"type" binding:"required"`
Item []FileItem `json:"item" binding:"required"`
TotalSize int64 `json:"total_size"`
ProcessedSize int64 `json:"processed_size"`
To string `json:"to" binding:"required"`
Style string `json:"style"`
Finished bool `json:"finished"`
}
type FileItem struct {
From string `json:"from" binding:"required"`
Finished bool `json:"finished"`
Size int64 `json:"size"`
ProcessedSize int64 `json:"processed_size"`
}
type FileUpdate struct {
FilePath string `json:"path" binding:"required"`
FileContent string `json:"content" binding:"required"`
}

6
model/heart.go Normal file
View File

@@ -0,0 +1,6 @@
package model
type CasaOSHeart struct {
UuId string `json:"uuid"`
Type string `json:"type"`
}

View File

@@ -17,20 +17,22 @@ type UdpPorts struct {
/*******************使用gorm支持json************************************/
type PortMap struct {
ContainerPort string `json:"container,omitempty"`
CommendPort string `json:"host,omitempty"`
ContainerPort string `json:"container"`
CommendPort string `json:"host"`
Protocol string `json:"protocol"`
Desc string `json:"desc"`
Type int `json:"type"`
}
type PortArrey []PortMap
type PortArray []PortMap
// Value 实现方法
func (p PortArrey) Value() (driver.Value, error) {
func (p PortArray) Value() (driver.Value, error) {
return json.Marshal(p)
}
// Scan 实现方法
func (p *PortArrey) Scan(input interface{}) error {
func (p *PortArray) Scan(input interface{}) error {
return json.Unmarshal(input.([]byte), p)
}
@@ -41,20 +43,22 @@ func (p *PortArrey) Scan(input interface{}) error {
type Env struct {
Name string `json:"container"`
Value string `json:"host"`
Desc string `json:"desc"`
Type int `json:"type"`
}
type JSON json.RawMessage
type EnvArrey []Env
type EnvArray []Env
// Value 实现方法
func (p EnvArrey) Value() (driver.Value, error) {
func (p EnvArray) Value() (driver.Value, error) {
return json.Marshal(p)
//return .MarshalJSON()
}
// Scan 实现方法
func (p *EnvArrey) Scan(input interface{}) error {
func (p *EnvArray) Scan(input interface{}) error {
return json.Unmarshal(input.([]byte), p)
}
@@ -65,17 +69,19 @@ func (p *EnvArrey) Scan(input interface{}) error {
type PathMap struct {
ContainerPath string `json:"container"`
Path string `json:"host"`
Type int `json:"type"`
Desc string `json:"desc"`
}
type PathArrey []PathMap
type PathArray []PathMap
// Value 实现方法
func (p PathArrey) Value() (driver.Value, error) {
func (p PathArray) Value() (driver.Value, error) {
return json.Marshal(p)
}
// Scan 实现方法
func (p *PathArrey) Scan(input interface{}) error {
func (p *PathArray) Scan(input interface{}) error {
return json.Unmarshal(input.([]byte), p)
}
@@ -98,22 +104,29 @@ func (p *PathArrey) Scan(input interface{}) error {
//}
type CustomizationPostData struct {
CustomId string `json:"custom_id"`
Origin string `json:"origin"`
NetworkModel string `json:"network_model"`
Index string `json:"index"`
Icon string `json:"icon"`
Image string `json:"image"`
Envs EnvArrey `json:"envs"`
Ports PortArrey `json:"ports"`
Volumes PathArrey `json:"volumes"`
Devices PathArrey `json:"devices"`
Envs EnvArray `json:"envs"`
Ports PortArray `json:"ports"`
Volumes PathArray `json:"volumes"`
Devices PathArray `json:"devices"`
//Port string `json:"port,omitempty"`
PortMap string `json:"port_map"`
CpuShares int64 `json:"cpu_shares"`
Memory int64 `json:"memory"`
Restart string `json:"restart"`
EnableUPNP bool `json:"enable_upnp"`
Label string `json:"label"`
Description string `json:"description"`
Position bool `json:"position"`
PortMap string `json:"port_map"`
CpuShares int64 `json:"cpu_shares"`
Memory int64 `json:"memory"`
Restart string `json:"restart"`
EnableUPNP bool `json:"enable_upnp"`
Label string `json:"label"`
Description string `json:"description"`
Position bool `json:"position"`
HostName string `json:"host_name"`
Privileged bool `json:"privileged"`
CapAdd []string `json:"cap_add"`
Cmd []string `json:"cmd"`
Protocol string `json:"protocol"`
Host string `json:"host"`
}

View File

@@ -1,19 +1,17 @@
package model
import "time"
type IOCountersStat struct {
Name string `json:"name"` // interface name
BytesSent uint64 `json:"bytesSent"` // number of bytes sent
BytesRecv uint64 `json:"bytesRecv"` // number of bytes received
PacketsSent uint64 `json:"packetsSent"` // number of packets sent
PacketsRecv uint64 `json:"packetsRecv"` // number of packets received
Errin uint64 `json:"errin"` // total number of errors while receiving
Errout uint64 `json:"errout"` // total number of errors while sending
Dropin uint64 `json:"dropin"` // total number of incoming packets which were dropped
Dropout uint64 `json:"dropout"` // total number of outgoing packets which were dropped (always 0 on OSX and BSD)
Fifoin uint64 `json:"fifoin"` // total number of FIFO buffers errors while receiving
Fifoout uint64 `json:"fifoout"` // total number of FIFO buffers errors while sending
State string `json:"state"`
DateTime time.Time `json:"date_time"`
Name string `json:"name"` // interface name
BytesSent uint64 `json:"bytesSent"` // number of bytes sent
BytesRecv uint64 `json:"bytesRecv"` // number of bytes received
PacketsSent uint64 `json:"packetsSent"` // number of packets sent
PacketsRecv uint64 `json:"packetsRecv"` // number of packets received
Errin uint64 `json:"errin"` // total number of errors while receiving
Errout uint64 `json:"errout"` // total number of errors while sending
Dropin uint64 `json:"dropin"` // total number of incoming packets which were dropped
Dropout uint64 `json:"dropout"` // total number of outgoing packets which were dropped (always 0 on OSX and BSD)
Fifoin uint64 `json:"fifoin"` // total number of FIFO buffers errors while receiving
Fifoout uint64 `json:"fifoout"` // total number of FIFO buffers errors while sending
State string `json:"state"`
Time int64 `json:"time"`
}

6
model/notify.go Normal file
View File

@@ -0,0 +1,6 @@
package model
type NotifyMssage struct {
Type string `json:"type"`
Data string `json:"data"`
}

View File

@@ -0,0 +1,21 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-05-27 15:01:58
* @LastEditors: LinkLeong
* @LastEditTime: 2022-05-31 14:51:21
* @FilePath: /CasaOS/model/notify/application.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package notify
type Application struct {
Name string `json:"name"`
State string `json:"state"`
Type string `json:"type"`
Icon string `json:"icon"`
Message string `json:"message"`
Finished bool `json:"finished"`
Success bool `json:"success"`
}

22
model/notify/file.go Normal file
View File

@@ -0,0 +1,22 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-05-26 14:21:57
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-02 11:14:15
* @FilePath: /CasaOS/model/notify/file.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package notify
type File struct {
Finished bool `json:"finished"`
ProcessedSize int64 `json:"processed_size"`
ProcessingPath string `json:"processing_path"`
Status string `json:"status"`
TotalSize int64 `json:"total_size"`
Id string `json:"id"`
To string `json:"to"`
Type string `json:"type"`
}

20
model/notify/message.go Normal file
View File

@@ -0,0 +1,20 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-05-26 14:39:22
* @LastEditors: LinkLeong
* @LastEditTime: 2022-05-26 19:08:52
* @FilePath: /CasaOS/model/notify/message.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package notify
import (
f "github.com/ambelovsky/gosf"
)
type Message struct {
Path string `json:"path"`
Msg f.Message `json:"msg"`
}

16
model/notify/person.go Normal file
View File

@@ -0,0 +1,16 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-05-27 18:42:42
* @LastEditors: LinkLeong
* @LastEditTime: 2022-05-27 18:43:08
* @FilePath: /CasaOS/model/notify/person.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package notify
type Person struct {
ShareId string `json:"share_id"`
Type string `json:"type"`
}

18
model/notify/result.go Normal file
View File

@@ -0,0 +1,18 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-05-26 14:21:11
* @LastEditors: LinkLeong
* @LastEditTime: 2022-05-27 11:15:59
* @FilePath: /CasaOS/model/notify/result.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package notify
// Notify struct for Notify
type NotifyModel struct {
Data interface{} `json:"data"`
State string `json:"state"`
}

54
model/person.go Normal file
View File

@@ -0,0 +1,54 @@
package model
import "time"
type PersionModel struct {
Token string `json:"token"`
Ips []string `json:"ips"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
//记录链接状态
type ConnectState struct {
From string `json:"from"`
To string `json:"to"`
Type string `json:"type"` //current state 1:ready 2:ok
CreatedAt time.Time `json:"created_at"`
UUId string `json:"uuid"` //对接标识
}
type MessageModel struct {
Type string `json:"type"`
Data interface{} `json:"data"`
UUId string `json:"uuid"`
From string `json:"from"`
To string `json:"to"`
}
type TranFileModel struct {
Hash string `json:"hash"` //Verify current fragment integrity
Length int `json:"length"`
Index int `json:"index"`
}
//需要获取文件详情
type FileDetailModel struct {
Path string `json:"path"`
}
//返回文件详情
type FileSummaryModel struct {
Hash string `json:"hash"` //Verify file
Name string `json:"name"`
BlockSize int `json:"block_size"`
Length int `json:"length"`
Size int64 `json:"size"`
Message string `json:"message"`
}
type FriendsModel struct {
Id uint `gorm:"column:id;primary_key" json:"id"`
NickName string `json:"nick_name"`
Desc string `json:"desc"`
ShareId string `json:"share_id"`
}

1
model/receive/app.go Normal file
View File

@@ -0,0 +1 @@
package receive

7
model/search.go Normal file
View File

@@ -0,0 +1,7 @@
package model
type SearchFileInfo struct {
Path string `json:"path"`
Name string `json:"name"`
Type int `json:"type"`
}

69
model/smartctl_model.go Normal file
View File

@@ -0,0 +1,69 @@
package model
//
type SmartctlA struct {
Smartctl struct {
Version []int `json:"version"`
SvnRevision string `json:"svn_revision"`
PlatformInfo string `json:"platform_info"`
BuildInfo string `json:"build_info"`
Argv []string `json:"argv"`
ExitStatus int `json:"exit_status"`
} `json:"smartctl"`
Device struct {
Name string `json:"name"`
InfoName string `json:"info_name"`
Type string `json:"type"`
Protocol string `json:"protocol"`
} `json:"device"`
ModelName string `json:"model_name"`
SerialNumber string `json:"serial_number"`
FirmwareVersion string `json:"firmware_version"`
UserCapacity struct {
Blocks int `json:"blocks"`
Bytes int64 `json:"bytes"`
} `json:"user_capacity"`
SmartStatus struct {
Passed bool `json:"passed"`
} `json:"smart_status"`
AtaSmartData struct {
OfflineDataCollection struct {
Status struct {
Value int `json:"value"`
String string `json:"string"`
} `json:"status"`
CompletionSeconds int `json:"completion_seconds"`
} `json:"offline_data_collection"`
SelfTest struct {
Status struct {
Value int `json:"value"`
String string `json:"string"`
Passed bool `json:"passed"`
} `json:"status"`
PollingMinutes struct {
Short int `json:"short"`
Extended int `json:"extended"`
Conveyance int `json:"conveyance"`
} `json:"polling_minutes"`
} `json:"self_test"`
Capabilities struct {
Values []int `json:"values"`
ExecOfflineImmediateSupported bool `json:"exec_offline_immediate_supported"`
OfflineIsAbortedUponNewCmd bool `json:"offline_is_aborted_upon_new_cmd"`
OfflineSurfaceScanSupported bool `json:"offline_surface_scan_supported"`
SelfTestsSupported bool `json:"self_tests_supported"`
ConveyanceSelfTestSupported bool `json:"conveyance_self_test_supported"`
SelectiveSelfTestSupported bool `json:"selective_self_test_supported"`
AttributeAutosaveEnabled bool `json:"attribute_autosave_enabled"`
ErrorLoggingSupported bool `json:"error_logging_supported"`
GpLoggingSupported bool `json:"gp_logging_supported"`
} `json:"capabilities"`
} `json:"ata_smart_data"`
PowerOnTime struct {
Hours int `json:"hours"`
} `json:"power_on_time"`
PowerCycleCount int `json:"power_cycle_count"`
Temperature struct {
Current int `json:"current"`
} `json:"temperature"`
}

View File

@@ -1,3 +1,13 @@
/*
* @Author: LinkLeong link@icewhale.com
* @Date: 2022-05-13 18:15:46
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-16 17:50:56
* @FilePath: /CasaOS/model/sys_common.go
* @Description:
* @Website: https://www.casaos.io
* Copyright (c) 2022 by icewhale, All Rights Reserved.
*/
package model
import "time"
@@ -15,25 +25,38 @@ type UserModel struct {
Head string
Email string
Description string
Initialized bool
Avatar string
NickName string
Public string
}
//服务配置
type ServerModel struct {
HttpPort string
RunMode string
ServerApi string
HttpPort string
RunMode string
ServerApi string
LockAccount bool
Handshake string
Token string
UDPPort string
USBAutoMount string
SocketPort string
}
//服务配置
type APPModel struct {
LogSavePath string
LogPath string
LogSaveName string
LogFileExt string
DateStrFormat string
DateTimeFormat string
UserDataPath string
TimeFormat string
DateFormat string
ProjectPath string
DBPath string
ShellPath string
TempPath string
}
//公共返回模型
@@ -43,13 +66,6 @@ type Result struct {
Data interface{} `json:"data" example:"返回结果"`
}
//zeritier相关
type ZeroTierModel struct {
UserName string
PWD string
Token string
}
//redis配置文件
type RedisModel struct {
Host string
@@ -60,11 +76,19 @@ type RedisModel struct {
}
type SystemConfig struct {
SearchSwitch bool `json:"search_switch"` //搜索开关
SearchEngine string `json:"search_engine"` //搜索引擎
ShortcutsSwitch bool `json:"shortcuts_switch"`
WidgetsSwitch bool `json:"widgets_switch"`
BackgroundType string `json:"background_type"`
Background string `json:"background"`
AutoUpdate bool `json:"auto_update"`
ConfigStr string `json:"config_str"`
WidgetList string `json:"widget_list"`
ConfigPath string `json:"config_path"`
SyncPort string `json:"sync_port"`
SyncKey string `json:"sync_key"`
Analyse string `json:"analyse"`
}
type CasaOSGlobalVariables struct {
AppChange bool
}
type FileSetting struct {
ShareDir []string `json:"share_dir" delim:"|"`
DownloadDir string `json:"download_dir"`
}

View File

@@ -1,3 +0,0 @@
package model

8
model/system_app/sync.go Normal file
View File

@@ -0,0 +1,8 @@
package system_app
import "encoding/xml"
type SyncConfig struct {
XMLName xml.Name `xml:"configuration"`
Key string `xml:"gui>apikey"`
}

Some files were not shown because too many files have changed in this diff Show More