/
main.go
100 lines (83 loc) · 2.65 KB
/
main.go
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
package main
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"github.com/PacktPublishing/Echo-Essentials/chapter4/handlers"
"github.com/PacktPublishing/Echo-Essentials/chapter4/middlewares"
"github.com/PacktPublishing/Echo-Essentials/chapter4/models"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
"github.com/labstack/gommon/log"
)
func main() {
// create a new echo instance
e := echo.New()
e.Logger.SetLevel(log.DEBUG)
e.Pre(middlewares.RequestIDMiddleware)
e.Use(middleware.Logger()) // logger middleware will “wrap” recovery
e.Use(middleware.Recover()) // as it is enumerated before in the Use calls
e.GET("/", HandlerFunction, Middleware1, Middleware2, Middleware3)
// RouteHandler = Middleware1(Middleware2(Middleware3(HandlerFunction)
// Signing Key for our auth middleware
var signingKey = []byte("superdupersecret!")
e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
c.Set(models.SigningContextKey, signingKey)
return next(c)
}
})
// add database to context
db, err := sql.Open("sqlite3", "./service.db")
if err != nil {
log.Fatalf("error opening database: %v\n", err)
}
e.Use(func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c echo.Context) error {
c.Set(models.DBContextKey, db)
return next(c)
}
})
// in order to serve static assets
e.Static("/static", "static")
// reminder handler group
reminderGroup := e.Group("/reminder")
reminderGroup.Use(middleware.JWT(signingKey))
reminderGroup.POST("", handlers.CreateReminder)
// Route / to handler function
e.GET("/health-check", handlers.HealthCheck)
// Authentication routes
e.POST("/login", handlers.Login)
e.POST("/logout", handlers.Logout)
// V1 Routes
v1 := e.Group("/v1")
// V1 Authentication routes
v1.POST("/login", handlers.Login)
v1.POST("/logout", handlers.Logout)
// V1 Reminder Routes
v1Reminders := v1.Group("/reminder", middleware.JWT(signingKey))
v1Reminders.Use(middleware.JWT(signingKey))
v1Reminders.POST("", handlers.CreateReminder)
v1Reminders.GET("/:id", handlers.GetReminder)
// /v1/reminder/:id
// start the server, and log if it fails
e.Logger.Fatal(e.Start(":8080"))
}
func HandlerFunction(ctx echo.Context) error {
ctx.Logger().Info("in handler function")
return nil
}
func middlewareFunc(i int) echo.MiddlewareFunc {
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(ctx echo.Context) error {
ctx.Logger().Infof("middleware #%d start!", i)
next(ctx)
ctx.Logger().Infof("middleware #%d end!", i)
return nil
}
}
}
var (
Middleware1 = middlewareFunc(1)
Middleware2 = middlewareFunc(2)
Middleware3 = middlewareFunc(3)
)