53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"github.com/labstack/echo"
 | |
| 	"github.com/labstack/echo/cookbook/twitter/handler"
 | |
| 	"github.com/labstack/echo/middleware"
 | |
| 	"github.com/labstack/gommon/log"
 | |
| 	mgo "gopkg.in/mgo.v2"
 | |
| )
 | |
| 
 | |
| func main() {
 | |
| 	e := echo.New()
 | |
| 	e.Logger.SetLevel(log.ERROR)
 | |
| 	e.Use(middleware.Logger())
 | |
| 	e.Use(middleware.JWTWithConfig(middleware.JWTConfig{
 | |
| 		SigningKey: []byte(handler.Key),
 | |
| 		Skipper: func(c echo.Context) bool {
 | |
| 			// Skip authentication for and signup login requests
 | |
| 			if c.Path() == "/login" || c.Path() == "/signup" {
 | |
| 				return true
 | |
| 			}
 | |
| 			return false
 | |
| 		},
 | |
| 	}))
 | |
| 
 | |
| 	// Database connection
 | |
| 	db, err := mgo.Dial("localhost")
 | |
| 	if err != nil {
 | |
| 		e.Logger.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	// Create indices
 | |
| 	if err = db.Copy().DB("twitter").C("users").EnsureIndex(mgo.Index{
 | |
| 		Key:    []string{"email"},
 | |
| 		Unique: true,
 | |
| 	}); err != nil {
 | |
| 		log.Fatal(err)
 | |
| 	}
 | |
| 
 | |
| 	// Initialize handler
 | |
| 	h := &handler.Handler{DB: db}
 | |
| 
 | |
| 	// Routes
 | |
| 	e.POST("/signup", h.Signup)
 | |
| 	e.POST("/login", h.Login)
 | |
| 	e.POST("/follow/:id", h.Follow)
 | |
| 	e.POST("/posts", h.CreatePost)
 | |
| 	e.GET("/feed", h.FetchPost)
 | |
| 
 | |
| 	// Start server
 | |
| 	e.Logger.Fatal(e.Start(":1323"))
 | |
| }
 | 
