router

package
v0.0.0-...-8968538 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 17, 2016 License: MIT Imports: 13 Imported by: 0

Documentation

Overview

Package router contains endpoint information for the service.

sn - https://github.com/sn

Package router contains endpoint information for the service.

sn - https://github.com/sn

Index

Constants

This section is empty.

Variables

View Source
var Auth = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	u := user.User{}
	body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576))
	if err != nil {
		log.Fatal(err)
	}
	if err := r.Body.Close(); err != nil {
		log.Fatal(err)
	}

	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	if err := json.Unmarshal(body, &u); err != nil {
		w.WriteHeader(http.StatusBadRequest)
		if err := json.NewEncoder(w).Encode(err); err != nil {
			panic(err)
		}
	}
	refUser := user.FindByID(u.ID)
	if len(refUser.ID) > 0 {
		if user.CheckPassword(refUser, u.Password) {
			w.WriteHeader(http.StatusOK)
			s := session.Create(refUser.ID)
			fmt.Fprintf(w, "%s", helpers.GenerateSha1Hash(string(s.ID)))
			return
		}
		w.WriteHeader(http.StatusUnauthorized)
		return
	}
	w.WriteHeader(http.StatusNotFound)
})

Auth handles POST /auth

View Source
var Index = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	if auth := r.Header["Authorization"]; auth != nil {
		if s := session.Find(auth[0]); s.ID != "" {
			if time.Now().Before(s.Expires) {
				u := user.FindByID(s.UserID)
				fmt.Fprintf(w, "Welcome, %s!\n", u.Username)
				err := session.Bump(s.ID)
				if err != nil {
					panic(err)
				}
				return
			}
			session.Expire(s.ID)
		}
	}
	fmt.Fprint(w, "Welcome!\n")
})

Index handles GET /index

View Source
var UserCreate = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	var input struct {
		Username string `json:"username"`
		Password string `json:"password"`
		Address  string `json:"email"`
	}
	body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576))
	if err != nil {
		log.Fatal(err)
	}
	if err := r.Body.Close(); err != nil {
		log.Fatal(err)
	}
	if err := json.Unmarshal(body, &input); err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, "Bad Request")
		return
	}

	u := user.User{}
	u.Username = input.Username
	u.Password = input.Password
	u.Address, err = mail.ParseAddress(input.Address)
	if err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, "Unable to parse address.")
		return
	}
	if err := user.Validate(u); err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, err)
		return
	}
	if findUser := user.FindByUsername(u.Username); len(findUser.ID) > 0 && findUser.ID != u.ID {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusConflict)
		fmt.Fprint(w, "Username is taken.")
		return
	}
	if findUser := user.FindByAddress(u.Address); len(findUser.ID) > 0 && findUser.ID != u.ID {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusConflict)
		fmt.Fprint(w, "Address is taken.")
		return
	}

	if err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, "Email is invalid.")
		return
	}

	u = user.Create(u)
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusCreated)
	if err := json.NewEncoder(w).Encode(u); err != nil {
		fmt.Fprint(w, err)
		log.Fatal(err)
	}
})

UserCreate handles POST /users/:userID

View Source
var UserDelete = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	userID := types.UUID(vars["userID"])

	if err := user.Delete(userID); err == nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusNoContent)
		fmt.Fprint(w, err)
		return
	}

	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusNotFound)
	fmt.Fprint(w, "Not found")
})

UserDelete handles DELETE /users/:userID

View Source
var UserIndex = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusOK)
	if err := json.NewEncoder(w).Encode(user.GetAll()); err != nil {
		log.Fatal(err)
	}
})

UserIndex handles GET /users

View Source
var UserPatch = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	var input struct {
		Username string `json:"username"`
		Password string `json:"password"`
		Address  string `json:"email"`
	}

	vars := mux.Vars(r)
	userID := types.UUID(vars["userID"])

	body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576))
	if err != nil {
		log.Fatal(err)
	}
	if err := r.Body.Close(); err != nil {
		log.Fatal(err)
	}
	if err := json.Unmarshal(body, &input); err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, "Bad Request")
		return
	}

	u := user.User{}
	u.ID = userID
	u.Username = input.Username
	u.Password = input.Password
	u.Address, err = mail.ParseAddress(input.Address)
	if err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, "Unable to parse address.")
		return
	}
	if err := user.Validate(u); err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, err)
		return
	}
	if findUser := user.FindByID(u.ID); len(findUser.ID) == 0 {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusNotFound)
		fmt.Fprint(w, "Not found")
		return
	}
	if findUser := user.FindByUsername(u.Username); len(findUser.ID) > 0 && findUser.ID != u.ID {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusConflict)
		fmt.Fprint(w, "Username is taken.")
		return
	}
	if findUser := user.FindByAddress(u.Address); len(findUser.ID) > 0 && findUser.ID != u.ID {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusConflict)
		fmt.Fprint(w, "Address is taken.")
		return
	}

	u = user.Patch(u)
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusOK)
	if err := json.NewEncoder(w).Encode(u); err != nil {
		log.Fatal(err)
	}
})

UserPatch handles PATCH /users/:userID

View Source
var UserShow = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	vars := mux.Vars(r)
	userID := types.UUID(vars["userID"])
	user := user.FindByID(userID)
	if len(user.ID) > 0 {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusOK)
		if err := json.NewEncoder(w).Encode(user); err != nil {
			log.Fatal(err)
		}
		return
	}

	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusNotFound)
	fmt.Fprint(w, "Not Found")
})

UserShow handles GET /users/:userID

View Source
var UserUpdate = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	var input struct {
		Username string `json:"username"`
		Password string `json:"password"`
		Address  string `json:"email"`
	}

	vars := mux.Vars(r)
	userID := types.UUID(vars["userID"])

	body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576))
	if err != nil {
		log.Fatal(err)
	}
	if err := r.Body.Close(); err != nil {
		log.Fatal(err)
	}
	if err := json.Unmarshal(body, &input); err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		if err := json.NewEncoder(w).Encode(err); err != nil {
			log.Fatal(err)
		}
	}

	u := user.User{}
	u.ID = userID
	u.Username = input.Username
	u.Password = input.Password
	u.Address, err = mail.ParseAddress(input.Address)
	if err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, "Unable to parse address.")
		return
	}

	if err := user.Validate(u); err != nil {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusBadRequest)
		fmt.Fprint(w, err)
		return
	}
	if findUser := user.FindByID(u.ID); len(findUser.ID) == 0 {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusNotFound)
		fmt.Fprint(w, "Not found")
		return
	}
	if findUser := user.FindByUsername(u.Username); len(findUser.ID) > 0 && findUser.ID != u.ID {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusConflict)
		fmt.Fprint(w, "Username is taken.")
		return
	}
	if findUser := user.FindByAddress(u.Address); len(findUser.ID) > 0 && findUser.ID != u.ID {
		w.Header().Set("Content-Type", "application/json; charset=UTF-8")
		w.WriteHeader(http.StatusConflict)
		fmt.Fprint(w, "Address is taken.")
		return
	}

	u = user.Update(u)
	w.Header().Set("Content-Type", "application/json; charset=UTF-8")
	w.WriteHeader(http.StatusOK)
	if err := json.NewEncoder(w).Encode(u); err != nil {
		log.Fatal(err)
	}
})

UserUpdate handles PUT /users/:userID

Functions

func NewRouter

func NewRouter() *mux.Router

NewRouter sets up the URL routes

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL