From 6a98ad5720b2f472af7fc3c3edf54ff092c2322b Mon Sep 17 00:00:00 2001 From: Krio Date: Mon, 16 Aug 2021 10:14:52 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TxtStore.go | 56 +++++++++++++++++++++++++++++++++ go.mod | 3 ++ html/favicon.png | Bin 0 -> 24455 bytes html/index.html | 27 ++++++++++++++++ html/styles.css | 79 +++++++++++++++++++++++++++++++++++++++++++++++ main.go | 50 ++++++++++++++++++++++++++++++ 6 files changed, 215 insertions(+) create mode 100644 TxtStore.go create mode 100644 go.mod create mode 100644 html/favicon.png create mode 100644 html/index.html create mode 100644 html/styles.css create mode 100644 main.go diff --git a/TxtStore.go b/TxtStore.go new file mode 100644 index 0000000..36f5f19 --- /dev/null +++ b/TxtStore.go @@ -0,0 +1,56 @@ +package main + +import ( + "bufio" + "os" +) + +type TxtStore string + +func (t *TxtStore) GetGuestbook() (Guestbook, error) { + var result Guestbook + + file, err := os.Open(string(*t)) + if os.IsNotExist(err) { + return result, nil + } else if err != nil { + return result, err + } + defer file.Close() + + scanner := bufio.NewScanner(file) + var comments []string + + for scanner.Scan() { + comments = append([]string{scanner.Text()}, comments...) + } + + err = scanner.Err() + if err != nil { + return result, err + } + + result.Comments = comments + result.Count = len(comments) + + return result, nil +} + +func (t *TxtStore) AddComment(comment string) error { + if comment == "" { + return nil + } + + options := os.O_WRONLY | os.O_APPEND | os.O_CREATE + file, err := os.OpenFile(string(*t), options, os.FileMode(0600)) + if err != nil { + return err + } + + _, err = file.WriteString(comment + "\n") + if err != nil { + return err + } + + return file.Close() +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..7e15a5a --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module git.atik.me/guestbook + +go 1.16 diff --git a/html/favicon.png b/html/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..88473961789ecab940400041b1feee676fcc5509 GIT binary patch literal 24455 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 brw0B%`uy55Q6TFW00000NkvXXu0mjf2whCf literal 0 HcmV?d00001 diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..14390d7 --- /dev/null +++ b/html/index.html @@ -0,0 +1,27 @@ + + + + + + Книга отзывов + + + + + +
+

Книга отзывов

+ + +
+

Всего записей - {{ .Count }}

+ + +
+ +
    + {{ range .Comments }}
  • {{ . }}
  • {{ end}} +
+
+ + diff --git a/html/styles.css b/html/styles.css new file mode 100644 index 0000000..f10e160 --- /dev/null +++ b/html/styles.css @@ -0,0 +1,79 @@ +* { + margin: 0; + padding: 0; + + font-family: 'Raleway', serif; +} + +body { + padding: 1%; + + color: #2E3E50; + background: #D8DDDD; + + text-align: center; + letter-spacing: 1px; +} + +.main { + margin: auto; + padding: 1% 2%; + max-width: 800px; + border-radius: 5px; + background: #ECF0F1; + box-shadow: 0 2px 6px 0 rgba(0, 0, 0, .3); +} + +form { + width: 100%; + display: flex; + margin: 2% 0; + +} + +form p { + text-align: left; + padding: 1%; + font-size: 18px; +} + +input { + padding: 1%; + border-radius: 4px; + border: 1px solid #CCC; + font-size: 18px; +} + +input[type=text] { + flex-grow: 1; + + margin: 0 .5%; +} + +input[type=submit] { + cursor: pointer; +} + +input[type=submit]:hover { + background-color: #D8DDDD; +} + +h1 { + font-family: 'Baloo Tamma', cursive; +} + +li{ + list-style-type: none; + + font-size: 18px; + min-width: 24%; + margin: 2% 0; + box-shadow: 0 2px 4px rgba(0, 0, 0, .2); + padding: 1% 2%; + background: #FFF; + box-sizing: border-box; +} + +li:hover { + box-shadow:0 5px 10px rgba(0, 0, 0, .15); +} diff --git a/main.go b/main.go new file mode 100644 index 0000000..588c217 --- /dev/null +++ b/main.go @@ -0,0 +1,50 @@ +package main + +import ( + "html/template" + "log" + "net/http" +) + +type Guestbook struct { + Comments []string + Count int +} + +func indexHandler(writer http.ResponseWriter, request *http.Request) { + html, err := template.ParseFiles("html/index.html") + check(err) + + store := TxtStore("comments.txt") + guestbook, err := store.GetGuestbook() + check(err) + + err = html.Execute(writer, guestbook) + check(err) +} + +func newHandler(writer http.ResponseWriter, request *http.Request) { + comment := request.FormValue("comment") + store := TxtStore("comments.txt") + + err := store.AddComment(comment) + check(err) + + http.Redirect(writer, request, "/", http.StatusFound) +} + +func main() { + http.HandleFunc("/", indexHandler) + http.HandleFunc("/new", newHandler) + + http.Handle("/html/", http.StripPrefix("/html/", http.FileServer(http.Dir("html")))) + + err := http.ListenAndServe("0.0.0.0:80", nil) + log.Fatal(err) +} + +func check(err error) { + if err != nil { + log.Fatal(err) + } +}