Ver Fonte

V2.021 (#175)

* Update v2.021

- Updated Lax mode cookies
- Updated diskmg implementation for new Linux utilities
- Fixed CPU usage over 100% bug
- CSS optimization for login page

* Create LICENSE.txt
Toby Chui há 6 meses atrás
pai
commit
f9f4ec7a98

+ 12 - 9
src/go.mod

@@ -9,7 +9,6 @@ require (
 	github.com/fclairamb/ftpserverlib v0.22.0
 	github.com/fogleman/fauxgl v0.0.0-20200818143847-27cddc103802
 	github.com/gabriel-vasile/mimetype v1.4.3
-	github.com/go-git/go-billy/v5 v5.5.0
 	github.com/go-git/go-git/v5 v5.11.0
 	github.com/go-ldap/ldap v3.0.3+incompatible
 	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
@@ -26,13 +25,13 @@ require (
 	github.com/pkg/sftp v1.13.6
 	github.com/robertkrimen/otto v0.3.0
 	github.com/satori/go.uuid v1.2.0
-	github.com/smallfz/libnfs-go v0.0.5
 	github.com/spf13/afero v1.11.0
 	github.com/studio-b12/gowebdav v0.9.0
+	github.com/willscott/go-nfs v0.0.0-20230313234243-d94d22138e1e
 	gitlab.com/NebulousLabs/go-upnp v0.0.0-20211002182029-11da932010b6
-	golang.org/x/crypto v0.23.0
+	golang.org/x/crypto v0.21.0
 	golang.org/x/oauth2 v0.15.0
-	golang.org/x/sync v0.7.0
+	golang.org/x/sync v0.6.0
 )
 
 require (
@@ -51,6 +50,7 @@ require (
 	github.com/fogleman/simplify v0.0.0-20170216171241-d32f302d5046 // indirect
 	github.com/geoffgarside/ber v1.1.0 // indirect
 	github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
+	github.com/go-git/go-billy/v5 v5.5.0 // indirect
 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 	github.com/golang/protobuf v1.5.3 // indirect
 	github.com/golang/snappy v0.0.4 // indirect
@@ -69,19 +69,22 @@ require (
 	github.com/nwaples/rardecode v1.1.3 // indirect
 	github.com/pierrec/lz4/v4 v4.1.19 // indirect
 	github.com/pjbgf/sha1cd v0.3.0 // indirect
+	github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93 // indirect
 	github.com/rs/zerolog v1.32.0 // indirect
 	github.com/sergi/go-diff v1.3.1 // indirect
 	github.com/skeema/knownhosts v1.2.1 // indirect
+	github.com/smallfz/libnfs-go v0.0.5 // indirect
 	github.com/ulikunitz/xz v0.5.11 // indirect
+	github.com/willscott/go-nfs-client v0.0.0-20200605172546-271fa9065b33 // indirect
 	github.com/xanzy/ssh-agent v0.3.3 // indirect
 	github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
 	gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40 // indirect
-	golang.org/x/image v0.18.0 // indirect
-	golang.org/x/mod v0.17.0 // indirect
-	golang.org/x/net v0.25.0 // indirect
+	golang.org/x/image v0.15.0 // indirect
+	golang.org/x/mod v0.14.0 // indirect
+	golang.org/x/net v0.23.0 // indirect
 	golang.org/x/sys v0.20.0 // indirect
-	golang.org/x/text v0.16.0 // indirect
-	golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
+	golang.org/x/text v0.14.0 // indirect
+	golang.org/x/tools v0.16.1 // indirect
 	google.golang.org/appengine v1.6.8 // indirect
 	google.golang.org/protobuf v1.33.0 // indirect
 	gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect

+ 26 - 15
src/go.sum

@@ -78,6 +78,7 @@ github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
+github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
 github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g=
 github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k=
 github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA=
@@ -93,6 +94,7 @@ github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY
 github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
 github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
 github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
+github.com/hashicorp/golang-lru/v2 v2.0.2 h1:Dwmkdr5Nc/oBiXgJS3CDHNhJtIHkuZ3DZF5twqnfBdU=
 github.com/hirochachacha/go-smb2 v1.1.0 h1:b6hs9qKIql9eVXAiN0M2wSFY5xnhbHAQoCwRKbaRTZI=
 github.com/hirochachacha/go-smb2 v1.1.0/go.mod h1:8F1A4d5EZzrGu5R7PU163UcMRDJQl4FtcxjBfsY8TZE=
 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
@@ -150,6 +152,8 @@ github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo=
 github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93 h1:UVArwN/wkKjMVhh2EQGC0tEc1+FqiLlvYXY5mQ2f8Wg=
+github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93/go.mod h1:Nfe4efndBz4TibWycNE+lqyJZiMX4ycx+QKV8Ta0f/o=
 github.com/robertkrimen/otto v0.3.0 h1:5RI+8860NSxvXywDY9ddF5HcPw0puRsd8EgbXV0oqRE=
 github.com/robertkrimen/otto v0.3.0/go.mod h1:uW9yN1CYflmUQYvAMS0m+ZiNo3dMzRUDQJX0jWbzgxw=
 github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
@@ -183,12 +187,17 @@ github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oW
 github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
 github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
 github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
+github.com/willscott/go-nfs v0.0.0-20230313234243-d94d22138e1e h1:2a1G+FL68xrqllzlh9TMcu0I/1j7hQj9m/9X5Kqd6Ko=
+github.com/willscott/go-nfs v0.0.0-20230313234243-d94d22138e1e/go.mod h1:AdubZNWE4Oq6Z0Ggdvg4vZYXhllCYj+utUUfs4PHYVc=
+github.com/willscott/go-nfs-client v0.0.0-20200605172546-271fa9065b33 h1:Wd8wdpRzPXskyHvZLyw7Wc1fp5oCE2mhBCj7bAiibUs=
+github.com/willscott/go-nfs-client v0.0.0-20200605172546-271fa9065b33/go.mod h1:cOUKSNty+RabZqKhm5yTJT5Vq/Fe83ZRWAJ5Kj8nRes=
 github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
 github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
 github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
 github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+github.com/zema1/go-nfs-client v0.0.0-20200604081958-0cf942f0e0fe/go.mod h1:im3CVJ32XM3+E+2RhY0sa5IVJVQehUrX0oE1wX4xOwU=
 gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40 h1:dizWJqTWjwyD8KGcMOwgrkqu1JIkofYgKkmDeNE7oAs=
 gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40/go.mod h1:rOnSnoRyxMI3fe/7KIbVcsHRGxe30OONv8dEgo+vCfA=
 gitlab.com/NebulousLabs/go-upnp v0.0.0-20211002182029-11da932010b6 h1:WKij6HF8ECp9E7K0E44dew9NrRDGiNR5u4EFsXnJUx4=
@@ -202,17 +211,17 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0
 golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
 golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
-golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
-golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
 golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=
-golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
+golang.org/x/image v0.15.0 h1:kOELfmgrmJlw4Cdb7g/QGuB3CvDrXbqEIww/pNtNBm8=
+golang.org/x/image v0.15.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE=
 golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
-golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
+golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -226,16 +235,16 @@ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
 golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
 golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
 golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
-golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
-golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
 golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ=
 golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
-golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -256,6 +265,8 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
 golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -264,7 +275,7 @@ golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
 golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
 golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
-golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
+golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -273,16 +284,16 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
-golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
+golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
+golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
 golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
-golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
+golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
+golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

+ 1 - 1
src/main.flags.go

@@ -33,7 +33,7 @@ var subserviceBasePort = 12810            //Next subservice port
 
 // =========== SYSTEM BUILD INFORMATION ==============
 var build_version = "development"                      //System build flag, this can be either {development / production / stable}
-var internal_version = "0.2.020"                       //Internal build version, [fork_id].[major_release_no].[minor_release_no]
+var internal_version = "0.2.021"                       //Internal build version, [fork_id].[major_release_no].[minor_release_no]
 var deviceUUID string                                  //The device uuid of this host
 var deviceVendor = "IMUSLAB.INC"                       //Vendor of the system
 var deviceVendorURL = "http://imuslab.com"             //Vendor contact information

+ 4 - 4
src/main.go

@@ -116,22 +116,22 @@ func main() {
 		if *use_tls {
 			if !*disable_http {
 				go func() {
-					var address = fmt.Sprintf("%s:%d", *listen_host, *listen_port)
+					address := fmt.Sprintf("%s:%d", *listen_host, *listen_port)
 					log.Println("Standard (HTTP) Web server listening at", address)
 					http.ListenAndServe(address, nil)
 				}()
 			}
-			var address = fmt.Sprintf("%s:%d", *listen_host, *tls_listen_port)
+			address := fmt.Sprintf("%s:%d", *listen_host, *tls_listen_port)
 			log.Println("Secure (HTTPS) Web server listening at", address)
 			http.ListenAndServeTLS(address, *tls_cert, *tls_key, nil)
 		} else {
-			var address = fmt.Sprintf("%s:%d", *listen_host, *listen_port)
+			address := fmt.Sprintf("%s:%d", *listen_host, *listen_port)
 			log.Println("Web server listening at", address)
 			http.ListenAndServe(address, nil)
 		}
 	}()
 
-	if *enable_console == true {
+	if *enable_console {
 		//Startup interactive shell for debug and basic controls
 		Console := console.NewConsole(consoleCommandHandler)
 		Console.ListenAndHandle()

+ 12 - 4
src/mod/auth/auth.go

@@ -306,16 +306,24 @@ func (a *AuthAgent) LoginUserByRequest(w http.ResponseWriter, r *http.Request, u
 	session.Values["username"] = username
 	session.Values["rememberMe"] = rememberme
 
+	CookieSetSameSitePolicy := http.SameSiteNoneMode
+	if r.TLS == nil {
+		//Connection is done via http
+		CookieSetSameSitePolicy = http.SameSiteLaxMode
+	}
+
 	//Check if remember me is clicked. If yes, set the maxage to 1 week.
 	if rememberme {
 		session.Options = &sessions.Options{
-			MaxAge: 3600 * 24 * 7, //One week
-			Path:   "/",
+			MaxAge:   3600 * 24 * 7, //One week
+			Path:     "/",
+			SameSite: CookieSetSameSitePolicy,
 		}
 	} else {
 		session.Options = &sessions.Options{
-			MaxAge: 3600 * 1, //One hour
-			Path:   "/",
+			MaxAge:   3600 * 1, //One hour
+			Path:     "/",
+			SameSite: CookieSetSameSitePolicy,
 		}
 	}
 	session.Save(r, w)

+ 1 - 1
src/mod/disk/diskmg/diskmg.go

@@ -51,7 +51,7 @@ type LsblkF struct {
 			Fstype     string      `json:"fstype"`
 			Label      interface{} `json:"label"`
 			UUID       string      `json:"uuid"`
-			Fsavail    string      `json:"fsavail"`
+			Fsavail    int64       `json:"fsavail"`
 			Fsuse      string      `json:"fsuse%"`
 			Mountpoint string      `json:"mountpoint"`
 		} `json:"children"`

+ 97 - 0
src/mod/info/usageinfo/cpu.go

@@ -0,0 +1,97 @@
+package usageinfo
+
+import (
+	"fmt"
+	"io/ioutil"
+	"strconv"
+	"strings"
+	"time"
+)
+
+type CPUStats struct {
+	user    uint64
+	nice    uint64
+	system  uint64
+	idle    uint64
+	iowait  uint64
+	irq     uint64
+	softirq uint64
+}
+
+// getCPUStats reads and parses the CPU stats from /proc/stat
+func getCPUStats() (CPUStats, error) {
+	data, err := ioutil.ReadFile("/proc/stat")
+	if err != nil {
+		return CPUStats{}, err
+	}
+
+	lines := strings.Split(string(data), "\n")
+	for _, line := range lines {
+		if strings.HasPrefix(line, "cpu ") {
+			fields := strings.Fields(line)
+			if len(fields) < 8 {
+				return CPUStats{}, fmt.Errorf("unexpected format in /proc/stat")
+			}
+
+			// Parse the CPU fields into the CPUStats struct
+			user, _ := strconv.ParseUint(fields[1], 10, 64)
+			nice, _ := strconv.ParseUint(fields[2], 10, 64)
+			system, _ := strconv.ParseUint(fields[3], 10, 64)
+			idle, _ := strconv.ParseUint(fields[4], 10, 64)
+			iowait, _ := strconv.ParseUint(fields[5], 10, 64)
+			irq, _ := strconv.ParseUint(fields[6], 10, 64)
+			softirq, _ := strconv.ParseUint(fields[7], 10, 64)
+
+			return CPUStats{
+				user:    user,
+				nice:    nice,
+				system:  system,
+				idle:    idle,
+				iowait:  iowait,
+				irq:     irq,
+				softirq: softirq,
+			}, nil
+		}
+	}
+
+	return CPUStats{}, fmt.Errorf("could not find CPU stats")
+}
+
+// calculateCPUUsage calculates the percentage of CPU usage
+func calculateCPUUsage(prev, current CPUStats) float64 {
+	prevTotal := prev.user + prev.nice + prev.system + prev.idle + prev.iowait + prev.irq + prev.softirq
+	currentTotal := current.user + current.nice + current.system + current.idle + current.iowait + current.irq + current.softirq
+
+	totalDiff := currentTotal - prevTotal
+	idleDiff := current.idle - prev.idle
+
+	if totalDiff == 0 {
+		return 0.0
+	}
+
+	usage := (float64(totalDiff-idleDiff) / float64(totalDiff)) * 100.0
+	return usage
+}
+
+// GetCPUUsage returns the current CPU usage as a percentage
+// Note this is blocking and will sleep for 1 second
+func GetCPUUsageUsingProcStat() (float64, error) {
+	// Get initial CPU stats
+	prevStats, err := getCPUStats()
+	if err != nil {
+		return 0, err
+	}
+
+	// Sleep for 1 second to compare stats over time
+	time.Sleep(1 * time.Second)
+
+	// Get current CPU stats after 1 second
+	currentStats, err := getCPUStats()
+	if err != nil {
+		return 0, err
+	}
+
+	// Calculate and print the CPU usage
+	cpuUsage := calculateCPUUsage(prevStats, currentStats)
+	return cpuUsage, nil
+}

+ 31 - 5
src/mod/info/usageinfo/usageinfo.go

@@ -22,7 +22,7 @@ const query_freemem_command_darwin = "ps -A -o %mem | awk '{mem += $1} END {prin
 const query_phymem_command = "sysctl hw.physmem | awk '{print $NF}'"
 const query_phymem_command_darwin = "sysctl hw.memsize | awk '{print $NF}'"
 
-//Get CPU Usage in percentage
+// Get CPU Usage in percentage
 func GetCPUUsage() float64 {
 	usage := float64(0)
 	if runtime.GOOS == "windows" {
@@ -38,6 +38,27 @@ func GetCPUUsage() float64 {
 		}
 		usage = s
 	} else if runtime.GOOS == "linux" || runtime.GOOS == "freebsd" || runtime.GOOS == "darwin" {
+		/*
+			Updated shortcut method
+
+			This method uses the /proc/stat file to get the CPU usage
+			which is more accurate than the previous method
+
+			If the new method got an error, it will fallback to the old method
+		*/
+
+		currentCPUUsage, err := GetCPUUsageUsingProcStat()
+		if err == nil {
+			return currentCPUUsage
+		}
+
+		/*
+			Old Method
+
+			This method uses the top command to get the CPU usage
+			which has higher compatibility but less accurate
+		*/
+
 		//Get CPU first 10 processes uses most CPU resources
 		cmd := exec.Command("bash", "-c", query_cpuproc_command)
 		out, err := cmd.CombinedOutput()
@@ -47,7 +68,7 @@ func GetCPUUsage() float64 {
 		usageCounter := float64(0)
 		usageInfo := strings.Split(string(out), "\n")
 		for _, info := range usageInfo {
-			if strings.Contains(info, "%CPU") == false {
+			if !strings.Contains(info, "%CPU") {
 				dataChunk := strings.Split(strings.TrimSpace(info), " ")
 				if len(dataChunk) > 0 {
 					s, err := strconv.ParseFloat(dataChunk[0], 64)
@@ -70,9 +91,10 @@ func GetCPUUsage() float64 {
 		// Get CPU core count (freebsd way)
 		if runtime.GOOS == "freebsd" {
 			cmd = exec.Command(queryNCPUCommand)
-		} else if runtime.GOOS == "darwin" {
+		} else if runtime.GOOS == "darwin" || runtime.GOOS == "linux" {
 			cmd = exec.Command("bash", "-c", queryNCPUCommand)
 		}
+
 		out, err = cmd.CombinedOutput()
 		if err != nil {
 			return usageCounter
@@ -88,6 +110,10 @@ func GetCPUUsage() float64 {
 			usage = 100
 		}
 
+		if usage < float64(0) {
+			usage = 0
+		}
+
 	} else {
 		// CPU Usage Not supported on this platform
 	}
@@ -95,7 +121,7 @@ func GetCPUUsage() float64 {
 	return usage
 }
 
-//Get RAM Usage in Numeric values
+// Get RAM Usage in Numeric values
 func GetNumericRAMUsage() (int64, int64) {
 	usedRam := int64(-1)
 	totalRam := int64(-1)
@@ -228,7 +254,7 @@ func GetNumericRAMUsage() (int64, int64) {
 	return -1, -1
 }
 
-//Get RAM usage, return used / total / used percentage
+// Get RAM usage, return used / total / used percentage
 func GetRAMUsage() (string, string, float64) {
 	usedRam := "Unknown"
 	totalRam := "Unknown"

+ 1 - 1
src/web/SystemAO/desktop/personalization.html

@@ -59,7 +59,7 @@
         </style>
     </head>
     <body>
-        <div class="ui tabular menu" style="position:fixed; top:0em; left:0px; width: 100%;">
+        <div class="ui small tabular menu" style="position:fixed; top:0em; left:0px; width: 100%;">
             <div class="active item" data-tab="wallpaper" locale="menu/wallpaper">Wallpaper</div>
             <div class="item" data-tab="sound" locale="menu/sound">Sound</div>
             <div class="item" data-tab="theme" locale="menu/theme">Theme</div>

+ 17 - 2
src/web/SystemAO/desktop/utils/diskoverview.html

@@ -108,8 +108,23 @@
                             if (thisDiskInfo.children.length > 0){
                                 //Try to extract mountpoint as name
                                 let mountpoint = thisDiskInfo.children[0].mountpoint;
-                                if (mountpoint == null || mountpoint == undefined){
-                                    mountpoint = "";
+                                if (mountpoint == null || mountpoint == undefined || mountpoint == ""){
+                                    //Not mounted via arozos. Try to get the mountpoint from other partitions
+                                    if (thisDiskInfo.children.length > 1){
+                                        //Multiple partitions, combine them into /dev/sdX(1+2+3)
+                                        mountpoint = "/dev/" + thisDiskInfo.children[0].name;
+                                        mountpoint = mountpoint.replace(/[0-9]/g, ""); //Remove the partition number
+                                        mountpoint += "[";
+                                        for (var j = 0; j < thisDiskInfo.children.length; j++){
+                                            let partitionNumber = thisDiskInfo.children[j].name.replace(/[a-zA-Z]/g, "");
+                                            mountpoint += partitionNumber + "+";
+                                        }
+                                        mountpoint = mountpoint.slice(0, -1); //Remove the last +
+                                        mountpoint += "]";
+                                    }else{
+                                        //Single partition
+                                        mountpoint = "/dev/"  + thisDiskInfo.children[0].name;
+                                    }
                                 }
 
                                 diskName = mountpoint;

+ 5 - 0
src/web/SystemAO/disk/samba.html

@@ -293,6 +293,11 @@
                             msgbox("Samba share removed");
                         }
                         initShareListTable();
+
+                        //Reload user smb as well if user is admin and have their shares removed
+                        if (typeof(initSMBActivationStatusOnThisUser) != 'undefined'){
+                            initSMBActivationStatusOnThisUser();
+                        }
                     }
                 })
             }

+ 26 - 15
src/web/SystemAO/info/taskManager.html

@@ -424,22 +424,33 @@
                 }
             })
 
-            $.get("../../system/info/getUsageInfo", function(data){
-                //Update graph
-                addAndShiftChartDate(cpuChart, "", data.CPU);
-                addAndShiftChartDate(ramChart, "", data.RamUsage);
-
-                //Update values
-                $("#cpuUsage").text(data.CPU.toFixed(1) + "%");
-                $("#ramUsedPercentage").text(data.RamUsage.toFixed(1) + "%")
-                $("#ramUsed").text(data.UsedRAM);
-                $("#ramTotal").text(data.TotalRam);
-
-                setTimeout(function(){
-                    updateData();
-                }, 1000);
+            //Get UsageInfo with timeout
+            $.ajax({
+                url: "../../system/info/getUsageInfo",
+                method: "GET",
+                success:function(data){
+                    //Update graph
+                    addAndShiftChartDate(cpuChart, "", data.CPU);
+                    addAndShiftChartDate(ramChart, "", data.RamUsage);
+
+                    //Update values
+                    $("#cpuUsage").text(data.CPU.toFixed(1) + "%");
+                    $("#ramUsedPercentage").text(data.RamUsage.toFixed(1) + "%")
+                    $("#ramUsed").text(data.UsedRAM);
+                    $("#ramTotal").text(data.TotalRam);
+
+                    setTimeout(function(){
+                        updateData();
+                    }, 100);
+                },
+                error: function(){
+                    //Error, retry in 5 seconds
+                    setTimeout(function(){
+                        updateData();
+                    }, 5000);
+                },
+                timeout: 2000
             });
-
         }
 
         function addNetData(chart, label, rx, tx) {

+ 140 - 0
src/web/SystemAO/locale/system_settings.json

@@ -23,6 +23,7 @@
                 "tab/info/Performance":"效能",
                 "tab/info/Runtime":"運行環境",
                 "tab/info/Power":"電源",
+                "tab/info/Updates":"系統更新",
 
                 "tab/module/Add & Remove Module":"新增或移除模組",
                 "tab/module/Subservices":"子服務",
@@ -79,6 +80,7 @@
                 "Connected clients and IoT devices":"客戶端及物聯網裝置",
                 "List of modules loaded in the system":"系統模組及子服務",
                 "Manage Storage Devices and Disks":"儲存池及硬碟管理",
+                "Perform ArozOS Updates":"進行 ArozOS 系統更新",
                 "Manage Host Network and Connections":"網絡與連接",
                 "Add, removed or edit users and groups":"使用者及權限群組",
                 "Cluster, Network Scanning and Task Scheduling":"集群、網絡掃描及定時執行",
@@ -158,6 +160,7 @@
                 "tab/info/Performance":"效能",
                 "tab/info/Runtime":"運行環境",
                 "tab/info/Power":"電源",
+                "tab/info/Updates":"系統更新",
 
                 "tab/module/Add & Remove Module":"新增或移除模組",
                 "tab/module/Subservices":"子服務",
@@ -214,6 +217,7 @@
                 "Connected clients and IoT devices":"客戶端及物聯網裝置",
                 "List of modules loaded in the system":"系統模組及子服務",
                 "Manage Storage Devices and Disks":"儲存池及硬碟管理",
+                "Perform ArozOS Updates":"進行 ArozOS 系統更新",
                 "Manage Host Network and Connections":"網絡與連接",
                 "Add, removed or edit users and groups":"使用者及權限群組",
                 "Cluster, Network Scanning and Task Scheduling":"集群、網絡掃描及定時執行",
@@ -292,6 +296,7 @@
                 "tab/info/Performance":"性能",
                 "tab/info/Runtime":"运行环境",
                 "tab/info/Power":"电源",
+                "tab/info/Updates":"系統更新",
 
                 "tab/module/Add & Remove Module":"新增或移除模块",
                 "tab/module/Subservices":"子服务",
@@ -348,6 +353,7 @@
                 "Connected clients and IoT devices":"客户端与物联网设备",
                 "List of modules loaded in the system":"已加载的模块",
                 "Manage Storage Devices and Disks":"管理存储设备与硬盘",
+                "Perform ArozOS Updates":"进行 ArozOS 系统更新",
                 "Manage Host Network and Connections":"管理网络与连接",
                 "Add, removed or edit users and groups":"添加或移除用户及群组",
                 "Cluster, Network Scanning and Task Scheduling":"集群、网络扫描及定时任务",
@@ -406,6 +412,140 @@
             "placeholder":{
 
             }
+        },
+        "en-US": {
+            "name": "English (US)",
+            "fontFamily": "Arial, Helvetica, sans-serif",
+            "fwtitle": "System Settings",
+            "strings": {
+                "menu/group/Host Information": "System Information",
+                "menu/group/Devices & IoT": "Devices & IoT",
+                "menu/group/Module Management": "Module Management",
+                "menu/group/Disk & Storage": "Disk & Storage",
+                "menu/group/Network & Connection": "Network & Connection",
+                "menu/group/Users & Groups": "Users & Groups",
+                "menu/group/Clusters & Scheduling": "Clusters & Scheduling",
+                "menu/group/Security & Auth": "Security & Auth",
+                "menu/group/Developer Options": "Developer Options",
+                "menu/group/About ArOZ": "About ArozOS",
+                
+                "tab/info/Overview": "Overview",
+                "tab/info/Host Info": "Host Information",
+                "tab/info/Performance": "Performance",
+                "tab/info/Runtime": "Runtime",
+                "tab/info/Power": "Power",
+                "tab/info/Updates": "Updates",
+                
+                "tab/module/Add & Remove Module": "Add or Remove Module",
+                "tab/module/Subservices": "Subservices",
+                "tab/module/Default Module": "Default Open",
+                "tab/module/Module List": "Installed Modules",
+                
+                "tab/disk/Storage Quota": "Storage Quota",
+                "tab/disk/Space Finder": "Space Finder",
+                "tab/disk/Disk Space": "Disk Space",
+                "tab/disk/Disk SMART": "SMART (Disk Health)",
+                "tab/disk/Storage Pools": "System Storage Pools",
+                
+                "tab/device/Client Device": "Client Device",
+                "tab/device/Audio Testing": "Speaker Testing",
+                "tab/device/Display Testing": "Display Testing",
+                "tab/device/Language": "Device Language",
+                "tab/device/IoT Hub": "IoT Driver",
+                
+                "tab/network/Network Info": "Network Overview",
+                "tab/network/Port Forward": "Port Forwarding",
+                "tab/network/Personal Page": "Personal Page",
+                "tab/network/WiFi Info": "WiFi Information",
+                "tab/network/WiFi Settings": "WiFi Settings",
+                "tab/network/File Servers": "File Servers",
+                
+                "tab/users/My Account": "My Account",
+                "tab/users/User List": "User Management",
+                "tab/users/Permission Groups": "Permission Groups",
+                "tab/users/Public Registry": "Public Registry",
+                
+                "tab/cluster/Tasks Scheduler": "Task Scheduler",
+                "tab/cluster/Neighbourhood": "Network Neighborhood",
+                "tab/cluster/Cluster List": "Cluster Management",
+                "tab/cluster/Cluster Toolbox": "Cluster Tools",
+                
+                "tab/security/Connection Log": "Connection Log",
+                "tab/security/Access Control": "Access Control",
+                "tab/security/OAuth": "OAuth Settings",
+                "tab/security/LDAP": "LDAP Settings",
+                
+                "tab/advance/System Log": "System Log",
+                "tab/advance/Auto Login Mode": "Auto Login Mode",
+                "tab/advance/Disk Manager": "Disk Manager",
+                
+                "tab/about/ArozOS": "About ArozOS",
+                "tab/about/Open Source": "Open Source Components",
+                "tab/about/License": "System License",
+                "tab/about/Vendor": "Vendor",
+                
+                "": ""
+            },
+            "titles": {
+                "Config and info about the Server Host": "Server Configuration and Information",
+                "Connected clients and IoT devices": "Clients and IoT Devices",
+                "List of modules loaded in the system": "System Modules and Subservices",
+                "Manage Storage Devices and Disks": "Storage Pools and Disk Management",
+                "Manage Host Network and Connections": "Network and Connection",
+                "Add, removed or edit users and groups": "Users and Permission Groups",
+                "Cluster, Network Scanning and Task Scheduling": "Cluster, Network Scanning, and Scheduling",
+                "System Security and Auth Credentials": "System Security and Authentication",
+                "Advance configs for developers": "Developer Options",
+                "Information of the current running ArOZ Online System": "About ArozOS",
+                
+                "Set the power state of the host device": "Change System Power State",
+                "Change startup paramter in runtime": "Change Runtime Startup Parameters",
+                "System CPU and RAM usage": "System CPU and Memory Usage",
+                "System Information": "System Information",
+                "Overview for user information": "System and User Overview",
+                
+                "Detail about the browser you are using": "Browser Information",
+                "Speaker and volume testing": "Speaker and Volume Testing",
+                "Display testing tools": "Display Testing Tools",
+                "Set the display language of the system": "Set the Device Language",
+                "Manage IoT Devices Scanners": "Installed IoT Device Drivers",
+                
+                "A list of module currently loaded in the system": "Installed WebApp Modules",
+                "Default module use to open a file": "Set Default Module for Opening Files",
+                "Launch and kill subservices": "Start and Stop Subservices",
+                "Install & Remove Module to the system": "Add or Remove WebApp Modules",
+                
+                "User Remaining Space": "Remaining Capacity",
+                "Reclaim Storage Space on Disks": "Find Space-Consuming Files",
+                "System Storage Space on Disks": "Disk Capacity and Available Space",
+                "HardDisk Health Checking": "Disk Health Status",
+                "Storage Pool Mounting Configuration": "Mount and Manage Storage Pools",
+                
+                "Network Information": "Network Status and Information",
+                "UPnP based port forwarding": "Set UPnP Port Forwarding",
+                "Personal Web Page": "Set Up Personal Web Page",
+                "Current Connected WiFi Information": "Current WiFi Connection Information",
+                "Setup WiFi Conenctions": "WiFi Settings",
+                "Network File Transfer Servers": "Web File Transfer Server Settings",
+                
+                "System Tasks and Excution Scheduler": "System Task Scheduling",
+                "Nearby ArOZ Host for Clustering": "Scan for Nearby ArozOS Servers",
+                
+                "Logs for login attempts": "Login Logs",
+                "Prevent / Allow certain IP ranges from logging in": "Blacklist/Whitelist Management",
+                "Allows external account access to system": "Enable or Disable Account Registration",
+                
+                "View ArozOS System Log": "View System Logs",
+                "Allow bots logging into the system automatically": "Enable Bot Auto Login",
+                "Mount, Unmount and Formatting Local Disks": "Mount, Unmount, and Format Disks",
+                
+                "About this ArozOS": "About this ArozOS",
+                "License from the Open Source Community": "Open Source Components",
+                "License of ArozOS": "ArozOS License",
+                "Vendor Notes": "Vendor Notes",
+                "": ""
+            },
+            "placeholder": {}
         }
     }
 }

+ 4 - 4
src/web/desktop.system

@@ -1457,7 +1457,7 @@
             //Login cookie expire check
             setInterval(function() {
                 checkConnection();
-            }, 15000);
+            }, 120 * 1000);
 
             //Activate all dropdowns
             $(".dropdown").dropdown();
@@ -3370,7 +3370,7 @@
                 for (var i = 0; i < currentBackgroundList.length; i++) {
                     var id = "dbg" + i;
                     var thisImage = "img/desktop/bg/" + currentUserTheme + "/" + currentBackgroundList[i];
-                    $("#bgwrapper").append('<img id="' + id + '" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA" rel="preload" draggable="false" onclick="this.focus();" style="background-image:url(\'' + thisImage + '\');" class="backgroundFrame"></img>');
+                    $("#bgwrapper").append('<img id="' + id + '" rel="preload" draggable="false" onclick="this.focus();" style="background-image:url(\'' + thisImage + '\');" class="backgroundFrame"></img>');
                 }
                 setTimeout(function() {
                     $("#dbg0").addClass("showBackground");
@@ -3400,7 +3400,7 @@
                         for (var i = 0; i < currentBackgroundList.length; i++) {
                             var id = "dbg" + i;
                             var thisImage = "media/?file=" + currentBackgroundList[i];
-                            $("#bgwrapper").append('<img id="' + id + '" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA" rel="preload" draggable="false" style="background-image:url(\'' + thisImage + '\');" class="backgroundFrame"></img>');
+                            $("#bgwrapper").append('<img id="' + id + '" rel="preload" draggable="false" style="background-image:url(\'' + thisImage + '\');" class="backgroundFrame"></img>');
                         }
                         setTimeout(function() {
                             $("#dbg0").addClass("showBackground");
@@ -7421,4 +7421,4 @@
     </script>
 </body>
 
-</html>
+</html>

+ 3 - 0
src/web/img/desktop/bg/japan2/LICENSE.txt

@@ -0,0 +1,3 @@
+www.3sdesign.io
+Contributed by Samuel 3s.
+Licensed under CC BY-NC 3.0

BIN
src/web/img/desktop/bg/japan2/R7R6619_Edit-2560x.jpg


BIN
src/web/img/desktop/bg/japan2/R7R7190_Edit-2560x.jpg


BIN
src/web/img/desktop/bg/japan2/R7R7191_Edit-2560x.jpg


BIN
src/web/img/desktop/bg/japan2/R7R7908_Edit-2560x.jpg


BIN
src/web/img/desktop/bg/japan2/R7R7999_Edit-2560x.jpg


+ 22 - 2
src/web/login.system

@@ -153,6 +153,27 @@
         user-select: none;
         cursor: not-allowed;
     }
+
+    .loginLogo{
+        margin-top: 4em;
+    }
+
+    @media (orientation: landscape) and (max-height: 765px) {
+        .rightLoginFrame{
+            width: 500px !important;
+            margin-left: auto;
+            margin-right: auto;
+            margin-top: 0;
+            height: 100%;
+            overflow-y: auto;
+            border-radius: 0;
+        }
+        
+        .loginLogo{
+            margin-top: 1.2em;
+        }
+    }
+
     </style>
     </head>
     <body>
@@ -160,8 +181,7 @@
             
         </div>
         <div id="loginInterface" class="rightLoginFrame">
-            <br><br><br>
-            <img class="ui medium image" src="data:image/png;base64, {{service_logo}}">
+            <img class="ui medium image loginLogo" src="data:image/png;base64, {{service_logo}}">
 
             <div class="ui borderless basic segment">
                 <p>Sign in to <span class="hostname">ArozOS</span> with your username and password</p>

+ 2 - 0
src/web/mobile.system

@@ -145,6 +145,8 @@
 
             #windowButtonWrapper{
                 padding-top:6px;
+                max-height: calc(100% - 4em);
+                overflow-y: auto;
             }
 
             .floatWindowButton{