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( &not_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 }