| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- package api
- import (
- "strconv"
- "github.com/gin-gonic/gin"
- )
- func init() {
- addRoutes(func(self *HttpServer) {
- self.addRoute("POST", "/api/account/collaborators/add", self.addCollaborator)
- self.addRoute("POST", "/api/account/collaborators/remove", self.removeCollaborator)
- self.addRoute("GET", "/api/account/", self.getAccount)
- self.addRoute("GET", "/api/account/others", self.getOtherAccounts)
- self.addRoute("POST", "/api/account/using/:id", self.setUsingAccount)
- })
- }
- func (self *HttpServer) getAccount(c *gin.Context, auth *authContext) {
- var account = auth.userAccount
- model := accountInfoDto{
- Name: account.Name,
- Email: account.Email,
- AccountName: account.AccountName,
- }
- for _, collaborator := range account.Collaborators {
- model.Collaborators = append(model.Collaborators, &collaboratorInfoDto{
- AccountId: collaborator.AccountId,
- Role: collaborator.Role,
- Email: collaborator.Email,
- })
- }
- c.JSON(200, model)
- }
- func (self *HttpServer) getOtherAccounts(c *gin.Context, auth *authContext) {
- var account = auth.userAccount
- otherAccounts, err := self.store.GetOtherAccountsFor(account.Id)
- if err != nil {
- c.JSON(500, gin.H{"message": err.Error()})
- return
- }
- var result []*otherAccountDto
- result = append(result, &otherAccountDto{
- Id: account.Id,
- Role: "owner",
- IsUsing: account.Id == account.UsingAccountId,
- Name: account.Email,
- })
- for _, other := range otherAccounts {
- result = append(result, &otherAccountDto{
- Id: other.Id,
- Role: other.Role,
- Name: other.Name,
- IsUsing: other.Id == account.UsingAccountId,
- })
- }
- c.JSON(200, result)
- }
- func (self *HttpServer) addCollaborator(c *gin.Context, auth *authContext) {
- var model addCollaboratorDto
- if !c.EnsureBody(&model) {
- c.JSON(400, gin.H{"message": "Invalid request"})
- return
- }
- collaborator, err := self.store.GetAccountByLogin(model.Email)
- if err != nil {
- c.JSON(404, gin.H{"message": "Collaborator not found"})
- return
- }
- userAccount := auth.userAccount
- if collaborator.Id == userAccount.Id {
- c.JSON(400, gin.H{"message": "Cannot add yourself as collaborator"})
- return
- }
- err = userAccount.AddCollaborator(collaborator)
- if err != nil {
- c.JSON(400, gin.H{"message": err.Error()})
- return
- }
- err = self.store.UpdateAccount(userAccount)
- if err != nil {
- c.JSON(500, gin.H{"message": err.Error()})
- return
- }
- c.Abort(204)
- }
- func (self *HttpServer) removeCollaborator(c *gin.Context, auth *authContext) {
- var model removeCollaboratorDto
- if !c.EnsureBody(&model) {
- c.JSON(400, gin.H{"message": "Invalid request"})
- return
- }
- account := auth.userAccount
- account.RemoveCollaborator(model.AccountId)
- err := self.store.UpdateAccount(account)
- if err != nil {
- c.JSON(500, gin.H{"message": err.Error()})
- return
- }
- c.Abort(204)
- }
- func (self *HttpServer) setUsingAccount(c *gin.Context, auth *authContext) {
- idString := c.Params.ByName("id")
- id, _ := strconv.Atoi(idString)
- account := auth.userAccount
- otherAccount, err := self.store.GetAccount(id)
- if err != nil {
- c.JSON(500, gin.H{"message": err.Error()})
- return
- }
- if otherAccount.Id != account.Id && !otherAccount.HasCollaborator(account.Id) {
- c.Abort(401)
- return
- }
- account.UsingAccountId = otherAccount.Id
- err = self.store.UpdateAccount(account)
- if err != nil {
- c.JSON(500, gin.H{"message": err.Error()})
- return
- }
- c.Abort(204)
- }
|