annotate go/server.go @ 14:c1dc1fcee7fe

print zoom.
author pyon@macmini
date Sun, 09 Dec 2018 14:38:15 +0900
parents f5ffc34f045a
children c262e17de9b1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
1 /*
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
2 server.go : server-program.
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
3 Version : 1.4
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
4 Last Change: 2018-12-05 水 08:08:02.
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
5
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
6 install to: server_root/
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
7
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
8 server_root/server
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
9 + db/
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
10 + release/
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
11 + images/
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
12 */
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
13 package main
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
14
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
15 import(
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
16 "bufio"
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
17 "flag"
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
18 "fmt"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
19 "io"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
20 "log"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
21 "net"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
22 "net/http"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
23 "os"
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
24 "path/filepath"
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
25 "time"
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
26 )
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
27
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
28 var (
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
29 version string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
30 server string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
31 port string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
32 server_root string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
33 logfile string
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
34 not_ac bool
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
35 wlfile string
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
36 )
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
37
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
38 func init() {
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
39 version = "1.4" // piece-image version
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
40 port = ":3910"
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
41 server_root = filepath.Dir( os.Args[0] )
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
42 logfile = filepath.Join( server_root, "rsearcher.log" )
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
43 wlfile = "rsearcher.whitelist"
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
44 }
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
45
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
46 func main() {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
47
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
48 flag.BoolVar( &not_ac, "d", false, "no access control ( for debug )" )
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
49 flag.Parse()
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
50
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
51 // setting IP-Address & Port
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
52 addrs, err := net.InterfaceAddrs()
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
53 if err != nil {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
54 log.Fatal( err )
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
55 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
56 for _, a := range addrs {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
57 if ipnet, ok := a.( *net.IPNet ); ok && !ipnet.IP.IsLoopback() {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
58 if ipnet.IP.To4() != nil {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
59 server = ipnet.IP.String() + port
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
60 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
61 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
62 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
63
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
64 // start Web-server
4
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
65 fmt.Println( "server start [", server, "] ( program version", version, ")" )
13
f5ffc34f045a manage DB.
pyon@macmini
parents: 12
diff changeset
66 http.HandleFunc( "/", handler )
f5ffc34f045a manage DB.
pyon@macmini
parents: 12
diff changeset
67 http.HandleFunc( "/upload/", upload_handler )
f5ffc34f045a manage DB.
pyon@macmini
parents: 12
diff changeset
68 http.HandleFunc( "/mngdb/", mngdb_handler )
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
69 log.Fatal( http.ListenAndServe( server, nil ) )
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
70 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
71
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
72 func handler( w http.ResponseWriter, r *http.Request ) {
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
73 if !not_ac && !is_valid_host( r.RemoteAddr ) {
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
74 http.NotFound( w, r )
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
75 return
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
76 }
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
77
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
78 file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) )
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
79 img := r.URL.Query().Get( "q" )
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
80
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
81 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file )
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
82 fmt.Println( "--", img , "--")
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
83 write_log( "[access] " + r.RemoteAddr + " " + file )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
84
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
85 f, err := os.Open( file )
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
86 if err != nil {
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
87 http.NotFound( w, r )
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
88 return
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
89 }
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
90 defer f.Close()
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
91
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
92 fi, _ := f.Stat()
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
93
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
94 w.Header().Set( "Content-Type", "rsearcher/octet-stream" )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
95 w.Header().Set( "Content-Length", fmt.Sprintf( "%d", fi.Size() ) )
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
96 io.Copy( w, f )
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
97 }
4
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
98
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
99 func upload_handler( w http.ResponseWriter, r *http.Request ) {
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
100 if !not_ac && !is_valid_host( r.RemoteAddr ) {
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
101 http.NotFound( w, r )
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
102 return
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
103 }
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
104
4
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
105 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
106 now := time.Now().Format( "20060102_150405" )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
107 file := filepath.Join( server_root, "upload", now )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
108 f, err := os.Create( file )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
109 if err != nil {
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
110 http.NotFound( w, r )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
111 return
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
112 }
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
113 n, err := io.Copy( f, r.Body )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
114 if err != nil {
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
115 http.NotFound( w, r )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
116 return
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
117 }
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
118 f.Close()
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
119 w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
120 }
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
121
12
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
122 func mngdb_handler( w http.ResponseWriter, r *http.Request ) {
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
123 if !not_ac && !is_valid_host( r.RemoteAddr ) {
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
124 http.NotFound( w, r )
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
125 return
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
126 }
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
127
12
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
128 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/mngdb" )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
129 write_log( "[access] " + r.RemoteAddr + "manage-db" )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
130 db := r.URL.Path[ len( "/mngdb/" ): ]
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
131
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
132 file := filepath.Join( server_root, "db", db )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
133
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
134 f, err := os.Create( file )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
135 if err != nil {
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
136 http.NotFound( w, r )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
137 return
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
138 }
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
139 _, err = io.Copy( f, r.Body )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
140 if err != nil {
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
141 http.NotFound( w, r )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
142 return
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
143 }
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
144 f.Close()
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
145 }
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
146
14
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
147 func is_valid_host( host string ) bool {
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
148 f, _ := os.Open( wlfile )
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
149 defer f.Close()
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
150 input := bufio.NewScanner( f )
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
151 for input.Scan() {
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
152 if input.Text() == host {
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
153 return true
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
154 }
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
155 }
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
156 return false
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
157 }
c1dc1fcee7fe print zoom.
pyon@macmini
parents: 13
diff changeset
158
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
159 func write_log( msg string ) {
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
160 f, err := os.OpenFile( logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644 )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
161 if err != nil {
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
162 log.Fatal( err )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
163 }
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
164 defer f.Close()
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
165
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
166 logger := log.New( f, "", log.LstdFlags )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
167 logger.Println( msg )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
168 }
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
169