Mercurial > mercurial > hgweb_rsearcher.cgi
diff go/server.go @ 15:c262e17de9b1
db download skip-mode.
author | pyon@macmini |
---|---|
date | Sat, 08 Jun 2019 15:50:59 +0900 |
parents | c1dc1fcee7fe |
children | b651aa41b9d4 |
line wrap: on
line diff
--- a/go/server.go Sun Dec 09 14:38:15 2018 +0900 +++ b/go/server.go Sat Jun 08 15:50:59 2019 +0900 @@ -1,7 +1,7 @@ /* server.go : server-program. - Version : 1.4 - Last Change: 2018-12-05 水 08:08:02. + Version : 1.5 + Last Change: 2019-05-29 水 08:58:19. install to: server_root/ @@ -22,6 +22,7 @@ "net/http" "os" "path/filepath" + "strings" "time" ) @@ -36,25 +37,28 @@ ) func init() { - version = "1.4" // piece-image version + version = "1.5" // piece-image version port = ":3910" - server_root = filepath.Dir( os.Args[0] ) - logfile = filepath.Join( server_root, "rsearcher.log" ) + server_root = filepath.Dir(os.Args[0]) + logfile = filepath.Join(server_root, "rsearcher.log") wlfile = "rsearcher.whitelist" } func main() { - flag.BoolVar( ¬_ac, "d", false, "no access control ( for debug )" ) + flag.BoolVar(¬_ac, "d", false, "no access control ( for debug )") flag.Parse() // setting IP-Address & Port addrs, err := net.InterfaceAddrs() if err != nil { - log.Fatal( err ) + log.Fatal(err) } for _, a := range addrs { - if ipnet, ok := a.( *net.IPNet ); ok && !ipnet.IP.IsLoopback() { + if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { + if strings.HasPrefix(ipnet.IP.String(), "169.254") { + continue + } if ipnet.IP.To4() != nil { server = ipnet.IP.String() + port } @@ -62,92 +66,92 @@ } // start Web-server - fmt.Println( "server start [", server, "] ( program version", version, ")" ) - http.HandleFunc( "/", handler ) - http.HandleFunc( "/upload/", upload_handler ) - http.HandleFunc( "/mngdb/", mngdb_handler ) - log.Fatal( http.ListenAndServe( server, nil ) ) + fmt.Println("server start [", server, "] ( program version", version, ")") + http.HandleFunc("/", handler ) + http.HandleFunc("/upload/", upload_handler) + http.HandleFunc("/mngdb/", mngdb_handler ) + log.Fatal(http.ListenAndServe(server, nil)) } -func handler( w http.ResponseWriter, r *http.Request ) { - if !not_ac && !is_valid_host( r.RemoteAddr ) { - http.NotFound( w, r ) +func handler(w http.ResponseWriter, r *http.Request) { + if !not_ac && !is_valid_host(r.RemoteAddr) { + http.NotFound(w, r) return } - file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) ) - img := r.URL.Query().Get( "q" ) + file := filepath.Join(server_root, filepath.FromSlash(r.URL.Path)) + //img := r.URL.Query().Get("q") - fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file ) - fmt.Println( "--", img , "--") - write_log( "[access] " + r.RemoteAddr + " " + file ) + fmt.Println("[access]", r.RemoteAddr, "|", time.Now().Format("2006-01-02 15:04"), "|", file) + //fmt.Println("--", img , "--") + write_log("[access] " + r.RemoteAddr + " " + file) - f, err := os.Open( file ) + f, err := os.Open(file) if err != nil { - http.NotFound( w, r ) + http.NotFound(w, r) return } defer f.Close() fi, _ := f.Stat() - w.Header().Set( "Content-Type", "rsearcher/octet-stream" ) - w.Header().Set( "Content-Length", fmt.Sprintf( "%d", fi.Size() ) ) - io.Copy( w, f ) + w.Header().Set("Content-Type", "rsearcher/octet-stream") + w.Header().Set("Content-Length", fmt.Sprintf("%d", fi.Size())) + io.Copy(w, f) } -func upload_handler( w http.ResponseWriter, r *http.Request ) { - if !not_ac && !is_valid_host( r.RemoteAddr ) { - http.NotFound( w, r ) +func upload_handler(w http.ResponseWriter, r *http.Request) { + if !not_ac && !is_valid_host(r.RemoteAddr) { + http.NotFound(w, r) return } - fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" ) - now := time.Now().Format( "20060102_150405" ) - file := filepath.Join( server_root, "upload", now ) - f, err := os.Create( file ) + fmt.Println("[access]", r.RemoteAddr, "|", time.Now().Format("2006-01-02 15:04"), "|", "/upload") + now := time.Now().Format("20060102_150405") + file := filepath.Join(server_root, "upload", now) + f, err := os.Create(file) if err != nil { - http.NotFound( w, r ) + http.NotFound(w, r) return } - n, err := io.Copy( f, r.Body ) + n, err := io.Copy(f, r.Body) if err != nil { - http.NotFound( w, r ) + http.NotFound(w, r) return } f.Close() - w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) ) + w.Write([]byte(fmt.Sprintf("%d bytes are recieved.\n", n))) } -func mngdb_handler( w http.ResponseWriter, r *http.Request ) { - if !not_ac && !is_valid_host( r.RemoteAddr ) { - http.NotFound( w, r ) +func mngdb_handler(w http.ResponseWriter, r *http.Request) { + if !not_ac && !is_valid_host(r.RemoteAddr) { + http.NotFound(w, r) return } - fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/mngdb" ) - write_log( "[access] " + r.RemoteAddr + "manage-db" ) - db := r.URL.Path[ len( "/mngdb/" ): ] + fmt.Println("[access]", r.RemoteAddr, "|", time.Now().Format("2006-01-02 15:04" ), "|", "/mngdb") + write_log("[access] " + r.RemoteAddr + "manage-db") + db := r.URL.Path[len("/mngdb/"):] - file := filepath.Join( server_root, "db", db ) + file := filepath.Join(server_root, "db", db) - f, err := os.Create( file ) + f, err := os.Create(file) if err != nil { - http.NotFound( w, r ) + http.NotFound(w, r) return } - _, err = io.Copy( f, r.Body ) + _, err = io.Copy(f, r.Body) if err != nil { - http.NotFound( w, r ) + http.NotFound(w, r) return } f.Close() } -func is_valid_host( host string ) bool { - f, _ := os.Open( wlfile ) +func is_valid_host(host string) bool { + f, _ := os.Open(wlfile) defer f.Close() - input := bufio.NewScanner( f ) + input := bufio.NewScanner(f) for input.Scan() { if input.Text() == host { return true @@ -156,14 +160,14 @@ return false } -func write_log( msg string ) { - f, err := os.OpenFile( logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644 ) +func write_log(msg string) { + f, err := os.OpenFile(logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { - log.Fatal( err ) + log.Fatal(err) } defer f.Close() - logger := log.New( f, "", log.LstdFlags ) - logger.Println( msg ) + logger := log.New(f, "", log.LstdFlags) + logger.Println(msg) }