Protecting Created Date, updating docs, changin errors to JSON
This commit is contained in:
		| @@ -19,12 +19,13 @@ Todo till we can fork this repo | |||||||
| - hardcoded roles | - hardcoded roles | ||||||
|  |  | ||||||
| * ~~/register endpoint creates database, company and first admin~~ | * ~~/register endpoint creates database, company and first admin~~ | ||||||
| * checking some roles in all endpoints |  | ||||||
| * ~~load db connections from config~~ | * ~~load db connections from config~~ | ||||||
| * ~~user delete needs to update system~~ | * ~~user delete needs to update system~~ | ||||||
| * ~~company delete needs to exist and update usercompanymap~~ | * ~~company delete needs to exist and update usercompanymap~~ | ||||||
| * modified by (companyuserid) | * ~~last modified in update for all tables~~ | ||||||
| * last modified in update for all tables | * checking some roles in all endpoints | ||||||
|  | * modified by relation (companyuserid) | ||||||
|  | * return error in case of not found | ||||||
|  |  | ||||||
| ## Notes: | ## Notes: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,10 +36,10 @@ func (c *CompanyDataController) Post() { | |||||||
| 			c.Ctx.Output.SetStatus(201) | 			c.Ctx.Output.SetStatus(201) | ||||||
| 			c.Data["json"] = v | 			c.Data["json"] = v | ||||||
| 		} else { | 		} else { | ||||||
| 			c.Data["json"] = err.Error() | 			c.ServeJSONErrorWithError("Error", err) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
| @@ -56,7 +56,7 @@ func (c *CompanyDataController) GetOne() { | |||||||
| 	id, _ := strconv.Atoi(idStr) | 	id, _ := strconv.Atoi(idStr) | ||||||
| 	v, err := models.GetCompanyDataById(o, id) | 	v, err := models.GetCompanyDataById(o, id) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = v | 		c.Data["json"] = v | ||||||
| 	} | 	} | ||||||
| @@ -119,7 +119,7 @@ func (c *CompanyDataController) GetAll() { | |||||||
|  |  | ||||||
| 	l, err := models.GetAllCompanyData(o, query, fields, sortby, order, offset, limit) | 	l, err := models.GetAllCompanyData(o, query, fields, sortby, order, offset, limit) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = l | 		c.Data["json"] = l | ||||||
| 	} | 	} | ||||||
| @@ -140,12 +140,12 @@ func (c *CompanyDataController) Put() { | |||||||
| 	v := models.CompanyData{Id: id} | 	v := models.CompanyData{Id: id} | ||||||
| 	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &v); err == nil { | 	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &v); err == nil { | ||||||
| 		if err := models.UpdateCompanyDataById(o, &v); err == nil { | 		if err := models.UpdateCompanyDataById(o, &v); err == nil { | ||||||
| 			c.Data["json"] = "OK" | 			c.ServeJSONSuccess("Ok") | ||||||
| 		} else { | 		} else { | ||||||
| 			c.Data["json"] = err.Error() | 			c.ServeJSONErrorWithError("Error", err) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
| @@ -161,9 +161,9 @@ func (c *CompanyDataController) Delete() { | |||||||
| 	idStr := c.Ctx.Input.Param(":id") | 	idStr := c.Ctx.Input.Param(":id") | ||||||
| 	id, _ := strconv.Atoi(idStr) | 	id, _ := strconv.Atoi(idStr) | ||||||
| 	if err := models.DeleteCompanyData(o, id); err == nil { | 	if err := models.DeleteCompanyData(o, id); err == nil { | ||||||
| 		c.Data["json"] = "OK" | 		c.ServeJSONSuccess("Ok") | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ func (c *CompanyUserController) URLMapping() { | |||||||
| 	c.Mapping("GetAll", c.GetAll) | 	c.Mapping("GetAll", c.GetAll) | ||||||
| 	c.Mapping("Put", c.Put) | 	c.Mapping("Put", c.Put) | ||||||
| 	c.Mapping("Delete", c.Delete) | 	c.Mapping("Delete", c.Delete) | ||||||
| 	c.Mapping("Delete", c.DeleteCompany) | 	c.Mapping("DeleteCompany", c.DeleteCompany) | ||||||
| } | } | ||||||
|  |  | ||||||
| // Post ... | // Post ... | ||||||
| @@ -106,7 +106,7 @@ func (c *CompanyUserController) GetOne() { | |||||||
| 	id, _ := strconv.Atoi(idStr) | 	id, _ := strconv.Atoi(idStr) | ||||||
| 	v, err := models.GetCompanyUserById(o, id) | 	v, err := models.GetCompanyUserById(o, id) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = v | 		c.Data["json"] = v | ||||||
| 	} | 	} | ||||||
| @@ -169,7 +169,7 @@ func (c *CompanyUserController) GetAll() { | |||||||
|  |  | ||||||
| 	l, err := models.GetAllCompanyUser(o, query, fields, sortby, order, offset, limit) | 	l, err := models.GetAllCompanyUser(o, query, fields, sortby, order, offset, limit) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = l | 		c.Data["json"] = l | ||||||
| 	} | 	} | ||||||
| @@ -190,12 +190,12 @@ func (c *CompanyUserController) Put() { | |||||||
| 	v := models.CompanyUser{Id: id} | 	v := models.CompanyUser{Id: id} | ||||||
| 	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &v); err == nil { | 	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &v); err == nil { | ||||||
| 		if err := models.UpdateCompanyUserById(o, &v); err == nil { | 		if err := models.UpdateCompanyUserById(o, &v); err == nil { | ||||||
| 			c.Data["json"] = "OK" | 			c.ServeJSONSuccess("Ok") | ||||||
| 		} else { | 		} else { | ||||||
| 			c.Data["json"] = err.Error() | 			c.ServeJSONErrorWithError("Error", err) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
|   | |||||||
| @@ -6,8 +6,6 @@ import ( | |||||||
| 	"multitenantStack/models" | 	"multitenantStack/models" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| 	"strings" | 	"strings" | ||||||
|  |  | ||||||
| 	"github.com/astaxie/beego/orm" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // ContactController operations for Contact | // ContactController operations for Contact | ||||||
| @@ -38,10 +36,10 @@ func (c *ContactController) Post() { | |||||||
| 			c.Ctx.Output.SetStatus(201) | 			c.Ctx.Output.SetStatus(201) | ||||||
| 			c.Data["json"] = v | 			c.Data["json"] = v | ||||||
| 		} else { | 		} else { | ||||||
| 			c.Data["json"] = err.Error() | 			c.ServeJSONErrorWithError("Error", err) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
| @@ -56,9 +54,9 @@ func (c *ContactController) Post() { | |||||||
| func (c *ContactController) GetOne() { | func (c *ContactController) GetOne() { | ||||||
| 	idStr := c.Ctx.Input.Param(":id") | 	idStr := c.Ctx.Input.Param(":id") | ||||||
| 	id, _ := strconv.Atoi(idStr) | 	id, _ := strconv.Atoi(idStr) | ||||||
| 	v, err := models.GetContactById(orm.NewOrm(), id) | 	v, err := models.GetContactById(o, id) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = v | 		c.Data["json"] = v | ||||||
| 	} | 	} | ||||||
| @@ -121,7 +119,7 @@ func (c *ContactController) GetAll() { | |||||||
|  |  | ||||||
| 	l, err := models.GetAllContact(o, query, fields, sortby, order, offset, limit) | 	l, err := models.GetAllContact(o, query, fields, sortby, order, offset, limit) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = l | 		c.Data["json"] = l | ||||||
| 	} | 	} | ||||||
| @@ -143,12 +141,12 @@ func (c *ContactController) Put() { | |||||||
| 	v := models.Contact{Id: id} | 	v := models.Contact{Id: id} | ||||||
| 	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &v); err == nil { | 	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &v); err == nil { | ||||||
| 		if err := models.UpdateContactById(o, &v); err == nil { | 		if err := models.UpdateContactById(o, &v); err == nil { | ||||||
| 			c.Data["json"] = "OK" | 			c.ServeJSONSuccess("Ok") | ||||||
| 		} else { | 		} else { | ||||||
| 			c.Data["json"] = err.Error() | 			c.ServeJSONErrorWithError("Error", err) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
| @@ -164,9 +162,9 @@ func (c *ContactController) Delete() { | |||||||
| 	idStr := c.Ctx.Input.Param(":id") | 	idStr := c.Ctx.Input.Param(":id") | ||||||
| 	id, _ := strconv.Atoi(idStr) | 	id, _ := strconv.Atoi(idStr) | ||||||
| 	if err := models.DeleteContact(o, id); err == nil { | 	if err := models.DeleteContact(o, id); err == nil { | ||||||
| 		c.Data["json"] = "OK" | 		c.ServeJSONSuccess("Ok") | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
|   | |||||||
| @@ -36,10 +36,10 @@ func (c *PostController) Post() { | |||||||
| 			c.Ctx.Output.SetStatus(201) | 			c.Ctx.Output.SetStatus(201) | ||||||
| 			c.Data["json"] = v | 			c.Data["json"] = v | ||||||
| 		} else { | 		} else { | ||||||
| 			c.Data["json"] = err.Error() | 			c.ServeJSONErrorWithError("Error", err) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
| @@ -56,11 +56,16 @@ func (c *PostController) GetOne() { | |||||||
| 	id, _ := strconv.Atoi(idStr) | 	id, _ := strconv.Atoi(idStr) | ||||||
| 	v, err := models.GetPostById(o, id) | 	v, err := models.GetPostById(o, id) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		c.Data["json"] = err.Error() | 		if err.Error() == "<QuerySeter> no row found" { | ||||||
|  | 			c.ServeJSONError("Post does not exist") | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = v | 		c.Data["json"] = v | ||||||
|  | 		c.ServeJSON() | ||||||
|  | 		return | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSONError("Error retrieving Post") | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetAll ... | // GetAll ... | ||||||
| @@ -119,11 +124,16 @@ func (c *PostController) GetAll() { | |||||||
|  |  | ||||||
| 	l, err := models.GetAllPost(o, query, fields, sortby, order, offset, limit) | 	l, err := models.GetAllPost(o, query, fields, sortby, order, offset, limit) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		c.Data["json"] = err.Error() | 		if err.Error() == "<QuerySeter> no row found" { | ||||||
|  | 			c.ServeJSONError("No Posts found") | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = l | 		c.Data["json"] = l | ||||||
|  | 		c.ServeJSON() | ||||||
|  | 		return | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSONError("Error retrieving Post") | ||||||
| } | } | ||||||
|  |  | ||||||
| // Put ... | // Put ... | ||||||
| @@ -140,14 +150,13 @@ func (c *PostController) Put() { | |||||||
| 	v := models.Post{Id: id} | 	v := models.Post{Id: id} | ||||||
| 	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &v); err == nil { | 	if err := json.Unmarshal(c.Ctx.Input.RequestBody, &v); err == nil { | ||||||
| 		if err := models.UpdatePostById(o, &v); err == nil { | 		if err := models.UpdatePostById(o, &v); err == nil { | ||||||
| 			c.Data["json"] = "OK" | 			c.ServeJSONSuccess("Updated Post") | ||||||
| 		} else { | 		} else { | ||||||
| 			c.Data["json"] = err.Error() | 			c.ServeJSONErrorWithError("Error", err) | ||||||
| 		} | 		} | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() |  | ||||||
| } | } | ||||||
|  |  | ||||||
| // Delete ... | // Delete ... | ||||||
| @@ -161,9 +170,9 @@ func (c *PostController) Delete() { | |||||||
| 	idStr := c.Ctx.Input.Param(":id") | 	idStr := c.Ctx.Input.Param(":id") | ||||||
| 	id, _ := strconv.Atoi(idStr) | 	id, _ := strconv.Atoi(idStr) | ||||||
| 	if err := models.DeletePost(o, id); err == nil { | 	if err := models.DeletePost(o, id); err == nil { | ||||||
| 		c.Data["json"] = "OK" | 		c.ServeJSONSuccess("Ok") | ||||||
| 	} else { | 	} else { | ||||||
| 		c.Data["json"] = err.Error() | 		c.ServeJSONErrorWithError("Error", err) | ||||||
| 	} | 	} | ||||||
| 	c.ServeJSON() | 	c.ServeJSON() | ||||||
| } | } | ||||||
|   | |||||||
| @@ -128,6 +128,7 @@ func UpdateCompanyDataById(o orm.Ormer, m *CompanyData) (err error) { | |||||||
| 	v := CompanyData{Id: m.Id} | 	v := CompanyData{Id: m.Id} | ||||||
| 	// ascertain id exists in the database | 	// ascertain id exists in the database | ||||||
| 	if err = o.Read(&v); err == nil { | 	if err = o.Read(&v); err == nil { | ||||||
|  | 		m.Created = v.Created | ||||||
| 		var num int64 | 		var num int64 | ||||||
| 		if num, err = o.Update(m); err == nil { | 		if num, err = o.Update(m); err == nil { | ||||||
| 			fmt.Println("Number of records updated in database:", num) | 			fmt.Println("Number of records updated in database:", num) | ||||||
|   | |||||||
| @@ -128,6 +128,7 @@ func UpdateCompanyUserById(o orm.Ormer, m *CompanyUser) (err error) { | |||||||
| 	// ascertain id exists in the database | 	// ascertain id exists in the database | ||||||
| 	if err = o.Read(&v); err == nil { | 	if err = o.Read(&v); err == nil { | ||||||
| 		var num int64 | 		var num int64 | ||||||
|  | 		m.Created = v.Created | ||||||
| 		if num, err = o.Update(m); err == nil { | 		if num, err = o.Update(m); err == nil { | ||||||
| 			fmt.Println("Number of records updated in database:", num) | 			fmt.Println("Number of records updated in database:", num) | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -132,6 +132,7 @@ func UpdateContactById(o orm.Ormer, m *Contact) (err error) { | |||||||
| 	// ascertain id exists in the database | 	// ascertain id exists in the database | ||||||
| 	if err = o.Read(&v); err == nil { | 	if err = o.Read(&v); err == nil { | ||||||
| 		var num int64 | 		var num int64 | ||||||
|  | 		m.Created = v.Created | ||||||
| 		if num, err = o.Update(m); err == nil { | 		if num, err = o.Update(m); err == nil { | ||||||
| 			fmt.Println("Number of records updated in database:", num) | 			fmt.Println("Number of records updated in database:", num) | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -121,14 +121,14 @@ func GetAllPost(o orm.Ormer, query map[string]string, fields []string, sortby [] | |||||||
| 	return nil, err | 	return nil, err | ||||||
| } | } | ||||||
|  |  | ||||||
| // UpdatePost updates Post by Id and returns error if | // UpdatePost updates Post by Id and returns error if the record to be updated doesn't exist | ||||||
| // the record to be updated doesn't exist |  | ||||||
| func UpdatePostById(o orm.Ormer, m *Post) (err error) { | func UpdatePostById(o orm.Ormer, m *Post) (err error) { | ||||||
| 	m.Modified = time.Now() | 	m.Modified = time.Now() | ||||||
| 	v := Post{Id: m.Id} | 	v := Post{Id: m.Id} | ||||||
| 	// ascertain id exists in the database | 	// ascertain id exists in the database | ||||||
| 	if err = o.Read(&v); err == nil { | 	if err = o.Read(&v); err == nil { | ||||||
| 		var num int64 | 		var num int64 | ||||||
|  | 		m.Created = v.Created | ||||||
| 		if num, err = o.Update(m); err == nil { | 		if num, err = o.Update(m); err == nil { | ||||||
| 			fmt.Println("Number of records updated in database:", num) | 			fmt.Println("Number of records updated in database:", num) | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -159,6 +159,7 @@ func UpdateUserCompanyMapById(o orm.Ormer, m *UserCompanyMap) (err error) { | |||||||
| 	// ascertain id exists in the database | 	// ascertain id exists in the database | ||||||
| 	if err = o.Read(&v); err == nil { | 	if err = o.Read(&v); err == nil { | ||||||
| 		var num int64 | 		var num int64 | ||||||
|  | 		m.Created = v.Created | ||||||
| 		if num, err = o.Update(m); err == nil { | 		if num, err = o.Update(m); err == nil { | ||||||
| 			fmt.Println("Number of records updated in database:", num) | 			fmt.Println("Number of records updated in database:", num) | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -657,7 +657,7 @@ | |||||||
|                 "tags": [ |                 "tags": [ | ||||||
|                     "user" |                     "user" | ||||||
|                 ], |                 ], | ||||||
|                 "description": "create CompanyUser", |                 "description": "Create a new CompanyUser and his user company mapping", | ||||||
|                 "operationId": "CompanyUserController.Post", |                 "operationId": "CompanyUserController.Post", | ||||||
|                 "parameters": [ |                 "parameters": [ | ||||||
|                     { |                     { | ||||||
| @@ -680,6 +680,23 @@ | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         "/user/deletecompany": { | ||||||
|  |             "delete": { | ||||||
|  |                 "tags": [ | ||||||
|  |                     "user" | ||||||
|  |                 ], | ||||||
|  |                 "description": "Delete the entire Company", | ||||||
|  |                 "operationId": "CompanyUserController.Delete Company", | ||||||
|  |                 "responses": { | ||||||
|  |                     "200": { | ||||||
|  |                         "description": "{string} delete success!" | ||||||
|  |                     }, | ||||||
|  |                     "403": { | ||||||
|  |                         "description": "failed" | ||||||
|  |                     } | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }, | ||||||
|         "/user/{id}": { |         "/user/{id}": { | ||||||
|             "get": { |             "get": { | ||||||
|                 "tags": [ |                 "tags": [ | ||||||
|   | |||||||
| @@ -438,7 +438,7 @@ paths: | |||||||
|     post: |     post: | ||||||
|       tags: |       tags: | ||||||
|       - user |       - user | ||||||
|       description: create CompanyUser |       description: Create a new CompanyUser and his user company mapping | ||||||
|       operationId: CompanyUserController.Post |       operationId: CompanyUserController.Post | ||||||
|       parameters: |       parameters: | ||||||
|       - in: body |       - in: body | ||||||
| @@ -511,6 +511,17 @@ paths: | |||||||
|           description: '{string} delete success!' |           description: '{string} delete success!' | ||||||
|         "403": |         "403": | ||||||
|           description: id is empty |           description: id is empty | ||||||
|  |   /user/deletecompany: | ||||||
|  |     delete: | ||||||
|  |       tags: | ||||||
|  |       - user | ||||||
|  |       description: Delete the entire Company | ||||||
|  |       operationId: CompanyUserController.Delete Company | ||||||
|  |       responses: | ||||||
|  |         "200": | ||||||
|  |           description: '{string} delete success!' | ||||||
|  |         "403": | ||||||
|  |           description: failed | ||||||
| definitions: | definitions: | ||||||
|   models.Auth: |   models.Auth: | ||||||
|     title: Auth |     title: Auth | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user