Mercurial > mercurial > hgweb_rsearcher.cgi
comparison go/server.go @ 14:c1dc1fcee7fe
print zoom.
| author | pyon@macmini |
|---|---|
| date | Sun, 09 Dec 2018 14:38:15 +0900 |
| parents | f5ffc34f045a |
| children | c262e17de9b1 |
comparison
equal
deleted
inserted
replaced
| 13:f5ffc34f045a | 14:c1dc1fcee7fe |
|---|---|
| 1 /* | 1 /* |
| 2 server.go : server-program. | 2 server.go : server-program. |
| 3 Version : 1.3 | 3 Version : 1.4 |
| 4 Last Change: 2018-11-14 水 17:03:30. | 4 Last Change: 2018-12-05 水 08:08:02. |
| 5 | 5 |
| 6 install to: server_root/ | 6 install to: server_root/ |
| 7 | 7 |
| 8 server_root/server | 8 server_root/server |
| 9 + db/ | 9 + db/ |
| 11 + images/ | 11 + images/ |
| 12 */ | 12 */ |
| 13 package main | 13 package main |
| 14 | 14 |
| 15 import( | 15 import( |
| 16 "path/filepath" | 16 "bufio" |
| 17 "flag" | |
| 17 "fmt" | 18 "fmt" |
| 18 "io" | 19 "io" |
| 19 "log" | 20 "log" |
| 20 "net" | 21 "net" |
| 21 "net/http" | 22 "net/http" |
| 22 "os" | 23 "os" |
| 24 "path/filepath" | |
| 23 "time" | 25 "time" |
| 24 ) | 26 ) |
| 25 | 27 |
| 26 var ( | 28 var ( |
| 27 version string | 29 version string |
| 28 server string | 30 server string |
| 29 port string | 31 port string |
| 30 server_root string | 32 server_root string |
| 31 logfile string | 33 logfile string |
| 34 not_ac bool | |
| 35 wlfile string | |
| 32 ) | 36 ) |
| 33 | 37 |
| 34 func init() { | 38 func init() { |
| 35 version = "1.3" // manage-db version | 39 version = "1.4" // piece-image version |
| 36 port = ":3910" | 40 port = ":3910" |
| 37 server_root = filepath.Dir( os.Args[0] ) | 41 server_root = filepath.Dir( os.Args[0] ) |
| 38 logfile = filepath.Join( server_root, "rsearcher.log" ) | 42 logfile = filepath.Join( server_root, "rsearcher.log" ) |
| 43 wlfile = "rsearcher.whitelist" | |
| 39 } | 44 } |
| 40 | 45 |
| 41 func main() { | 46 func main() { |
| 47 | |
| 48 flag.BoolVar( ¬_ac, "d", false, "no access control ( for debug )" ) | |
| 49 flag.Parse() | |
| 42 | 50 |
| 43 // setting IP-Address & Port | 51 // setting IP-Address & Port |
| 44 addrs, err := net.InterfaceAddrs() | 52 addrs, err := net.InterfaceAddrs() |
| 45 if err != nil { | 53 if err != nil { |
| 46 log.Fatal( err ) | 54 log.Fatal( err ) |
| 60 http.HandleFunc( "/mngdb/", mngdb_handler ) | 68 http.HandleFunc( "/mngdb/", mngdb_handler ) |
| 61 log.Fatal( http.ListenAndServe( server, nil ) ) | 69 log.Fatal( http.ListenAndServe( server, nil ) ) |
| 62 } | 70 } |
| 63 | 71 |
| 64 func handler( w http.ResponseWriter, r *http.Request ) { | 72 func handler( w http.ResponseWriter, r *http.Request ) { |
| 73 if !not_ac && !is_valid_host( r.RemoteAddr ) { | |
| 74 http.NotFound( w, r ) | |
| 75 return | |
| 76 } | |
| 77 | |
| 65 file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) ) | 78 file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) ) |
| 79 img := r.URL.Query().Get( "q" ) | |
| 66 | 80 |
| 67 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file ) | 81 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file ) |
| 82 fmt.Println( "--", img , "--") | |
| 68 write_log( "[access] " + r.RemoteAddr + " " + file ) | 83 write_log( "[access] " + r.RemoteAddr + " " + file ) |
| 69 | 84 |
| 70 f, err := os.Open( file ) | 85 f, err := os.Open( file ) |
| 71 if err != nil { | 86 if err != nil { |
| 72 http.NotFound( w, r ) | 87 http.NotFound( w, r ) |
| 80 w.Header().Set( "Content-Length", fmt.Sprintf( "%d", fi.Size() ) ) | 95 w.Header().Set( "Content-Length", fmt.Sprintf( "%d", fi.Size() ) ) |
| 81 io.Copy( w, f ) | 96 io.Copy( w, f ) |
| 82 } | 97 } |
| 83 | 98 |
| 84 func upload_handler( w http.ResponseWriter, r *http.Request ) { | 99 func upload_handler( w http.ResponseWriter, r *http.Request ) { |
| 100 if !not_ac && !is_valid_host( r.RemoteAddr ) { | |
| 101 http.NotFound( w, r ) | |
| 102 return | |
| 103 } | |
| 104 | |
| 85 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" ) | 105 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" ) |
| 86 now := time.Now().Format( "20060102_150405" ) | 106 now := time.Now().Format( "20060102_150405" ) |
| 87 file := filepath.Join( server_root, "upload", now ) | 107 file := filepath.Join( server_root, "upload", now ) |
| 88 f, err := os.Create( file ) | 108 f, err := os.Create( file ) |
| 89 if err != nil { | 109 if err != nil { |
| 98 f.Close() | 118 f.Close() |
| 99 w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) ) | 119 w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) ) |
| 100 } | 120 } |
| 101 | 121 |
| 102 func mngdb_handler( w http.ResponseWriter, r *http.Request ) { | 122 func mngdb_handler( w http.ResponseWriter, r *http.Request ) { |
| 123 if !not_ac && !is_valid_host( r.RemoteAddr ) { | |
| 124 http.NotFound( w, r ) | |
| 125 return | |
| 126 } | |
| 127 | |
| 103 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/mngdb" ) | 128 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/mngdb" ) |
| 104 write_log( "[access] " + r.RemoteAddr + "manage-db" ) | 129 write_log( "[access] " + r.RemoteAddr + "manage-db" ) |
| 105 db := r.URL.Path[ len( "/mngdb/" ): ] | 130 db := r.URL.Path[ len( "/mngdb/" ): ] |
| 106 | 131 |
| 107 file := filepath.Join( server_root, "db", db ) | 132 file := filepath.Join( server_root, "db", db ) |
| 117 return | 142 return |
| 118 } | 143 } |
| 119 f.Close() | 144 f.Close() |
| 120 } | 145 } |
| 121 | 146 |
| 147 func is_valid_host( host string ) bool { | |
| 148 f, _ := os.Open( wlfile ) | |
| 149 defer f.Close() | |
| 150 input := bufio.NewScanner( f ) | |
| 151 for input.Scan() { | |
| 152 if input.Text() == host { | |
| 153 return true | |
| 154 } | |
| 155 } | |
| 156 return false | |
| 157 } | |
| 158 | |
| 122 func write_log( msg string ) { | 159 func write_log( msg string ) { |
| 123 f, err := os.OpenFile( logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644 ) | 160 f, err := os.OpenFile( logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644 ) |
| 124 if err != nil { | 161 if err != nil { |
| 125 log.Fatal( err ) | 162 log.Fatal( err ) |
| 126 } | 163 } |
