Compare commits

...

3 Commits

Author SHA1 Message Date
Asaf Gartner 319b1a05b9 Delete snippets when banning and prevent banned users from logging in 2022-08-09 12:57:12 +03:00
Asaf Gartner 822a489c09 Don't center file links in snippets. 2022-08-09 12:33:52 +03:00
Asaf Gartner b62954ba37 Remove discord link for showcase items when not relevant 2022-08-09 12:27:32 +03:00
7 changed files with 42 additions and 13 deletions

View File

@ -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();

View File

@ -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; }

View File

@ -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;

View File

@ -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 }}

View File

@ -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 },
} }

View File

@ -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
}

View File

@ -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)