c5b3702fcd
Removed the old search parameter on /api. Fixed issue with navigatation. Fixed issue with notifications. Fixed issue with fake anonymous upload on search with userID. Fixed issue with number of upload on user page. Moved api to version 1.1.0 with search displaying same as /api
172 lignes
5,5 Kio
Go
172 lignes
5,5 Kio
Go
package userController
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
|
|
"net/http"
|
|
|
|
"github.com/NyaaPantsu/nyaa/controllers/router"
|
|
"github.com/NyaaPantsu/nyaa/models"
|
|
"github.com/NyaaPantsu/nyaa/models/notifications"
|
|
"github.com/NyaaPantsu/nyaa/models/users"
|
|
"github.com/NyaaPantsu/nyaa/templates"
|
|
"github.com/NyaaPantsu/nyaa/utils/cookies"
|
|
"github.com/NyaaPantsu/nyaa/utils/crypto"
|
|
"github.com/NyaaPantsu/nyaa/utils/email"
|
|
msg "github.com/NyaaPantsu/nyaa/utils/messages"
|
|
"github.com/NyaaPantsu/nyaa/utils/publicSettings"
|
|
"github.com/NyaaPantsu/nyaa/utils/validator"
|
|
"github.com/NyaaPantsu/nyaa/utils/validator/user"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// UserProfileHandler : Getting User Profile
|
|
func UserProfileHandler(c *gin.Context) {
|
|
id, _ := strconv.ParseUint(c.Param("id"), 10, 32)
|
|
Ts, _ := publicSettings.GetTfuncAndLanguageFromRequest(c)
|
|
messages := msg.GetMessages(c)
|
|
|
|
userProfile, _, errorUser := users.FindForAdmin(uint(id))
|
|
if errorUser == nil {
|
|
currentUser := router.GetUser(c)
|
|
follow := c.Request.URL.Query()["followed"]
|
|
unfollow := c.Request.URL.Query()["unfollowed"]
|
|
deleteVar := c.Request.URL.Query()["delete"]
|
|
|
|
if (deleteVar != nil) && (currentUser.CurrentOrAdmin(userProfile.ID)) {
|
|
_, err := userProfile.Delete(currentUser)
|
|
if err == nil && currentUser.CurrentUserIdentical(userProfile.ID) {
|
|
cookies.Clear(c)
|
|
}
|
|
templates.Static(c, "site/static/delete_success.jet.html")
|
|
} else {
|
|
if follow != nil {
|
|
messages.AddInfof("infos", Ts("user_followed_msg"), userProfile.Username)
|
|
}
|
|
if unfollow != nil {
|
|
messages.AddInfof("infos", Ts("user_unfollowed_msg"), userProfile.Username)
|
|
}
|
|
userProfile.ParseSettings()
|
|
|
|
templates.UserProfile(c, userProfile)
|
|
}
|
|
} else {
|
|
c.Status(http.StatusNotFound)
|
|
}
|
|
}
|
|
|
|
// UserDetailsHandler : Getting User Profile Details View
|
|
func UserDetailsHandler(c *gin.Context) {
|
|
id, _ := strconv.ParseUint(c.Param("id"), 10, 32)
|
|
currentUser := router.GetUser(c)
|
|
|
|
userProfile, _, errorUser := users.FindForAdmin(uint(id))
|
|
if errorUser == nil && currentUser.CurrentOrAdmin(userProfile.ID) {
|
|
b := userValidator.UserForm{}
|
|
c.Bind(&b)
|
|
availableLanguages := publicSettings.GetAvailableLanguages()
|
|
userProfile.ParseSettings()
|
|
templates.UserProfileEdit(c, userProfile, b, availableLanguages)
|
|
} else {
|
|
c.Status(http.StatusNotFound)
|
|
}
|
|
}
|
|
|
|
// UserProfileFormHandler : Getting View User Profile Update
|
|
func UserProfileFormHandler(c *gin.Context) {
|
|
id, _ := strconv.ParseUint(c.Param("id"), 10, 32)
|
|
currentUser := router.GetUser(c)
|
|
userProfile, _, errorUser := users.FindForAdmin(uint(id))
|
|
if errorUser != nil || !currentUser.CurrentOrAdmin(userProfile.ID) || userProfile.ID == 0 {
|
|
c.Status(http.StatusNotFound)
|
|
return
|
|
}
|
|
userProfile.ParseSettings()
|
|
messages := msg.GetMessages(c)
|
|
userForm := userValidator.UserForm{}
|
|
userSettingsForm := userValidator.UserSettingsForm{}
|
|
|
|
if len(c.PostForm("email")) > 0 {
|
|
if !userValidator.EmailValidation(c.PostForm("email")) {
|
|
messages.AddErrorT("email", "email_not_valid")
|
|
}
|
|
}
|
|
if len(c.PostForm("username")) > 0 {
|
|
if !userValidator.ValidateUsername(c.PostForm("username")) {
|
|
messages.AddErrorT("username", "username_illegal")
|
|
}
|
|
}
|
|
|
|
if !messages.HasErrors() {
|
|
c.Bind(&userForm)
|
|
c.Bind(&userSettingsForm)
|
|
if !currentUser.HasAdmin() {
|
|
userForm.Username = userProfile.Username
|
|
userForm.Status = userProfile.Status
|
|
} else {
|
|
if userProfile.Status != userForm.Status && userForm.Status == 2 {
|
|
messages.AddErrorT("errors", "elevating_user_error")
|
|
}
|
|
}
|
|
validator.ValidateForm(&userForm, messages)
|
|
if !messages.HasErrors() {
|
|
if userForm.Email != userProfile.Email {
|
|
email.SendVerificationToUser(currentUser, userForm.Email)
|
|
messages.AddInfoTf("infos", "email_changed", userForm.Email)
|
|
userForm.Email = userProfile.Email // reset, it will be set when user clicks verification
|
|
}
|
|
user, _, err := users.UpdateFromRequest(c, &userForm, &userSettingsForm, currentUser, uint(id))
|
|
if err != nil {
|
|
messages.Error(err)
|
|
}
|
|
if userForm.Email != user.Email {
|
|
// send verification to new email and keep old
|
|
email.SendVerificationToUser(user, userForm.Email)
|
|
}
|
|
if !messages.HasErrors() {
|
|
messages.AddInfoT("infos", "profile_updated")
|
|
}
|
|
}
|
|
}
|
|
availableLanguages := publicSettings.GetAvailableLanguages()
|
|
templates.UserProfileEdit(c, userProfile, userForm, availableLanguages)
|
|
}
|
|
|
|
// UserNotificationsHandler : Controller to show user notifications
|
|
func UserNotificationsHandler(c *gin.Context) {
|
|
currentUser := router.GetUser(c)
|
|
if currentUser.ID > 0 {
|
|
messages := msg.GetMessages(c)
|
|
if c.Request.URL.Query()["clear"] != nil {
|
|
notifications.DeleteAllNotifications(currentUser.ID)
|
|
messages.AddInfoT("infos", "notifications_cleared")
|
|
currentUser.Notifications = []models.Notification{}
|
|
}
|
|
templates.UserProfileNotifications(c, currentUser)
|
|
} else {
|
|
c.Status(http.StatusNotFound)
|
|
}
|
|
}
|
|
|
|
// UserAPIKeyResetHandler : Controller to reset user api key
|
|
func UserAPIKeyResetHandler(c *gin.Context) {
|
|
id, _ := strconv.ParseUint(c.Param("id"), 10, 32)
|
|
currentUser := router.GetUser(c)
|
|
|
|
messages := msg.GetMessages(c)
|
|
userProfile, _, errorUser := users.FindForAdmin(uint(id))
|
|
if errorUser != nil || !currentUser.CurrentOrAdmin(userProfile.ID) || userProfile.ID == 0 {
|
|
c.Status(http.StatusNotFound)
|
|
return
|
|
}
|
|
userProfile.APIToken, _ = crypto.GenerateRandomToken32()
|
|
userProfile.APITokenExpiry = time.Unix(0, 0)
|
|
_, errorUser = userProfile.UpdateRaw()
|
|
if errorUser != nil {
|
|
messages.Error(errorUser)
|
|
} else {
|
|
messages.AddInfoT("infos", "profile_updated")
|
|
}
|
|
UserProfileHandler(c)
|
|
}
|