Initial commit
This commit is contained in:
commit
e59c4d1f5e
6 files changed
+187
No files matched your search
+28
@@ -0,0 +1,28 @@
|
|||||||
|
# If you prefer the allow list template instead of the deny list, see community template:
|
||||||
|
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
|
||||||
|
#
|
||||||
|
# Binaries for programs and plugins
|
||||||
|
*.exe
|
||||||
|
*.exe~
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Test binary, built with `go test -c`
|
||||||
|
*.test
|
||||||
|
|
||||||
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Dependency directories (remove the comment below to include it)
|
||||||
|
# vendor/
|
||||||
|
|
||||||
|
# Go workspace file
|
||||||
|
go.work
|
||||||
|
go.work.sum
|
||||||
|
|
||||||
|
# env file
|
||||||
|
.env
|
||||||
|
|
||||||
|
# GoLand
|
||||||
|
.idea/
|
||||||
+14
@@ -0,0 +1,14 @@
|
|||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
Version 2, December 2004
|
||||||
|
|
||||||
|
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute verbatim or modified
|
||||||
|
copies of this license document, and changing it is allowed as long
|
||||||
|
as the name is changed.
|
||||||
|
|
||||||
|
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# Teapot Server
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
This is a simple "teapot server" project, inspired by the classic XKCD comic. It's designed to be a minimal HTTP server that responds with a 418 I'm teapot status and a humorous message about quantum fluctuations. The primary purpose is for demonstration and learning purposes, showcasing basic Go web development concepts.
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
1. **Clone the repository:**
|
||||||
|
```bash
|
||||||
|
git clone https://gitea.mrixs.me/Mrixs/teapot-server.git
|
||||||
|
cd teapot-server
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Build the server:**
|
||||||
|
```bash
|
||||||
|
go build .
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Run the server:**
|
||||||
|
```bash
|
||||||
|
./teapot-server
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Access the server:** Open your web browser and navigate to `http://localhost:8080`. You should see a message about quantum fluctuations.
|
||||||
|
|
||||||
|
## Technical Details
|
||||||
|
|
||||||
|
* **Language:** Go (Golang)
|
||||||
|
* **Dependencies:** None (uses standard library only)
|
||||||
|
* **Port:** The server listens on port 8080 by default. This can be configured via command line argument `--port <port>`.
|
||||||
|
* **Error Handling:** Basic error handling is implemented to catch potential issues during startup and runtime.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Feel free to contribute by submitting bug reports or feature requests. Pull requests are welcome!
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the [WTFPL License](LICENSE.md). See the `LICENSE` file for details.
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func handler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// Read the HTML content from the file
|
||||||
|
content, err := ioutil.ReadFile("teapot.html")
|
||||||
|
if err != nil {
|
||||||
|
http.Error(w, "Internal Server Error: Could not read HTML file", http.StatusInternalServerError)
|
||||||
|
log.Println("Error reading HTML file:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the content to the response writer
|
||||||
|
w.WriteHeader(http.StatusTeapot) // Set the 418 status code
|
||||||
|
fmt.Fprintf(w, string(content)) //Write the entire content as a string
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
portPtr := flag.Int("port", 8080, "Port to listen on")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
port := *portPtr // Dereference the pointer
|
||||||
|
|
||||||
|
fmt.Printf("Server listening on port %d...\n", port)
|
||||||
|
http.HandleFunc("/", handler) // Register the handler for all requests on root path "/"
|
||||||
|
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
|
||||||
|
}
|
||||||
+68
@@ -0,0 +1,68 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Портал к чайнику открылся! 🚀</title>
|
||||||
|
<style>
|
||||||
|
body,
|
||||||
|
html {
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
font-family: "Arial", sans-serif;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #1a2c44; /* темно-синий фон */
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
text-align: center;
|
||||||
|
max-width: 600px;
|
||||||
|
color: #e0e0ff; /* светло-голубой текст для контраста */
|
||||||
|
background-color: rgba(
|
||||||
|
25,
|
||||||
|
39,
|
||||||
|
66,
|
||||||
|
0.85
|
||||||
|
); /* темно-серый с прозрачностью для фона */
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
color: #f0e68c; /* цвет ананаса, чтобы добавить яркости */
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
width: 480px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border: 0px solid #f0e68c; /* граница в цвете ананаса для контраста */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h1>Ошибка 418: Я - чайник</h1>
|
||||||
|
<p>
|
||||||
|
Похоже, в результате квантового скачка вы обратились не к
|
||||||
|
серверу, а к параллельной вселенной, где чайники — это основное
|
||||||
|
информационное устройство.
|
||||||
|
</p>
|
||||||
|
<img
|
||||||
|
src="data:image/png;base64,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 truncated
|
||||||
|
alt="Чайник"
|
||||||
|
/>
|
||||||
|
<p>
|
||||||
|
Попробуйте снова, и может вам повезет — вы найдёте путь назад к
|
||||||
|
серверу!
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<small
|
||||||
|
>*Спасибо за ваше терпение. Мы работаем над устранением
|
||||||
|
этого "квантового скачка".</small
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in new issue
Block a user