summaryrefslogtreecommitdiff
path: root/src/ninjacloud.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/ninjacloud.go')
-rw-r--r--src/ninjacloud.go130
1 files changed, 117 insertions, 13 deletions
diff --git a/src/ninjacloud.go b/src/ninjacloud.go
index 2d3c2f0..57e939a 100644
--- a/src/ninjacloud.go
+++ b/src/ninjacloud.go
@@ -1,12 +1,16 @@
1package main 1package main
2 2
3import ( 3import (
4 "encoding/json"
5 //"errors"
4 "flag" 6 "flag"
7 "io/ioutil"
5 "log" 8 "log"
6 "net/http" 9 "net/http"
7 "path" 10 "os"
8 //"io/ioutil" 11 //"path"
9 //"os" 12 "io"
13 "path/filepath"
10) 14)
11 15
12const APP_NAME = "Ninja Go Local Cloud" 16const APP_NAME = "Ninja Go Local Cloud"
@@ -29,32 +33,121 @@ const statusPathLen = len(statusPath)
29 33
30//////// FILESYSTEM 34//////// FILESYSTEM
31 35
36func exist(path string) bool {
37 _, err := os.Stat(path)
38 if !os.IsNotExist(err) {
39 return true
40 }
41 return false
42}
43
32//// Files 44//// Files
33 45
34func writeFile() { 46func writeFile(path string, content []byte, overwrite bool) (err error) {
47 if !overwrite {
48 if exist(path) {
49 err = os.ErrExist
50 return
51 }
52 }
53 err = ioutil.WriteFile(path, content, 0600)
54 return
55}
56
57func readFile(path string) (content []byte, err error) {
58 content, err = ioutil.ReadFile(path)
59 return
35} 60}
36 61
37func readFile() { 62func removeFile(path string) (err error) {
63 err = os.Remove(path)
64 return
38} 65}
39 66
40func removeFile() { 67func moveFile(source string, dest string) (err error) {
68 err = os.Rename(source, dest)
69 return
41} 70}
42 71
43func copyFile() { 72func copyFile(source string, dest string) (err error) {
73 // from https://gist.github.com/2876519
74 sf, err := os.Open(source)
75 if err != nil {
76 return err
77 }
78 defer sf.Close()
79 df, err := os.Create(dest)
80 if err != nil {
81 return err
82 }
83 defer df.Close()
84 _, err = io.Copy(df, sf)
85 if err == nil {
86 si, err := os.Stat(source)
87 if err != nil {
88 err = os.Chmod(dest, si.Mode())
89 }
90
91 }
92 return
44} 93}
45 94
46//// Dirs 95//// Dirs
47 96
48func createDir() { 97func createDir(path string) (err error) {
98 err = os.MkdirAll(path, 0600)
99 return
49} 100}
50 101
51func removeDir() { 102func removeDir(path string) (err error) {
103 err = os.RemoveAll(path)
104 return
52} 105}
53 106
54func listDir() { 107func listDir(path string) (list []os.FileInfo, err error) {
108 list, err = ioutil.ReadDir(path)
109 return
55} 110}
56 111
57func copyDir() { 112func moveDir(source string, dest string) (err error) {
113 err = os.Rename(source, dest)
114 return
115}
116
117func copyDir(source string, dest string) (err error) {
118 // from https://gist.github.com/2876519
119 fi, err := os.Stat(source)
120 if err != nil {
121 return
122 }
123 if !fi.IsDir() {
124 return os.ErrInvalid
125 }
126 _, err = os.Open(dest)
127 if !os.IsNotExist(err) {
128 return os.ErrExist
129 }
130 err = os.MkdirAll(dest, fi.Mode())
131 if err != nil {
132 return
133 }
134 entries, err := ioutil.ReadDir(source)
135 for _, entry := range entries {
136 sfp := source + "/" + entry.Name()
137 dfp := dest + "/" + entry.Name()
138 if entry.IsDir() {
139 err = copyDir(sfp, dfp)
140 if err != nil {
141 return
142 }
143 } else {
144 err = copyFile(sfp, dfp)
145 if err != nil {
146 return
147 }
148 }
149 }
150 return
58} 151}
59 152
60//////// REQUEST HANDLERS 153//////// REQUEST HANDLERS
@@ -63,7 +156,7 @@ func copyDir() {
63 156
64func fileHandler(w http.ResponseWriter, r *http.Request) { 157func fileHandler(w http.ResponseWriter, r *http.Request) {
65 p := r.URL.Path[filePathLen:] 158 p := r.URL.Path[filePathLen:]
66 path.Clean(p) 159 filepath.Clean(p)
67 160
68 switch r.Method { 161 switch r.Method {
69 case "POST": 162 case "POST":
@@ -86,7 +179,7 @@ func fileHandler(w http.ResponseWriter, r *http.Request) {
86 179
87func dirHandler(w http.ResponseWriter, r *http.Request) { 180func dirHandler(w http.ResponseWriter, r *http.Request) {
88 p := r.URL.Path[dirPathLen:] 181 p := r.URL.Path[dirPathLen:]
89 path.Clean(p) 182 filepath.Clean(p)
90 183
91 switch r.Method { 184 switch r.Method {
92 case "POST": 185 case "POST":
@@ -111,6 +204,17 @@ func getDataHandler(w http.ResponseWriter, r *http.Request) {
111 204
112// Get the cloud status JSON 205// Get the cloud status JSON
113func getStatusHandler(w http.ResponseWriter, r *http.Request) { 206func getStatusHandler(w http.ResponseWriter, r *http.Request) {
207 cloudStatus := map[string]string{
208 "name": APP_NAME,
209 "version": APP_VERSION,
210 "server-root": rootFlag,
211 "status": "running",
212 }
213 j, err := json.Marshal(cloudStatus)
214 if err != nil {
215 log.Println(err)
216 }
217 w.Write(j)
114} 218}
115 219
116//////// INIT and MAIN 220//////// INIT and MAIN