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