mirror of
https://github.com/NotAShelf/Echo.git
synced 2024-11-22 21:31:10 +00:00
style the root serve path
This commit is contained in:
parent
ac95f3b5db
commit
64d35045b4
4 changed files with 130 additions and 3 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -7,6 +7,7 @@
|
||||||
*.dll
|
*.dll
|
||||||
*.so
|
*.so
|
||||||
*.dylib
|
*.dylib
|
||||||
|
echo
|
||||||
|
|
||||||
# Test binary, built with `go test -c`
|
# Test binary, built with `go test -c`
|
||||||
*.test
|
*.test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Echo
|
# Echo
|
||||||
|
|
||||||
Janus allows you to setup a simple file server for local testing.
|
Echo allows you to setup a simple file server for local testing.
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
|
|
29
main.go
29
main.go
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"html/template"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
@ -11,6 +12,13 @@ import (
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var version string
|
||||||
|
|
||||||
|
type PageData struct {
|
||||||
|
Files []string
|
||||||
|
Version string
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
err := godotenv.Load()
|
err := godotenv.Load()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -33,8 +41,29 @@ func main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.URL.Path == "/" {
|
||||||
|
files, err := os.ReadDir(basePath)
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fileNames := make([]string, len(files))
|
||||||
|
for i, file := range files {
|
||||||
|
fileNames[i] = file.Name()
|
||||||
|
}
|
||||||
|
|
||||||
|
data := PageData{
|
||||||
|
Files: fileNames,
|
||||||
|
Version: version,
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpl := template.Must(template.ParseFiles("public/template.html"))
|
||||||
|
tmpl.Execute(w, data)
|
||||||
|
} else {
|
||||||
filePath := filepath.Join(basePath, r.URL.Path)
|
filePath := filepath.Join(basePath, r.URL.Path)
|
||||||
http.ServeFile(w, r, filePath)
|
http.ServeFile(w, r, filePath)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
port, _ := strconv.Atoi(serverPort)
|
port, _ := strconv.Atoi(serverPort)
|
||||||
|
|
97
public/template.html
Normal file
97
public/template.html
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Directory Listing</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #1e1e2e;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 24px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style: none;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
li:hover {
|
||||||
|
color: #00a8cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.folder > ul {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
li.folder:hover > ul {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #00ddff;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #00ccff; /* darker shade on hover */
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #313244;
|
||||||
|
color: #ffffff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px 0;
|
||||||
|
font-size: 14px;
|
||||||
|
border-top: 1px solid #555677;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer > div {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Directory Listing</h1>
|
||||||
|
<ul>
|
||||||
|
{{range .Files}}
|
||||||
|
<li><a href="{{.}}">{{.}}</a></li>
|
||||||
|
{{end}}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<footer id="footer">Served by Echo {{.Version}}</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
const footer = document.getElementById("footer");
|
||||||
|
const version = footer.textContent.split(" ").pop();
|
||||||
|
const githubURL = `https://github.com/NotAShelf/Echo/tags/${version}`;
|
||||||
|
|
||||||
|
const link = document.createElement("a");
|
||||||
|
link.href = githubURL;
|
||||||
|
link.textContent = version;
|
||||||
|
|
||||||
|
footer.innerHTML = "Served by Echo ";
|
||||||
|
footer.appendChild(link);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in a new issue