diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | main.go | 177 |
2 files changed, 2 insertions, 179 deletions
@@ -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)) -} |