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 } |