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  }