|
1 | 1 | package main |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "io" |
4 | 5 | "net/http" |
5 | 6 | "os" |
6 | 7 |
|
7 | 8 | "github.com/opensaucerer/barf" |
8 | 9 | ) |
9 | 10 |
|
10 | 11 | func main() { |
| 12 | + |
| 13 | + type Env struct { |
| 14 | + // Port for the server to listen on |
| 15 | + Port string `barfenv:"key=PORT;required=true"` |
| 16 | + } |
| 17 | + |
| 18 | + env := new(Env) // global environment variable |
| 19 | + |
| 20 | + // load environment variables |
| 21 | + if err := barf.Env(env, "example/.env"); err != nil { |
| 22 | + barf.Logger().Error(err.Error()) |
| 23 | + os.Exit(1) |
| 24 | + } |
| 25 | + |
11 | 26 | // create server |
12 | 27 | allow := true |
| 28 | + disallow := false |
13 | 29 | if err := barf.Stark(barf.Augment{ |
14 | | - Port: "5000", |
| 30 | + Port: env.Port, |
15 | 31 | Logging: &allow, // enable request logging |
16 | | - Recovery: &allow, // enable panic recovery so barf returns a 500 error instead of crashing |
| 32 | + Recovery: &disallow, |
| 33 | + CORS: &barf.CORS{ |
| 34 | + AllowedOrigins: []string{"https://*.google.com"}, |
| 35 | + MaxAge: 3600, |
| 36 | + AllowedMethods: []string{ |
| 37 | + http.MethodGet, |
| 38 | + }, |
| 39 | + AllowedOriginFunc: func(origin string) bool { |
| 40 | + return origin == "https://www.google.com" |
| 41 | + }, |
| 42 | + }, |
17 | 43 | }); err != nil { |
18 | 44 | barf.Logger().Error(err.Error()) |
19 | 45 | os.Exit(1) |
20 | 46 | } |
21 | 47 |
|
22 | | - barf.Get("/", func(w http.ResponseWriter, r *http.Request) { |
23 | | - barf.Response(w).Status(http.StatusOK).JSON(barf.Res{ |
24 | | - Status: true, |
25 | | - Data: nil, |
26 | | - Message: "Hello World", |
27 | | - }) |
28 | | - }) |
29 | | - |
30 | 48 | // create a subrouter (retroframe) |
31 | | - s := barf.RetroFrame("/api/v1") |
| 49 | + s := barf.RetroFrame("/api").RetroFrame("/v1") |
32 | 50 | s.Get("/about", func(w http.ResponseWriter, r *http.Request) { |
| 51 | + |
| 52 | + message := "About" |
| 53 | + |
| 54 | + // parsing form-data |
| 55 | + body, err := barf.Request(r).Form().Body().JSON() |
| 56 | + if err != nil { |
| 57 | + message = err.Error() |
| 58 | + } |
| 59 | + |
| 60 | + head := barf.Request(r).Form().File().Get("file") |
| 61 | + file, _ := head.Open() |
| 62 | + defer file.Close() |
| 63 | + |
| 64 | + // save file |
| 65 | + f, err := os.OpenFile(head.Filename, os.O_WRONLY|os.O_CREATE, 0666) |
| 66 | + if err != nil { |
| 67 | + message = err.Error() |
| 68 | + } |
| 69 | + defer f.Close() |
| 70 | + io.Copy(f, file) |
| 71 | + |
33 | 72 | barf.Response(w).Status(http.StatusOK).JSON(barf.Res{ |
34 | 73 | Status: true, |
35 | | - Data: nil, |
36 | | - Message: "About", |
| 74 | + Data: body, |
| 75 | + Message: message, |
37 | 76 | }) |
38 | 77 | }) |
39 | 78 |
|
40 | | - // start barf server |
| 79 | + // start server - create & start server |
41 | 80 | if err := barf.Beck(); err != nil { |
42 | | - // barf exposes a logger instance |
43 | 81 | barf.Logger().Error(err.Error()) |
44 | 82 | os.Exit(1) |
45 | 83 | } |
|
0 commit comments