From f0e69f78dad30e32d589c001251bb54bec621494 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sun, 26 May 2024 12:34:00 -0700 Subject: [PATCH] Certification: Secondary Photo ID Workflow * Add an Admin Certification Photo workflow where we can request the user to upload a secondary form of ID (government issued photo ID showing their face and date of birth). * An admin rejection option can request secondary photo ID. * It sends a distinct e-mail to the user apart from the regular rejection email * It flags their cert photo as "Secondary Needed" forever: even if the user removes their cert photo and starts from scratch, it will immediately request secondary ID when uploading a new primary photo. * Secondary photos are deleted from the server on both Approve and Reject by the admin account, for user privacy. * If approved, a Secondary Approved=true boolean is stored in the database. This boolean is set to False if the user deletes their cert photo in the future. --- pkg/controller/photo/certification.go | 125 ++++++++++++++++-- pkg/models/certification.go | 25 ++-- pkg/models/notification.go | 1 + web/static/img/photoid-example.jpg | Bin 0 -> 57484 bytes web/templates/account/dashboard.html | 5 + web/templates/admin/certification.html | 53 ++++++-- .../email/certification_secondary.html | 34 +++++ web/templates/photo/certification.html | 109 ++++++++++++++- 8 files changed, 320 insertions(+), 32 deletions(-) create mode 100644 web/static/img/photoid-example.jpg create mode 100644 web/templates/email/certification_secondary.html diff --git a/pkg/controller/photo/certification.go b/pkg/controller/photo/certification.go index 064d231..3b54c77 100644 --- a/pkg/controller/photo/certification.go +++ b/pkg/controller/photo/certification.go @@ -72,6 +72,8 @@ func Certification() http.HandlerFunc { if r.Method == http.MethodPost { // Are they deleting their photo? if r.PostFormValue("delete") == "true" { + + // Primary cert photo if cert.Filename != "" { if err := photo.Delete(cert.Filename); err != nil { log.Error("Failed to delete old cert photo for %s (%s): %s", currentUser.Username, cert.Filename, err) @@ -79,8 +81,17 @@ func Certification() http.HandlerFunc { cert.Filename = "" } + // Secondary cert photo + if cert.SecondaryFilename != "" { + if err := photo.Delete(cert.SecondaryFilename); err != nil { + log.Error("Failed to delete old cert photo for %s (%s): %s", currentUser.Username, cert.SecondaryFilename, err) + } + cert.SecondaryFilename = "" + } + cert.Status = models.CertificationPhotoNeeded cert.AdminComment = "" + cert.SecondaryVerified = false cert.Save() // Removing your photo = not certified again. @@ -102,6 +113,9 @@ func Certification() http.HandlerFunc { return } + // Is it their secondary form of ID being uploaded? + isSecondary := r.PostFormValue("secondary") == "true" + // Get the uploaded file. file, header, err := r.FormFile("file") if err != nil { @@ -125,17 +139,38 @@ func Certification() http.HandlerFunc { } // Are they replacing their old photo? - if cert.Filename != "" { + if cert.Filename != "" && !isSecondary { if err := photo.Delete(cert.Filename); err != nil { log.Error("Failed to delete old cert photo for %s (%s): %s", currentUser.Username, cert.Filename, err) } + } else if isSecondary && cert.SecondaryFilename != "" { + if err := photo.Delete(cert.SecondaryFilename); err != nil { + log.Error("Failed to delete old cert photo for %s (%s): %s", currentUser.Username, cert.SecondaryFilename, err) + } } // Update their certification photo. cert.Status = models.CertificationPhotoPending - cert.Filename = filename + if isSecondary { + cert.SecondaryFilename = filename + cert.SecondaryNeeded = true + cert.SecondaryVerified = false + } else { + cert.Filename = filename + } cert.AdminComment = "" cert.IPAddress = utility.IPAddress(r) + + // Secondary ID workflow: if the user + // 1. Uploads a regular cert photo + // 2. An admin marks secondary ID as needed + // 3. They remove everything and reupload a new cert photo, without a secondary ID attached + // Then we don't e-mail the admin for approval yet, and move straight to Secondary ID Requested + // for the user to upload their secondary ID now. + if cert.Status == models.CertificationPhotoPending && cert.SecondaryNeeded && cert.SecondaryFilename == "" { + cert.Status = models.CertificationPhotoSecondary + } + if err := cert.Save(); err != nil { session.FlashError(w, r, "Error saving your CertificationPhoto: %s", err) templates.Redirect(w, r.URL.Path) @@ -154,16 +189,18 @@ func Certification() http.HandlerFunc { } // Notify the admin email to check out this photo. - if err := mail.Send(mail.Message{ - To: config.Current.AdminEmail, - Subject: "New Certification Photo Needs Approval", - Template: "email/certification_admin.html", - Data: map[string]interface{}{ - "User": currentUser, - "URL": config.Current.BaseURL + "/admin/photo/certification", - }, - }); err != nil { - log.Error("Certification: failed to notify admins of pending photo: %s", err) + if cert.Status == models.CertificationPhotoPending { + if err := mail.Send(mail.Message{ + To: config.Current.AdminEmail, + Subject: "New Certification Photo Needs Approval", + Template: "email/certification_admin.html", + Data: map[string]interface{}{ + "User": currentUser, + "URL": config.Current.BaseURL + "/admin/photo/certification", + }, + }); err != nil { + log.Error("Certification: failed to notify admins of pending photo: %s", err) + } } // Log the change. Note the original IP and GeoIP insights - we once saw a spammer upload @@ -319,9 +356,20 @@ func AdminCertification() http.HandlerFunc { } else { cert.Status = models.CertificationPhotoRejected cert.AdminComment = comment - if comment == "(ignore)" { + if comment == "(ignore)" || comment == "(secondary)" { cert.AdminComment = "" } + + // With a secondary photo ID? Remove the photo ID immediately. + if cert.SecondaryFilename != "" { + // Delete it immediately. + if err := photo.Delete(cert.SecondaryFilename); err != nil { + session.FlashError(w, r, "Failed to delete old secondary ID cert photo for %s (%s): %s", currentUser.Username, cert.SecondaryFilename, err) + } + cert.SecondaryFilename = "" + cert.SecondaryVerified = false + } + if err := cert.Save(); err != nil { session.FlashError(w, r, "Failed to save CertificationPhoto: %s", err) templates.Redirect(w, r.URL.Path) @@ -347,6 +395,46 @@ func AdminCertification() http.HandlerFunc { return } + // Secondary verification required: the user will be asked to upload a blacked-out + // photo ID to be certified again. + if comment == "(secondary)" { + cert.Status = models.CertificationPhotoSecondary + cert.SecondaryNeeded = true + cert.SecondaryVerified = false + if err := cert.Save(); err != nil { + log.Error("Error saving cert photo: %s", err) + } + + // Notify the user about this rejection. + notif := &models.Notification{ + UserID: user.ID, + AboutUser: *user, + Type: models.NotificationCertSecondary, + Message: "A secondary form of photo ID is requested. Please [click here](/photo/certification) to learn more.", + } + if err := models.CreateNotification(notif); err != nil { + log.Error("Couldn't create rejection notification: %s", err) + } + + // Notify the user via email. + if err := mail.Send(mail.Message{ + To: user.Email, + Subject: "Regarding your nonshy certification photo", + Template: "email/certification_secondary.html", + Data: map[string]interface{}{ + "Username": user.Username, + "AdminComment": comment, + "URL": config.Current.BaseURL + "/photo/certification", + }, + }); err != nil { + session.FlashError(w, r, "Note: failed to email user about the rejection: %s", err) + } + + session.Flash(w, r, "The user will be asked to provide a secondary form of ID.") + templates.Redirect(w, r.URL.Path) + return + } + // Notify the user about this rejection. notif := &models.Notification{ UserID: user.ID, @@ -377,6 +465,17 @@ func AdminCertification() http.HandlerFunc { case "approve": cert.Status = models.CertificationPhotoApproved cert.AdminComment = "" + + // With a secondary photo ID? + if cert.SecondaryFilename != "" { + // Delete it immediately. + if err := photo.Delete(cert.SecondaryFilename); err != nil { + session.FlashError(w, r, "Failed to delete old secondary ID cert photo for %s (%s): %s", currentUser.Username, cert.SecondaryFilename, err) + } + cert.SecondaryFilename = "" + cert.SecondaryVerified = true + } + if err := cert.Save(); err != nil { session.FlashError(w, r, "Failed to save CertificationPhoto: %s", err) templates.Redirect(w, r.URL.Path) diff --git a/pkg/models/certification.go b/pkg/models/certification.go index 98a72d8..de44fce 100644 --- a/pkg/models/certification.go +++ b/pkg/models/certification.go @@ -8,15 +8,18 @@ import ( // CertificationPhoto table. type CertificationPhoto struct { - ID uint64 `gorm:"primaryKey"` - UserID uint64 `gorm:"uniqueIndex"` - Filename string - Filesize int64 - Status CertificationPhotoStatus - AdminComment string - IPAddress string // the IP they uploaded the photo from - CreatedAt time.Time - UpdatedAt time.Time + ID uint64 `gorm:"primaryKey"` + UserID uint64 `gorm:"uniqueIndex"` + Filename string + Filesize int64 + Status CertificationPhotoStatus + AdminComment string + SecondaryNeeded bool // a secondary form of ID has been requested + SecondaryFilename string // photo ID upload + SecondaryVerified bool // mark true when ID checked so original can be deleted + IPAddress string // the IP they uploaded the photo from + CreatedAt time.Time + UpdatedAt time.Time } type CertificationPhotoStatus string @@ -26,6 +29,10 @@ const ( CertificationPhotoPending CertificationPhotoStatus = "pending" CertificationPhotoApproved CertificationPhotoStatus = "approved" CertificationPhotoRejected CertificationPhotoStatus = "rejected" + + // If a photo is pending approval but the admin wants to engage the + // secondary check (prompt user for a photo ID upload) + CertificationPhotoSecondary CertificationPhotoStatus = "secondary" ) // GetCertificationPhoto retrieves the user's record from the DB or upserts their initial record. diff --git a/pkg/models/notification.go b/pkg/models/notification.go index a04acb3..83901a3 100644 --- a/pkg/models/notification.go +++ b/pkg/models/notification.go @@ -41,6 +41,7 @@ const ( NotificationAlsoCommented NotificationType = "also_comment" NotificationAlsoPosted NotificationType = "also_posted" // forum replies NotificationCertRejected NotificationType = "cert_rejected" + NotificationCertSecondary NotificationType = "cert_secondary" // secondary cert photo requested NotificationCertApproved NotificationType = "cert_approved" NotificationPrivatePhoto NotificationType = "private_photo" // private photo grants NotificationNewPhoto NotificationType = "new_photo" diff --git a/web/static/img/photoid-example.jpg b/web/static/img/photoid-example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c51d1cc28d79d2541621aa007b962a6beecc579 GIT binary patch literal 57484 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 DXvJ@$ literal 0 HcmV?d00001 diff --git a/web/templates/account/dashboard.html b/web/templates/account/dashboard.html index a9173ca..a26758d 100644 --- a/web/templates/account/dashboard.html +++ b/web/templates/account/dashboard.html @@ -582,6 +582,11 @@ Your certification photo was approved! + {{else if eq .Type "cert_secondary"}} + + + About your certification photo: + {{else if eq .Type "cert_rejected"}} diff --git a/web/templates/admin/certification.html b/web/templates/admin/certification.html index 0c4caf7..53a4e7a 100644 --- a/web/templates/admin/certification.html +++ b/web/templates/admin/certification.html @@ -117,10 +117,30 @@ {{else}} {{.Status}} {{end}} + + + {{if .SecondaryVerified}} + + ID Verified + + {{end}} + + {{if .SecondaryFilename}} +
+
+ + + Secondary Photo ID Attached + +
+ +
+ {{end}} +
GeoIP Insights:
@@ -136,6 +156,15 @@
+ + {{if .SecondaryNeeded}} +
+ A secondary form of ID was requested from + this user once before. They will always be asked for a secondary ID if + they replace their cert photo in the future. +
+ {{end}} +