diff --git a/application/controller/static.go b/application/controller/static.go
index 058442d..18232ee 100644
--- a/application/controller/static.go
+++ b/application/controller/static.go
@@ -15,6 +15,9 @@
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
+//go:generate go run ./static_page_generater ../../.tmp/dist ./static_pages.go
+//go:generate go fmt ./static_pages.go
+
package controller
import (
diff --git a/application/controller/static_page_generater/main.go b/application/controller/static_page_generater/main.go
index 8a0da60..e811249 100644
--- a/application/controller/static_page_generater/main.go
+++ b/application/controller/static_page_generater/main.go
@@ -18,7 +18,6 @@
package main
import (
- "bufio"
"bytes"
"compress/gzip"
"crypto/sha256"
@@ -40,6 +39,27 @@ const (
)
const (
+ staticListHeader = `// Sshwifty - A Web SSH client
+//
+// Copyright (C) 2019-2020 Rui NI
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+package controller
+
+`
+
staticListTemplate = `import "time"
var (
@@ -413,7 +433,7 @@ func main() {
destFolderPath, destFolderPathErr))
}
- listFile, listFileErr := os.OpenFile(listFilePath, os.O_RDWR, 0666)
+ listFile, listFileErr := os.Create(listFilePath)
if listFileErr != nil {
panic(fmt.Sprintf("Unable to open destination list file %s: %s",
@@ -428,29 +448,7 @@ func main() {
panic(fmt.Sprintf("Unable to open dir: %s", dirOpenErr))
}
- scanner := bufio.NewScanner(listFile)
- destBytesByPass := int64(0)
- foundLastLine := false
-
- for scanner.Scan() {
- text := scanner.Text()
-
- if strings.Index(text, templateStarts) < 0 {
- if foundLastLine {
- break
- }
-
- destBytesByPass += int64(len(text) + 1)
-
- continue
- }
-
- destBytesByPass += int64(len(text) + 1)
- foundLastLine = true
- }
-
- listFile.Seek(destBytesByPass, 0)
- listFile.Truncate(destBytesByPass)
+ listFile.WriteString(staticListHeader)
listFile.WriteString("\n// This file is generated by `go generate` at " +
time.Now().Format(time.RFC1123) + "\n// DO NOT EDIT!\n\n")
@@ -516,7 +514,7 @@ func main() {
}
listFile.WriteString(
- "\nimport \"" + parentPackage + "/" + destFolderPackage + "\"\n\n")
+ "\nimport \"" + parentPackage + "/" + destFolderPackage + "\"\n")
tempBuildErr := buildListFile(listFile, parsedFiles)
diff --git a/application/controller/static_pages.go b/application/controller/static_pages.go
deleted file mode 100644
index 8af228d..0000000
--- a/application/controller/static_pages.go
+++ /dev/null
@@ -1,157 +0,0 @@
-// Sshwifty - A Web SSH client
-//
-// Copyright (C) 2019-2020 Rui NI
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as
-// published by the Free Software Foundation, either version 3 of the
-// License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-package controller
-
-//go:generate go run ./static_page_generater ../../.tmp/dist ./static_pages.go
-//go:generate go fmt ./static_pages.go
-
-// This file is generated by `go generate` at Thu, 12 Mar 2020 20:25:38 CST
-// DO NOT EDIT!
-
-import "github.com/niruix/sshwifty/application/controller/static_pages"
-
-import "time"
-
-var (
- staticPages = map[string]staticData{
- "0.2591207cde2357871355.js": parseStaticData(static_pages.Static0()),
- "010c539b67fe9bacabc4ec5dbff1546b.svg": parseStaticData(static_pages.Static1()),
- "0b3811d040152efecd499f74a840805b.woff2": parseStaticData(static_pages.Static2()),
- "132527c8a67bf941ca84add5608a81a3.woff": parseStaticData(static_pages.Static3()),
- "13ec0eb5bdb821ff4930237d7c9f943f.woff2": parseStaticData(static_pages.Static4()),
- "13efe6cbc10b97144a28310ebdeda594.woff": parseStaticData(static_pages.Static5()),
- "1d6594826615607f6dc860bb49258acb.woff": parseStaticData(static_pages.Static6()),
- "2.2591207cde2357871355.js": parseStaticData(static_pages.Static7()),
- "23d1ed95cedfe6dc88667aa59d91a620.woff2": parseStaticData(static_pages.Static8()),
- "2591207cde2357871355.css": parseStaticData(static_pages.Static9()),
- "2591207cde2357871355.css.map": parseStaticData(static_pages.Static10()),
- "2591207cde2357871355.js": parseStaticData(static_pages.Static11()),
- "3.2591207cde2357871355.js": parseStaticData(static_pages.Static12()),
- "313a65630d341645c13e4f2a0364381d.woff": parseStaticData(static_pages.Static13()),
- "35b07eb2f8711ae08d1f58c043880930.woff": parseStaticData(static_pages.Static14()),
- "3aa797141ef00f0aa9fc.css": parseStaticData(static_pages.Static15()),
- "3aa797141ef00f0aa9fc.css.map": parseStaticData(static_pages.Static16()),
- "4.2591207cde2357871355.js": parseStaticData(static_pages.Static17()),
- "4357beb823a5f8d65c260f045d9e019a.woff2": parseStaticData(static_pages.Static18()),
- "4fe0f73cc919ba2b7a3c36e4540d725c.woff": parseStaticData(static_pages.Static19()),
- "5.2591207cde2357871355.js": parseStaticData(static_pages.Static20()),
- "50d75e48e0a3ddab1dd15d6bfb9d3700.woff": parseStaticData(static_pages.Static21()),
- "59eb3601394dd87f30f82433fb39dd94.woff2": parseStaticData(static_pages.Static22()),
- "5b4a33e176ff736a74f0ca2dd9e6b396.woff2": parseStaticData(static_pages.Static23()),
- "6.2591207cde2357871355.js": parseStaticData(static_pages.Static24()),
- "73f0a88bbca1bec19fb1303c689d04c6.woff2": parseStaticData(static_pages.Static25()),
- "83e114c316fcc3f23f524ec3e1c65984.woff": parseStaticData(static_pages.Static26()),
- "8a96edbbcd9a6991d79371aed0b0288e.woff": parseStaticData(static_pages.Static27()),
- "8ec888af4672fe48c5560b5e7c0ecb78.woff": parseStaticData(static_pages.Static28()),
- "90d1676003d9c28c04994c18bfd8b558.woff2": parseStaticData(static_pages.Static29()),
- "94008e69aaf05da75c0bbf8f8bb0db41.woff2": parseStaticData(static_pages.Static30()),
- "DEPENDENCIES.md": parseStaticData(static_pages.Static31()),
- "LICENSE.md": parseStaticData(static_pages.Static32()),
- "README.md": parseStaticData(static_pages.Static33()),
- "ad538a69b0e8615ed0419c4529344ffc.woff2": parseStaticData(static_pages.Static34()),
- "android-chrome-144x144.png": parseStaticData(static_pages.Static35()),
- "android-chrome-192x192.png": parseStaticData(static_pages.Static36()),
- "android-chrome-256x256.png": parseStaticData(static_pages.Static37()),
- "android-chrome-36x36.png": parseStaticData(static_pages.Static38()),
- "android-chrome-384x384.png": parseStaticData(static_pages.Static39()),
- "android-chrome-48x48.png": parseStaticData(static_pages.Static40()),
- "android-chrome-512x512.png": parseStaticData(static_pages.Static41()),
- "android-chrome-72x72.png": parseStaticData(static_pages.Static42()),
- "android-chrome-96x96.png": parseStaticData(static_pages.Static43()),
- "apple-touch-icon-1024x1024.png": parseStaticData(static_pages.Static44()),
- "apple-touch-icon-114x114.png": parseStaticData(static_pages.Static45()),
- "apple-touch-icon-120x120.png": parseStaticData(static_pages.Static46()),
- "apple-touch-icon-144x144.png": parseStaticData(static_pages.Static47()),
- "apple-touch-icon-152x152.png": parseStaticData(static_pages.Static48()),
- "apple-touch-icon-167x167.png": parseStaticData(static_pages.Static49()),
- "apple-touch-icon-180x180.png": parseStaticData(static_pages.Static50()),
- "apple-touch-icon-57x57.png": parseStaticData(static_pages.Static51()),
- "apple-touch-icon-60x60.png": parseStaticData(static_pages.Static52()),
- "apple-touch-icon-72x72.png": parseStaticData(static_pages.Static53()),
- "apple-touch-icon-76x76.png": parseStaticData(static_pages.Static54()),
- "apple-touch-icon-precomposed.png": parseStaticData(static_pages.Static55()),
- "apple-touch-icon.png": parseStaticData(static_pages.Static56()),
- "apple-touch-startup-image-1182x2208.png": parseStaticData(static_pages.Static57()),
- "apple-touch-startup-image-1242x2148.png": parseStaticData(static_pages.Static58()),
- "apple-touch-startup-image-1496x2048.png": parseStaticData(static_pages.Static59()),
- "apple-touch-startup-image-1536x2008.png": parseStaticData(static_pages.Static60()),
- "apple-touch-startup-image-320x460.png": parseStaticData(static_pages.Static61()),
- "apple-touch-startup-image-640x1096.png": parseStaticData(static_pages.Static62()),
- "apple-touch-startup-image-640x920.png": parseStaticData(static_pages.Static63()),
- "apple-touch-startup-image-748x1024.png": parseStaticData(static_pages.Static64()),
- "apple-touch-startup-image-750x1294.png": parseStaticData(static_pages.Static65()),
- "apple-touch-startup-image-768x1004.png": parseStaticData(static_pages.Static66()),
- "b52fac2bb93c5858f3f2675e4b52e1de.woff2": parseStaticData(static_pages.Static67()),
- "browserconfig.xml": parseStaticData(static_pages.Static68()),
- "c023bfb8571ccdf77bdd94a308ea3162.svg": parseStaticData(static_pages.Static69()),
- "c6af87fef241bf953aa3.css": parseStaticData(static_pages.Static70()),
- "c6af87fef241bf953aa3.css.map": parseStaticData(static_pages.Static71()),
- "c73eb1ceba3321a80a0aff13ad373cb4.woff": parseStaticData(static_pages.Static72()),
- "cc2fadc3928f2f223418887111947b40.woff": parseStaticData(static_pages.Static73()),
- "d26871e8149b5759f814fd3c7a4f784b.woff2": parseStaticData(static_pages.Static74()),
- "d3b47375afd904983d9be8d6e239a949.woff": parseStaticData(static_pages.Static75()),
- "d4a48f0f981279da0e207e47516f4354.woff": parseStaticData(static_pages.Static76()),
- "d569415005f26953bb9c3c52895355eb.woff2": parseStaticData(static_pages.Static77()),
- "e72f2a56d5e5f8c8decc.css": parseStaticData(static_pages.Static78()),
- "e72f2a56d5e5f8c8decc.css.map": parseStaticData(static_pages.Static79()),
- "e8eaae902c3a4dacb9a5062667e10576.woff2": parseStaticData(static_pages.Static80()),
- "error.html": parseStaticData(static_pages.Static81()),
- "f5902d5ef961717ed263902fc429e6ae.woff": parseStaticData(static_pages.Static82()),
- "f75569f8a5fab0893fa712d8c0d9c3fe.woff2": parseStaticData(static_pages.Static83()),
- "f93c333e41413ed8548b714ad10a14fe.woff2": parseStaticData(static_pages.Static84()),
- "favicon-16x16.png": parseStaticData(static_pages.Static85()),
- "favicon-32x32.png": parseStaticData(static_pages.Static86()),
- "favicon.ico": parseStaticData(static_pages.Static87()),
- "fdea8596c4f9e3699f0cd51255a9e0f1.woff": parseStaticData(static_pages.Static88()),
- "firefox_app_128x128.png": parseStaticData(static_pages.Static89()),
- "firefox_app_512x512.png": parseStaticData(static_pages.Static90()),
- "firefox_app_60x60.png": parseStaticData(static_pages.Static91()),
- "index.html": parseStaticData(static_pages.Static92()),
- "manifest.json": parseStaticData(static_pages.Static93()),
- "manifest.webapp": parseStaticData(static_pages.Static94()),
- "mstile-144x144.png": parseStaticData(static_pages.Static95()),
- "mstile-150x150.png": parseStaticData(static_pages.Static96()),
- "mstile-310x150.png": parseStaticData(static_pages.Static97()),
- "mstile-310x310.png": parseStaticData(static_pages.Static98()),
- "mstile-70x70.png": parseStaticData(static_pages.Static99()),
- "robots.txt": parseStaticData(static_pages.Static100()),
- }
-)
-
-// parseStaticData parses result from a static file returner and generate
-// a new `staticData` item
-func parseStaticData(
- fileStart int,
- fileEnd int,
- compressedStart int,
- compressedEnd int,
- contentHash string,
- compressedHash string,
- creation time.Time,
- data []byte,
- contentType string,
-) staticData {
- return staticData{
- data: data[fileStart:fileEnd],
- dataHash: contentHash,
- compressd: data[compressedStart:compressedEnd],
- compressdHash: compressedHash,
- created: creation,
- contentType: contentType,
- }
-}