révision
fe74e1d8f5
6 fichiers modifiés avec 27 ajouts et 31 suppressions
|
@ -85,7 +85,7 @@ type CommentJSON struct {
|
||||||
Username string `json:"username"`
|
Username string `json:"username"`
|
||||||
UserID int `json:"user_id"`
|
UserID int `json:"user_id"`
|
||||||
Content template.HTML `json:"content"`
|
Content template.HTML `json:"content"`
|
||||||
Date time.Time `json:"date"`
|
Date string `json:"date"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type TorrentJSON struct {
|
type TorrentJSON struct {
|
||||||
|
@ -117,10 +117,10 @@ func (t *Torrent) ToJSON() TorrentJSON {
|
||||||
magnet := util.InfoHashToMagnet(strings.TrimSpace(t.Hash), t.Name, config.Trackers...)
|
magnet := util.InfoHashToMagnet(strings.TrimSpace(t.Hash), t.Name, config.Trackers...)
|
||||||
commentsJSON := make([]CommentJSON, 0, len(t.OldComments)+len(t.Comments))
|
commentsJSON := make([]CommentJSON, 0, len(t.OldComments)+len(t.Comments))
|
||||||
for _, c := range t.OldComments {
|
for _, c := range t.OldComments {
|
||||||
commentsJSON = append(commentsJSON, CommentJSON{Username: c.Username, UserID: -1, Content: template.HTML(c.Content), Date: c.Date})
|
commentsJSON = append(commentsJSON, CommentJSON{Username: c.Username, UserID: -1, Content: template.HTML(c.Content), Date: c.Date.Format(time.RFC3339)})
|
||||||
}
|
}
|
||||||
for _, c := range t.Comments {
|
for _, c := range t.Comments {
|
||||||
commentsJSON = append(commentsJSON, CommentJSON{Username: c.User.Username, UserID: int(c.User.ID), Content: util.MarkdownToHTML(c.Content), Date: c.CreatedAt})
|
commentsJSON = append(commentsJSON, CommentJSON{Username: c.User.Username, UserID: int(c.User.ID), Content: util.MarkdownToHTML(c.Content), Date: c.CreatedAt.Format(time.RFC3339)})
|
||||||
}
|
}
|
||||||
uploader := ""
|
uploader := ""
|
||||||
if t.Uploader != nil {
|
if t.Uploader != nil {
|
||||||
|
@ -130,7 +130,8 @@ func (t *Torrent) ToJSON() TorrentJSON {
|
||||||
if t.ID <= config.LastOldTorrentID && len(config.TorrentCacheLink) > 0 {
|
if t.ID <= config.LastOldTorrentID && len(config.TorrentCacheLink) > 0 {
|
||||||
torrentlink = fmt.Sprintf(config.TorrentCacheLink, t.Hash)
|
torrentlink = fmt.Sprintf(config.TorrentCacheLink, t.Hash)
|
||||||
} else if t.ID > config.LastOldTorrentID && len(config.TorrentStorageLink) > 0 {
|
} else if t.ID > config.LastOldTorrentID && len(config.TorrentStorageLink) > 0 {
|
||||||
torrentlink = fmt.Sprintf(config.TorrentStorageLink, t.Hash) // TODO: Fix as part of configuration changes
|
// TODO: Fix as part of configuration changes (fix what?)
|
||||||
|
torrentlink = fmt.Sprintf(config.TorrentStorageLink, t.Hash)
|
||||||
}
|
}
|
||||||
res := TorrentJSON{
|
res := TorrentJSON{
|
||||||
ID: strconv.FormatUint(uint64(t.ID), 10),
|
ID: strconv.FormatUint(uint64(t.ID), 10),
|
||||||
|
|
|
@ -377,4 +377,9 @@ footer {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -0.5rem;
|
top: -0.5rem;
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.comment-date {
|
||||||
|
font-size: smaller;
|
||||||
|
width: auto; /* Undo bootstrap's fixed width */
|
||||||
|
}
|
||||||
|
|
|
@ -157,6 +157,11 @@ func UserProfileFormHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
modelHelper.BindValueForm(&b, r)
|
modelHelper.BindValueForm(&b, r)
|
||||||
if !userPermission.HasAdmin(currentUser) {
|
if !userPermission.HasAdmin(currentUser) {
|
||||||
b.Username = currentUser.Username
|
b.Username = currentUser.Username
|
||||||
|
b.Status = currentUser.Status
|
||||||
|
} else {
|
||||||
|
if b.Status == 2 {
|
||||||
|
err["errors"] = append(err["errors"], "Elevating status to moderator is prohibited")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
err = modelHelper.ValidateForm(&b, err)
|
err = modelHelper.ValidateForm(&b, err)
|
||||||
if len(err) == 0 {
|
if len(err) == 0 {
|
||||||
|
|
|
@ -16,24 +16,6 @@ var cookieHandler = securecookie.New(
|
||||||
securecookie.GenerateRandomKey(64),
|
securecookie.GenerateRandomKey(64),
|
||||||
securecookie.GenerateRandomKey(32))
|
securecookie.GenerateRandomKey(32))
|
||||||
|
|
||||||
// TODO: Figure out what this is about before I delete it
|
|
||||||
// // UserName get username from a cookie.
|
|
||||||
// func UserName(c *gin.Context) (string, error) {
|
|
||||||
// var userName string
|
|
||||||
// request := c.Request
|
|
||||||
// cookie, err := request.Cookie("session")
|
|
||||||
// if err != nil {
|
|
||||||
// return userName, err
|
|
||||||
// }
|
|
||||||
// cookieValue := make(map[string]string)
|
|
||||||
// err = cookieHandler.Decode("session", cookie.Value, &cookieValue)
|
|
||||||
// if err != nil {
|
|
||||||
// return userName, err
|
|
||||||
// }
|
|
||||||
// userName = cookieValue["name"]
|
|
||||||
// return userName, nil
|
|
||||||
// }
|
|
||||||
|
|
||||||
func Token(r *http.Request) (string, error) {
|
func Token(r *http.Request) (string, error) {
|
||||||
var token string
|
var token string
|
||||||
cookie, err := r.Cookie("session")
|
cookie, err := r.Cookie("session")
|
||||||
|
@ -90,17 +72,20 @@ func SetCookieHandler(w http.ResponseWriter, email string, pass string) (int, er
|
||||||
if isValidEmail {
|
if isValidEmail {
|
||||||
log.Debug("User entered valid email.")
|
log.Debug("User entered valid email.")
|
||||||
if db.ORM.Where("email = ?", email).First(&user).RecordNotFound() {
|
if db.ORM.Where("email = ?", email).First(&user).RecordNotFound() {
|
||||||
return http.StatusNotFound, errors.New("user not found")
|
return http.StatusNotFound, errors.New("User not found")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.Debug("User entered username.")
|
log.Debug("User entered username.")
|
||||||
if db.ORM.Where("username = ?", email).First(&user).RecordNotFound() {
|
if db.ORM.Where("username = ?", email).First(&user).RecordNotFound() {
|
||||||
return http.StatusNotFound, errors.New("user not found")
|
return http.StatusNotFound, errors.New("User not found")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(pass))
|
err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(pass))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return http.StatusUnauthorized, errors.New("password incorrect")
|
return http.StatusUnauthorized, errors.New("Password incorrect")
|
||||||
|
}
|
||||||
|
if user.Status == -1 {
|
||||||
|
return http.StatusUnauthorized, errors.New("Account banned")
|
||||||
}
|
}
|
||||||
status, err := SetCookie(w, user.Token)
|
status, err := SetCookie(w, user.Token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ if not (HasAdmin .)}}
|
{{ if not (HasAdmin $.User)}}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-3 control-label">{{ T "current_password"}}:</label>
|
<label class="col-md-3 control-label">{{ T "current_password"}}:</label>
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
@ -63,7 +63,7 @@
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{{ if HasAdmin .}}
|
{{ if HasAdmin $.User}}
|
||||||
<h3>{{ T "moderation"}}</h3>
|
<h3>{{ T "moderation"}}</h3>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="col-md-3 control-label">{{ T "username"}}:</label>
|
<label class="col-md-3 control-label">{{ T "username"}}:</label>
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
<option value="-1" {{ if eq .Status -1 }}selected{{end}}>{{ T "banned"}}</option>
|
<option value="-1" {{ if eq .Status -1 }}selected{{end}}>{{ T "banned"}}</option>
|
||||||
<option value="0" {{ if eq .Status 0 }}selected{{end}}>{{ T "member"}} ({{ T "default" }})</option>
|
<option value="0" {{ if eq .Status 0 }}selected{{end}}>{{ T "member"}} ({{ T "default" }})</option>
|
||||||
<option value="1" {{ if eq .Status 1 }}selected{{end}}>{{ T "trusted_member"}} </option>
|
<option value="1" {{ if eq .Status 1 }}selected{{end}}>{{ T "trusted_member"}} </option>
|
||||||
<option value="2" {{ if eq .Status 2 }}selected{{end}}>{{ T "moderator"}} </option>
|
<!-- <option value="2" {{ if eq .Status 2 }}selected{{end}}>{{ T "moderator"}} </option> -->
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
{{ range (index $.FormErrors "status")}}
|
{{ range (index $.FormErrors "status")}}
|
||||||
|
|
|
@ -93,8 +93,8 @@
|
||||||
<a href="{{$.URL.Parse (printf "/user/%d/-" .UserID ) }}">{{.Username}}</a>
|
<a href="{{$.URL.Parse (printf "/user/%d/-" .UserID ) }}">{{.Username}}</a>
|
||||||
{{end}}
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-2">
|
<div class="col-md-1 date-short comment-date">
|
||||||
{{.Date.Year}}/{{.Date.Month}}/{{.Date.Day}}
|
{{.Date}}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
{{.Content}}
|
{{.Content}}
|
||||||
|
|
Référencer dans un nouveau ticket