summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKatolaZ <katolaz@freaknet.org>2017-07-03 13:45:44 +0100
committerKatolaZ <katolaz@freaknet.org>2017-07-03 13:45:44 +0100
commit3fa367ce4edeee5f6119235ef0f32a1ab3eb0139 (patch)
tree4e1a2eeeaf560d1ffdb0c28289f02d64c87bb077
parent13c5a2ab438f2496370ef10e7df8096e30962b66 (diff)
Moved main.go -> binnit.go
-rw-r--r--Makefile4
-rw-r--r--main.go177
2 files changed, 2 insertions, 179 deletions
diff --git a/Makefile b/Makefile
index 18f72b0..f9873c1 100644
--- a/Makefile
+++ b/Makefile
@@ -2,6 +2,6 @@ GO=go
all: binnit
-binnit: main.go templ.go config.go
- $(GO) build -o binnit main.go templ.go config.go
+binnit: binnit.go templ.go config.go
+ $(GO) build -o binnit binnit.go templ.go config.go
diff --git a/main.go b/main.go
deleted file mode 100644
index 817e4da..0000000
--- a/main.go
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * This program is free software: you can redistribute it and/or
- * modify it under the terms of the GNU 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
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- * (c) Vincenzo "KatolaZ" Nicosia 2017 -- <katolaz@freaknet.org>
- *
- *
- * This file is part of "binnit", a minimal no-fuss pastebin-like
- * server written in golang
- *
- */
-
-
-package main
-
-import (
- "fmt"
- "log"
- "net/http"
- "os"
- "path/filepath"
- "time"
- "io"
- "binnit/paste"
-)
-
-
-var p_conf = Config{
- server_name: "localhost",
- bind_addr: "0.0.0.0",
- bind_port: "8000",
- paste_dir: "./pastes",
- templ_dir: "./tmpl",
- max_size: 4096,
- log_file: "./binnit.log",
-}
-
-
-
-func min (a, b int) int {
-
- if a > b {
- return b
- } else {
- return a
- }
-
-}
-
-func handle_get_paste(w http.ResponseWriter, r *http.Request) {
-
- var paste_name, orig_name string
- var err error
-
- orig_name = filepath.Clean(r.URL.Path)
- paste_name = p_conf.paste_dir + "/" + orig_name
-
- orig_IP := r.RemoteAddr
-
- log.Printf("Received GET from %s for '%s'\n", orig_IP, orig_name)
-
- // The default is to serve index.html
- if (orig_name == "/") || (orig_name == "/index.html") {
- http.ServeFile(w, r, p_conf.templ_dir + "/index.html")
- } else {
- // otherwise, if the requested paste exists, we serve it...
- if _, err = os.Stat(paste_name); err == nil && orig_name != "./" {
- //http.ServeFile(w, r, paste_name)
- s, err := prepare_paste_page(&p_conf, orig_name)
- if err == nil {
- fmt.Fprintf(w, "%s", s)
- return
- } else {
- fmt.Fprintf(w, "Error recovering paste '%s'\n", orig_name)
- return
- }
- } else {
- // otherwise, we give say we didn't find it
- fmt.Fprintf(w, "Paste '%s' not found\n", orig_name)
- return
- }
- }
-}
-
-func handle_put_paste(w http.ResponseWriter, r *http.Request) {
-
-
- if err := r.ParseForm(); err != nil {
- // Invalid POST -- let's serve the default file
- http.ServeFile(w, r, p_conf.templ_dir + "/index.html")
- } else {
- req_body := r.PostForm
-
- orig_IP := r.RemoteAddr
-
- log.Printf("Received new POST from %s\n", orig_IP)
-
- // get title, body, and time
- title := req_body.Get("title")
- date := time.Now().String()
- content := req_body.Get("paste")
-
- content = content[0:min(len(content), int(p_conf.max_size))]
-
- ID, err := paste.Store(title, date, content, p_conf.paste_dir)
-
- log.Printf(" ID: %s; err: %s\n", ID, err)
-
- if err == nil {
- hostname := p_conf.server_name
- if show := req_body.Get("show"); show != "1" {
- fmt.Fprintf(w, "%s/%s", hostname, ID)
- return
- } else{
- fmt.Fprintf(w, "<html><body>Link: <a href='http://%s/%s'>http://%s/%s</a></body></html>",
- hostname, ID, hostname, ID)
- return
- }
- } else {
- fmt.Fprintf(w, "%s\n", err)
- }
- }
-}
-func req_handler(w http.ResponseWriter, r *http.Request) {
-
- switch r.Method {
- case "GET":
- handle_get_paste(w, r)
- case "POST":
- handle_put_paste(w, r)
- default:
- http.NotFound(w, r)
- }
-}
-
-func main() {
-
-
-
- parse_config("binnit.cfg", &p_conf)
-
-
- f, err := os.OpenFile(p_conf.log_file, os.O_APPEND | os.O_CREATE | os.O_RDWR, 0600)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Error opening log_file: %s. Exiting\n", p_conf.log_file)
- os.Exit(1)
- }
- defer f.Close()
-
-
- log.SetOutput(io.Writer(f))
- log.SetPrefix("[binnit]: ")
- log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds)
-
- log.Println("Binnit version 0.1 -- Starting ")
- log.Printf(" + Serving pastes on: %s\n", p_conf.server_name)
- log.Printf(" + listening on: %s:%s\n", p_conf.bind_addr, p_conf.bind_port )
- log.Printf(" + paste_dir: %s\n", p_conf.paste_dir)
- log.Printf(" + templ_dir: %s\n", p_conf.templ_dir)
- log.Printf(" + max_size: %d\n", p_conf.max_size)
-
- // FIXME: create paste_dir if it does not exist
-
- http.HandleFunc("/", req_handler)
- log.Fatal(http.ListenAndServe(p_conf.bind_addr + ":" + p_conf.bind_port, nil))
-}