Return proper HTTP status for files with an abuse status

This commit is contained in:
2021-03-04 15:42:46 +01:00
parent 5e8598f112
commit b481db7b45
4 changed files with 31 additions and 14 deletions

View File

@@ -2,7 +2,7 @@
<title>{{.}} ~ pixeldrain</title> <title>{{.}} ~ pixeldrain</title>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
<meta name="theme-color" content="#75AD38" /> <meta name="theme-color" content="#75B72D" />
<link rel="icon" sizes="32x32" href="/res/img/pixeldrain_32.png" /> <link rel="icon" sizes="32x32" href="/res/img/pixeldrain_32.png" />
<link rel="icon" sizes="128x128" href="/res/img/pixeldrain_128.png" /> <link rel="icon" sizes="128x128" href="/res/img/pixeldrain_128.png" />
<link rel="icon" sizes="152x152" href="/res/img/pixeldrain_152.png" /> <link rel="icon" sizes="152x152" href="/res/img/pixeldrain_152.png" />

View File

@@ -227,6 +227,9 @@ const keydown = e => {
if (e.ctrlKey || e.altKey || e.metaKey) { if (e.ctrlKey || e.altKey || e.metaKey) {
return // prevent custom shortcuts from interfering with system shortcuts return // prevent custom shortcuts from interfering with system shortcuts
} }
if (document.activeElement.type && document.activeElement.type === "text") {
return // Prevent shortcuts from interfering with input fields
}
switch (e.key) { switch (e.key) {
case "Escape": case "Escape":

View File

@@ -87,7 +87,7 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
templateData := wc.newTemplateData(w, r) templateData := wc.newTemplateData(w, r)
var finfo []apitype.ListFile var files []apitype.ListFile
for _, id := range ids { for _, id := range ids {
inf, err := templateData.PixelAPI.GetFileInfo(id) inf, err := templateData.PixelAPI.GetFileInfo(id)
if err != nil { if err != nil {
@@ -97,37 +97,37 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
} }
continue continue
} }
finfo = append(finfo, apitype.ListFile{FileInfo: inf}) files = append(files, apitype.ListFile{FileInfo: inf})
} }
if len(finfo) == 0 { if len(files) == 0 {
w.WriteHeader(http.StatusNotFound) w.WriteHeader(http.StatusNotFound)
wc.templates.Get().ExecuteTemplate(w, "file_not_found", templateData) wc.templates.Get().ExecuteTemplate(w, "file_not_found", templateData)
return return
} }
templateData.OGData = wc.metadataFromFile(finfo[0].FileInfo) templateData.OGData = wc.metadataFromFile(files[0].FileInfo)
var vd = viewerData{ var vd = viewerData{
CaptchaKey: wc.captchaKey(), CaptchaKey: wc.captchaKey(),
ViewToken: wc.viewTokenOrBust(), ViewToken: wc.viewTokenOrBust(),
AdType: adType(), AdType: adType(),
FileAdsEnabled: finfo[0].ShowAds, FileAdsEnabled: files[0].ShowAds,
UserAdsEnabled: !(templateData.Authenticated && templateData.User.Subscription.DisableAdDisplay), UserAdsEnabled: !(templateData.Authenticated && templateData.User.Subscription.DisableAdDisplay),
} }
if len(ids) > 1 { if len(ids) > 1 {
templateData.Title = fmt.Sprintf("%d files on pixeldrain", len(finfo)) templateData.Title = fmt.Sprintf("%d files on pixeldrain", len(files))
vd.Type = "list" vd.Type = "list"
vd.APIResponse = apitype.ListInfo{ vd.APIResponse = apitype.ListInfo{
Success: true, Success: true,
Title: "Multiple files", Title: "Multiple files",
DateCreated: time.Now(), DateCreated: time.Now(),
Files: finfo, Files: files,
} }
} else { } else {
templateData.Title = fmt.Sprintf("%s ~ pixeldrain", finfo[0].Name) templateData.Title = fmt.Sprintf("%s ~ pixeldrain", files[0].Name)
vd.Type = "file" vd.Type = "file"
vd.APIResponse = finfo[0].FileInfo vd.APIResponse = files[0].FileInfo
} }
templateData.Other = vd templateData.Other = vd
@@ -136,6 +136,13 @@ func (wc *WebController) serveFileViewer(w http.ResponseWriter, r *http.Request,
templateName = "file_viewer_compat" templateName = "file_viewer_compat"
} }
for _, file := range files {
if file.AbuseType != "" {
w.WriteHeader(http.StatusUnavailableForLegalReasons)
break
}
}
err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData) err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData)
if err != nil && !strings.Contains(err.Error(), "broken pipe") { if err != nil && !strings.Contains(err.Error(), "broken pipe") {
log.Error("Error executing template file_viewer: %s", err) log.Error("Error executing template file_viewer: %s", err)
@@ -212,6 +219,13 @@ func (wc *WebController) serveListViewer(w http.ResponseWriter, r *http.Request,
templateName = "file_viewer_compat" templateName = "file_viewer_compat"
} }
for _, file := range list.Files {
if file.AbuseType != "" {
w.WriteHeader(http.StatusUnavailableForLegalReasons)
break
}
}
err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData) err = wc.templates.Get().ExecuteTemplate(w, templateName, templateData)
if err != nil && !strings.Contains(err.Error(), "broken pipe") { if err != nil && !strings.Contains(err.Error(), "broken pipe") {
log.Error("Error executing template file_viewer: %s", err) log.Error("Error executing template file_viewer: %s", err)

View File

@@ -24,8 +24,8 @@ func (og *ogData) addLink(k, v string) { og.LinkRules = append(og.LinkRules,
func (wc *WebController) metadataFromFile(f apitype.FileInfo) (og ogData) { func (wc *WebController) metadataFromFile(f apitype.FileInfo) (og ogData) {
og.addOG("og:title", f.Name) og.addOG("og:title", f.Name)
og.addOG("og:site_name", "pixeldrain") og.addOG("og:site_name", "pixeldrain")
og.addOG("og:description", "View '"+f.Name+"' on pixeldrain") og.addOG("og:description", "This file has been shared with you on pixeldrain")
og.addOG("description", "View '"+f.Name+"' on pixeldrain") og.addOG("description", "This file has been shared with you on pixeldrain")
og.addOG("og:url", wc.websiteAddress+"/u/"+f.ID) og.addOG("og:url", wc.websiteAddress+"/u/"+f.ID)
og.addTwitter("twitter:title", f.Name) og.addTwitter("twitter:title", f.Name)
og.addTwitter("twitter:site", "@Fornax96") og.addTwitter("twitter:site", "@Fornax96")
@@ -71,8 +71,8 @@ func (wc *WebController) metadataFromList(l apitype.ListInfo) (og ogData) {
og.addOG("og:type", "website") og.addOG("og:type", "website")
og.addOG("og:title", l.Title) og.addOG("og:title", l.Title)
og.addOG("og:site_name", "pixeldrain") og.addOG("og:site_name", "pixeldrain")
og.addOG("og:description", "View '"+l.Title+"' on pixeldrain") og.addOG("og:description", "A collection of files on pixeldrain")
og.addOG("description", "View '"+l.Title+"' on pixeldrain") og.addOG("description", "A collection of files on pixeldrain")
og.addOG("og:url", wc.websiteAddress+"/l/"+l.ID) og.addOG("og:url", wc.websiteAddress+"/l/"+l.ID)
og.addTwitter("twitter:title", l.Title) og.addTwitter("twitter:title", l.Title)
og.addTwitter("twitter:site", "@Fornax96") og.addTwitter("twitter:site", "@Fornax96")