0
|
1 /*
|
|
2 server.go : server-program.
|
12
|
3 Version : 1.3
|
13
|
4 Last Change: 2018-11-14 水 17:03:30.
|
0
|
5
|
|
6 install to: server_root/
|
|
7
|
|
8 server_root/server
|
|
9 + db/
|
|
10 + release/
|
|
11 + images/
|
|
12 */
|
|
13 package main
|
|
14
|
|
15 import(
|
|
16 "path/filepath"
|
|
17 "fmt"
|
|
18 "io"
|
|
19 "log"
|
|
20 "net"
|
|
21 "net/http"
|
|
22 "os"
|
3
|
23 "time"
|
0
|
24 )
|
|
25
|
8
|
26 var (
|
|
27 version string
|
|
28 server string
|
|
29 port string
|
|
30 server_root string
|
|
31 logfile string
|
|
32 )
|
3
|
33
|
|
34 func init() {
|
12
|
35 version = "1.3" // manage-db version
|
3
|
36 port = ":3910"
|
|
37 server_root = filepath.Dir( os.Args[0] )
|
8
|
38 logfile = filepath.Join( server_root, "rsearcher.log" )
|
3
|
39 }
|
|
40
|
0
|
41 func main() {
|
|
42
|
3
|
43 // setting IP-Address & Port
|
0
|
44 addrs, err := net.InterfaceAddrs()
|
|
45 if err != nil {
|
|
46 log.Fatal( err )
|
|
47 }
|
|
48 for _, a := range addrs {
|
|
49 if ipnet, ok := a.( *net.IPNet ); ok && !ipnet.IP.IsLoopback() {
|
|
50 if ipnet.IP.To4() != nil {
|
|
51 server = ipnet.IP.String() + port
|
|
52 }
|
|
53 }
|
|
54 }
|
|
55
|
3
|
56 // start Web-server
|
4
|
57 fmt.Println( "server start [", server, "] ( program version", version, ")" )
|
13
|
58 http.HandleFunc( "/", handler )
|
|
59 http.HandleFunc( "/upload/", upload_handler )
|
|
60 http.HandleFunc( "/mngdb/", mngdb_handler )
|
0
|
61 log.Fatal( http.ListenAndServe( server, nil ) )
|
|
62 }
|
|
63
|
3
|
64 func handler( w http.ResponseWriter, r *http.Request ) {
|
|
65 file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) )
|
8
|
66
|
3
|
67 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file )
|
8
|
68 write_log( "[access] " + r.RemoteAddr + " " + file )
|
|
69
|
3
|
70 f, err := os.Open( file )
|
|
71 if err != nil {
|
|
72 http.NotFound( w, r )
|
|
73 return
|
|
74 }
|
|
75 defer f.Close()
|
8
|
76
|
|
77 fi, _ := f.Stat()
|
|
78
|
|
79 w.Header().Set( "Content-Type", "rsearcher/octet-stream" )
|
|
80 w.Header().Set( "Content-Length", fmt.Sprintf( "%d", fi.Size() ) )
|
3
|
81 io.Copy( w, f )
|
|
82 }
|
4
|
83
|
|
84 func upload_handler( w http.ResponseWriter, r *http.Request ) {
|
|
85 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" )
|
|
86 now := time.Now().Format( "20060102_150405" )
|
|
87 file := filepath.Join( server_root, "upload", now )
|
|
88 f, err := os.Create( file )
|
|
89 if err != nil {
|
|
90 http.NotFound( w, r )
|
|
91 return
|
|
92 }
|
|
93 n, err := io.Copy( f, r.Body )
|
|
94 if err != nil {
|
|
95 http.NotFound( w, r )
|
|
96 return
|
|
97 }
|
|
98 f.Close()
|
|
99 w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) )
|
|
100 }
|
|
101
|
12
|
102 func mngdb_handler( w http.ResponseWriter, r *http.Request ) {
|
|
103 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/mngdb" )
|
|
104 write_log( "[access] " + r.RemoteAddr + "manage-db" )
|
|
105 db := r.URL.Path[ len( "/mngdb/" ): ]
|
|
106
|
|
107 file := filepath.Join( server_root, "db", db )
|
|
108
|
|
109 f, err := os.Create( file )
|
|
110 if err != nil {
|
|
111 http.NotFound( w, r )
|
|
112 return
|
|
113 }
|
|
114 _, err = io.Copy( f, r.Body )
|
|
115 if err != nil {
|
|
116 http.NotFound( w, r )
|
|
117 return
|
|
118 }
|
|
119 f.Close()
|
|
120 }
|
|
121
|
8
|
122 func write_log( msg string ) {
|
|
123 f, err := os.OpenFile( logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644 )
|
|
124 if err != nil {
|
|
125 log.Fatal( err )
|
|
126 }
|
|
127 defer f.Close()
|
|
128
|
|
129 logger := log.New( f, "", log.LstdFlags )
|
|
130 logger.Println( msg )
|
|
131 }
|
|
132
|