github.com/iron-io/functions@v0.0.0-20180820112432-d59d7d1c40b2/examples/blog/function.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "os" 7 8 "github.com/iron-io/functions/examples/blog/database" 9 "github.com/iron-io/functions/examples/blog/models" 10 "github.com/iron-io/functions/examples/blog/routes" 11 ) 12 13 var noAuth = map[string]interface{}{} 14 15 func main() { 16 request := fmt.Sprintf("%s %s", os.Getenv("METHOD"), os.Getenv("ROUTE")) 17 18 dbURI := os.Getenv("DB") 19 if dbURI == "" { 20 dbURI = "127.0.0.1/blog" 21 } 22 db := database.New(dbURI) 23 24 if created := createUser(db); created { 25 return 26 } 27 28 // PUBLIC REQUESTS 29 switch request { 30 case "GET /posts": 31 route.HandlePostList(db, noAuth) 32 return 33 case "GET /posts/:id": 34 route.HandlePostRead(db, noAuth) 35 return 36 } 37 38 // GETTING TOKEN 39 if os.Getenv("ROUTE") == "/token" { 40 route.HandleToken(db) 41 return 42 } 43 44 // AUTHENTICATION 45 auth, valid := route.Authentication() 46 if !valid { 47 route.SendError("Invalid authentication") 48 return 49 } 50 51 // AUTHENTICATED ONLY REQUESTS 52 if request == "POST /posts" { 53 route.HandlePostCreate(db, auth) 54 return 55 } 56 57 route.SendError("Not found") 58 } 59 60 func createUser(db *database.Database) bool { 61 env := os.Getenv("NEWUSER") 62 63 if env == "" { 64 return false 65 } 66 67 var user *models.User 68 err := json.Unmarshal([]byte(env), &user) 69 if err != nil { 70 fmt.Println(err) 71 return true 72 } 73 74 if user.Username == "" || user.NewPassword == "" { 75 fmt.Println("missing username or password") 76 return true 77 } 78 79 user.Password = []byte(user.NewPassword) 80 user.NewPassword = "" 81 82 user, err = db.SaveUser(user) 83 if err != nil { 84 fmt.Println("couldn't create user") 85 } else { 86 fmt.Println("user created") 87 } 88 89 return true 90 }