Generate avatars for users
This commit is contained in:
parent
c2ce947f97
commit
5317daa6b8
51
api/users.go
51
api/users.go
|
@ -37,9 +37,11 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/nullrocks/identicon"
|
||||
|
||||
"git.happydns.org/happyDomain/actions"
|
||||
"git.happydns.org/happyDomain/config"
|
||||
|
@ -70,6 +72,7 @@ func declareUsersAuthRoutes(opts *config.Options, router *gin.RouterGroup) {
|
|||
apiUserRoutes.Use(userHandler)
|
||||
|
||||
apiUserRoutes.GET("", getUser)
|
||||
apiUserRoutes.GET("/avatar.png", getUserAvatar)
|
||||
|
||||
apiSameUserRoutes := router.Group("/users/:uid")
|
||||
apiSameUserRoutes.Use(userHandler)
|
||||
|
@ -273,6 +276,54 @@ func getUser(c *gin.Context) {
|
|||
}
|
||||
}
|
||||
|
||||
// getUserAvatar returns a unique avatar for the user.
|
||||
//
|
||||
// @Summary Show user's avatar.
|
||||
// @Schemes
|
||||
// @Description Returns a unique avatar for the user.
|
||||
// @Tags users
|
||||
// @Accept json
|
||||
// @Produce png
|
||||
// @Param size query int false "Image output desired size"
|
||||
// @Success 200 {file} png
|
||||
// @Failure 500 {object} happydns.Error
|
||||
// @Router /users/{userId}/avatar.png [get]
|
||||
func getUserAvatar(c *gin.Context) {
|
||||
user := c.MustGet("user").(*happydns.User)
|
||||
|
||||
sizequery := c.DefaultQuery("size", "300")
|
||||
size, err := strconv.ParseInt(sizequery, 10, 32)
|
||||
if err != nil {
|
||||
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": fmt.Sprintf("Invalid size asked: %s", err.Error())})
|
||||
return
|
||||
} else if size > 2048 {
|
||||
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": "Size too large."})
|
||||
return
|
||||
}
|
||||
|
||||
ig, err := identicon.New(
|
||||
"happydomain", // namespace
|
||||
6, // number of blocks (size)
|
||||
3, // density of points
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("Unable to generate user avatar (uid=%s,user=%s): %s", user.Id.String(), user.Email, err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to generate avatar."})
|
||||
return
|
||||
}
|
||||
|
||||
ii, err := ig.Draw(user.Email)
|
||||
if err != nil {
|
||||
log.Printf("Unable to generate user avatar (uid=%s,user=%s): %s", user.Id.String(), user.Email, err.Error())
|
||||
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "Unable to generate avatar."})
|
||||
return
|
||||
}
|
||||
|
||||
c.Writer.Header().Set("Content-Type", "image/png")
|
||||
c.Writer.WriteHeader(http.StatusOK)
|
||||
ii.Png(int(size), c.Writer)
|
||||
}
|
||||
|
||||
// getUserSettings gets the settings of the given user.
|
||||
//
|
||||
// @Summary Retrieve user's settings.
|
||||
|
|
1
go.mod
1
go.mod
|
@ -104,6 +104,7 @@ require (
|
|||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04 // indirect
|
||||
github.com/nrdcg/goinwx v0.10.0 // indirect
|
||||
github.com/nullrocks/identicon v0.0.0-20180626043057-7875f45b0022 // indirect
|
||||
github.com/onsi/ginkgo v1.16.4 // indirect
|
||||
github.com/onsi/gomega v1.19.0 // indirect
|
||||
github.com/oracle/oci-go-sdk/v32 v32.0.0 // indirect
|
||||
|
|
2
go.sum
2
go.sum
|
@ -269,6 +269,8 @@ github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uY
|
|||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/nrdcg/goinwx v0.10.0 h1:6W630bjDxQD6OuXKqrFRYVpTt0G/9GXXm3CeOrN0zJM=
|
||||
github.com/nrdcg/goinwx v0.10.0/go.mod h1:mnMSTi7CXBu2io4DzdOBoGFA1XclD0sEPWJaDhNgkA4=
|
||||
github.com/nullrocks/identicon v0.0.0-20180626043057-7875f45b0022 h1:Ys0rDzh8s4UMlGaDa1UTA0sfKgvF0hQZzTYX8ktjiDc=
|
||||
github.com/nullrocks/identicon v0.0.0-20180626043057-7875f45b0022/go.mod h1:x4NsS+uc7ecH/Cbm9xKQ6XzmJM57rWTkjywjfB2yQ18=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
|
||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||
|
|
Loading…
Reference in New Issue