-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi.go
More file actions
119 lines (95 loc) · 3.09 KB
/
api.go
File metadata and controls
119 lines (95 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package blooper
import (
"context"
"flag"
"fmt"
"log"
"net/http"
"os"
"time"
"github.com/BlooperDB/API/api"
"github.com/BlooperDB/API/db"
"github.com/BlooperDB/API/nodes"
"github.com/BlooperDB/API/storage"
"github.com/BlooperDB/API/utils"
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"github.com/graphql-go/handler"
"github.com/jinzhu/gorm"
"github.com/minio/minio-go"
"github.com/wuman/firebase-server-sdk-go"
)
func Initialize() {
var listenPort int
var postgresHost string
var minioHost string
flag.IntVar(&listenPort, "listen-port", 8080, "sets the port to run on")
flag.StringVar(&postgresHost, "postgres-host", "postgres", "sets the postgres host to connect to")
flag.StringVar(&minioHost, "minio-host", "minio", "sets the minio host to connect to")
flag.Parse()
firebase.InitializeApp(&firebase.Options{
ServiceAccountPath: "src/github.com/BlooperDB/API/blooper-firebase-adminsdk.json",
})
utils.Initialize()
InitializeDB(postgresHost)
InitializeStorage(minioHost)
nodes.InitializeGraphs()
h := handler.New(&handler.Config{
Schema: nodes.GetSchema(),
Pretty: true,
GraphiQL: true,
})
router := mux.NewRouter()
router.NotFoundHandler = api.LoggerHandler(api.NotFoundHandler())
v1 := api.RouteHandler(router, "/v1")
nodes.RegisterUserRoutes(v1)
nodes.RegisterBlueprintRoutes(v1)
nodes.RegisterCommentRoutes(v1)
nodes.RegisterRevisionRoutes(v1)
nodes.RegisterTagRoutes(v1)
router.HandleFunc("/v2", func(w http.ResponseWriter, r *http.Request) {
ctx := context.WithValue(r.Context(), "blooper-token", r.Header.Get("blooper-token"))
h.ContextHandler(ctx, w, r)
})
CORSHandler := handlers.CORS(
handlers.AllowedOrigins([]string{"*"}),
handlers.AllowedHeaders([]string{"content-type", "blooper-token"}),
handlers.AllowedMethods([]string{"GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"}),
)
var finalRouter http.Handler = router
finalRouter = CORSHandler(finalRouter)
finalRouter = api.LoggerHandler(finalRouter)
finalRouter = handlers.CompressHandler(finalRouter)
finalRouter = handlers.ProxyHeaders(finalRouter)
fmt.Printf("Listening on port %d\n", listenPort)
log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", listenPort), finalRouter))
}
func InitializeDB(postgresHost string) {
var (
db_user = os.Getenv("POSTGRES_USER")
db_name = os.Getenv("POSTGRES_DB")
db_pass = os.Getenv("POSTGRES_PASSWORD")
)
orm_cmd := "host=" + postgresHost + " user=" + db_user + " dbname=" + db_name + " sslmode=disable password=" + db_pass + ""
connection, err := gorm.Open("postgres", orm_cmd)
if err != nil {
time.Sleep(5 * time.Second)
connection, err = gorm.Open("postgres", orm_cmd)
if err != nil {
panic("failed to connect database")
}
}
db.Initialize(connection)
}
func InitializeStorage(minioHost string) {
var (
minio_access_key = os.Getenv("MINIO_ACCESS_KEY")
minio_secret_key = os.Getenv("MINIO_SECRET_KEY")
)
minioClient, err := minio.New(minioHost+":9000", minio_access_key, minio_secret_key, false)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
storage.Initialize(minioClient, os.Getenv("STORAGE_BASE_URL"))
}