예제 #1
0
파일: handler_auth.go 프로젝트: javinc/puto
// LoginHandler user login
func LoginHandler(c *gin.Context) {
	type Login struct {
		Email    string `json:"email" binding:"required"`
		Password string `json:"password" binding:"required"`
	}

	var payload Login

	err := c.BindJSON(&payload)
	if err != nil {
		x.Panic("USER_JSON_BIND_ERROR", err.Error())

		return
	}

	auth, err := service.Login(payload.Email, payload.Password)
	if err != nil {
		x.Error("USER_EMAIL_LOGIN_ERROR", err.Error())

		return
	}

	if err == nil {
		x.Output(auth)

		return
	}

	x.Error("INVALID_AUTH", "unauthorize user")
}
예제 #2
0
// UploadHandler file
func UploadHandler(c *gin.Context) {
	os.Mkdir(uploadPath, 0777)

	file, header, err := c.Request.FormFile(uploadField)
	if err != nil {
		x.Error("FILE_UPLOAD_ERROR", err.Error())

		return
	}

	ext := getExtension(header.Filename)
	name := x.GenerateHash() + "." + ext
	filePath := uploadPath + name
	out, err := os.Create(filePath)
	if err != nil {
		x.Error("FILE_UPLOAD_CREATE_ERROR", err.Error())

		return
	}

	defer out.Close()
	_, err = io.Copy(out, file)
	if err != nil {
		x.Error("FILE_UPLOAD_COPY_ERROR", err.Error())

		return
	}

	size, err := getFileSize(file)
	if err != nil {
		x.Error("FILE_UPLOAD_SIZE_ERROR", err.Error())

		return
	}

	// check mime type
	mime := header.Header.Get("Content-Type")
	if mime == "" {
		x.Error("FILE_UPLOAD_MIME_ERROR", "cant get file content-type")

		return
	}

	// save meta on database
	payload := Object{
		ID:   name,
		Ext:  ext,
		Size: size,
		Mime: mime,
	}

	service.Create(payload)

	x.Output(payload)
}
예제 #3
0
파일: handler_auth.go 프로젝트: javinc/puto
// MeHandler check authentication
func MeHandler(c *gin.Context) {
	user, err := service.Get(x.GetAuthUser().ID)
	if err != nil {
		x.Error("INVALID_USER", "no user found with this token")

		return
	}

	x.Output(user)

	return
}
예제 #4
0
파일: handler_auth.go 프로젝트: javinc/puto
// RegisterHandler user register
func RegisterHandler(c *gin.Context) {
	var payload Object

	err := c.BindJSON(&payload)
	if err != nil {
		x.Panic("JSON_BIND_ERROR", err.Error())

		return
	}

	user, err := service.Register(payload)
	if err != nil {
		x.Error("USER_EMAIL_REGISTER_ERROR", err.Error())

		return
	}

	// success
	x.Output(user)
}
예제 #5
0
파일: handler.go 프로젝트: javinc/puto
// Handler test
func Handler(c *gin.Context) {
	id := c.Param("id")
	switch c.Request.Method {
	case x.GET:
		// list
		if id == "" {
			filter := Object{
				Title:       c.Query("filter.title"),
				Description: c.Query("filter.description"),
			}

			option := Option{
				Slice:  c.Query("slice"),
				Order:  c.Query("order"),
				Filter: filter,
			}

			d, err := service.Find(option)
			if err != nil {
				x.Error("GET_RESOURCE_"+strings.ToUpper(resourceName), err.Error())
			}

			x.Output(d)

			return
		}

		// detail
		d, err := service.Get(id)
		if err != nil {
			x.Error("GET_RESOURCE_"+strings.ToUpper(resourceName), err.Error())

			return
		}

		x.Output(d)

		return
	case x.POST:
		var payload Object
		err := c.BindJSON(&payload)
		if err != nil {
			x.Panic("REQUIRED_FIELDS", "field is required")

			return
		}

		d, err := service.Create(payload)
		if err != nil {
			x.Error("POST_RESOURCE_"+strings.ToUpper(resourceName), err.Error())
		}

		x.Output(d)

		return
	case x.PATCH:
		if id == "" {
			x.Error("RESOURCE_ID_REQUIRED", "resource id is missing")

			return
		}

		var payload Object
		err := c.BindJSON(&payload)
		if err != nil {
			x.Panic("REQUIRED_FIELDS", "field is required")

			return
		}

		d, err := service.Update(payload, id)
		if err != nil {
			x.Error("PUT_RESOURCE_"+strings.ToUpper(resourceName), err.Error())

			return
		}

		x.Output(d)

		return
	case x.DELETE:
		if id == "" {
			x.Error("RESOURCE_ID_REQUIRED", "resource id is missing")

			return
		}

		d, err := service.Remove(id)
		if err != nil {
			x.Error("DELETE_RESOURCE_"+strings.ToUpper(resourceName), err.Error())

			return
		}

		x.Output(d)

		return
	}

	x.MethodNotAllowedError()
}