Compare commits
3 Commits
7ea11ebd51
...
319b1a05b9
Author | SHA1 | Date |
---|---|---|
Asaf Gartner | 319b1a05b9 | |
Asaf Gartner | 822a489c09 | |
Asaf Gartner | b62954ba37 |
|
@ -110,7 +110,11 @@ function makeShowcaseItem(timelineItem) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
modalEl.discord_link.href = timelineItem.discord_message_url;
|
if (timelineItem.discord_message_url != "") {
|
||||||
|
modalEl.discord_link.href = timelineItem.discord_message_url;
|
||||||
|
} else {
|
||||||
|
modalEl.discord_link.remove();
|
||||||
|
}
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
modalEl.overlay.remove();
|
modalEl.overlay.remove();
|
||||||
|
|
|
@ -9393,13 +9393,13 @@ span.icon-rss::before {
|
||||||
.timeline-item .avatar-icon.big {
|
.timeline-item .avatar-icon.big {
|
||||||
width: 3.875rem;
|
width: 3.875rem;
|
||||||
height: 3.875rem; } }
|
height: 3.875rem; } }
|
||||||
.timeline-item .timeline-content-box {
|
.timeline-item .timeline-content-box.timeline-item-bg {
|
||||||
background-color: rgba(0, 0, 0, 0.2);
|
background-color: rgba(0, 0, 0, 0.2);
|
||||||
background-color: var(--timeline-content-background); }
|
background-color: var(--timeline-content-background); }
|
||||||
.timeline-item .timeline-content-box > * {
|
.timeline-item .timeline-content-box > * {
|
||||||
display: block;
|
display: block;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
max-height: 80vh; }
|
max-height: 80vh; }
|
||||||
|
|
||||||
.timeline-modal .container {
|
.timeline-modal .container {
|
||||||
max-height: 100vh; }
|
max-height: 100vh; }
|
||||||
|
|
|
@ -19,7 +19,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.timeline-content-box {
|
.timeline-content-box {
|
||||||
@include usevar(background-color, timeline-content-background);
|
&.timeline-item-bg {
|
||||||
|
@include usevar(background-color, timeline-content-background);
|
||||||
|
}
|
||||||
|
|
||||||
> * {
|
> * {
|
||||||
display: block;
|
display: block;
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ range .EmbedMedia }}
|
{{ range .EmbedMedia }}
|
||||||
<div class="timeline-content-box mt3 {{ if eq .Type mediaembed }}embed{{ end }} br2 overflow-hidden flex justify-center">
|
<div class="timeline-content-box mt3 {{ if eq .Type mediaembed }}embed{{ end }} br2 overflow-hidden flex {{ if not (eq .Type mediaunknown) }}timeline-item-bg justify-center{{ end }}">
|
||||||
{{ if eq .Type mediaimage }}
|
{{ if eq .Type mediaimage }}
|
||||||
<img src="{{ .AssetUrl }}">
|
<img src="{{ .AssetUrl }}">
|
||||||
{{ else if eq .Type mediavideo }}
|
{{ else if eq .Type mediavideo }}
|
||||||
|
|
|
@ -246,8 +246,9 @@ var HMNTemplateFuncs = template.FuncMap{
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"mediaimage": func() TimelineItemMediaType { return TimelineItemMediaTypeImage },
|
"mediaimage": func() TimelineItemMediaType { return TimelineItemMediaTypeImage },
|
||||||
"mediavideo": func() TimelineItemMediaType { return TimelineItemMediaTypeVideo },
|
"mediavideo": func() TimelineItemMediaType { return TimelineItemMediaTypeVideo },
|
||||||
"mediaaudio": func() TimelineItemMediaType { return TimelineItemMediaTypeAudio },
|
"mediaaudio": func() TimelineItemMediaType { return TimelineItemMediaTypeAudio },
|
||||||
"mediaembed": func() TimelineItemMediaType { return TimelineItemMediaTypeEmbed },
|
"mediaembed": func() TimelineItemMediaType { return TimelineItemMediaTypeEmbed },
|
||||||
|
"mediaunknown": func() TimelineItemMediaType { return TimelineItemMediaTypeUnknown },
|
||||||
}
|
}
|
||||||
|
|
|
@ -345,6 +345,10 @@ func AdminApprovalQueueSubmit(c *RequestContext) ResponseData {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to delete spammer's projects"))
|
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to delete spammer's projects"))
|
||||||
}
|
}
|
||||||
|
err = deleteAllSnippetsForUser(c, c.Conn, user.ID)
|
||||||
|
if err != nil {
|
||||||
|
return c.ErrorResponse(http.StatusInternalServerError, oops.New(err, "failed to delete spammer's snippets"))
|
||||||
|
}
|
||||||
whatHappened = fmt.Sprintf("%s banned successfully", user.Username)
|
whatHappened = fmt.Sprintf("%s banned successfully", user.Username)
|
||||||
} else {
|
} else {
|
||||||
whatHappened = fmt.Sprintf("Unrecognized action: %s", action)
|
whatHappened = fmt.Sprintf("Unrecognized action: %s", action)
|
||||||
|
@ -537,3 +541,17 @@ func deleteAllProjectsForUser(ctx context.Context, conn *pgxpool.Pool, userId in
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func deleteAllSnippetsForUser(ctx context.Context, conn *pgxpool.Pool, userId int) error {
|
||||||
|
_, err := conn.Exec(ctx,
|
||||||
|
`
|
||||||
|
DELETE FROM snippet
|
||||||
|
WHERE owner_id = $1
|
||||||
|
`,
|
||||||
|
userId,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return oops.New(err, "failed to delete snippets for user")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -471,7 +471,7 @@ func RequestPasswordResetSubmit(c *RequestContext) ResponseData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if user != nil {
|
if user != nil && user.Status != models.UserStatusBanned {
|
||||||
c.Perf.StartBlock("SQL", "Fetching existing token")
|
c.Perf.StartBlock("SQL", "Fetching existing token")
|
||||||
resetToken, err := db.QueryOne[models.OneTimeToken](c, c.Conn,
|
resetToken, err := db.QueryOne[models.OneTimeToken](c, c.Conn,
|
||||||
`
|
`
|
||||||
|
@ -679,6 +679,10 @@ func DoPasswordResetSubmit(c *RequestContext) ResponseData {
|
||||||
}
|
}
|
||||||
|
|
||||||
func tryLogin(c *RequestContext, user *models.User, password string) (bool, error) {
|
func tryLogin(c *RequestContext, user *models.User, password string) (bool, error) {
|
||||||
|
if user.Status == models.UserStatusBanned {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
c.Perf.StartBlock("AUTH", "Checking password")
|
c.Perf.StartBlock("AUTH", "Checking password")
|
||||||
defer c.Perf.EndBlock()
|
defer c.Perf.EndBlock()
|
||||||
hashed, err := auth.ParsePasswordString(user.Password)
|
hashed, err := auth.ParsePasswordString(user.Password)
|
||||||
|
|
Loading…
Reference in New Issue