package config import "regexp" // Various hard-coded enums such as choice of gender, sexuality, relationship status etc. var ( MaritalStatus = []string{ "Single", "Married", "In a relationship", "It's complicated", "Divorced", "Widowed", "Widower", } RelationshipType = []string{ "Monogamous", "Open", } Gender = []string{ "Man", "Woman", "Non-binary", "Trans", "Trans (FTM)", "Trans (MTF)", "Other", } Orientation = []string{ "Straight", "Gay", "Bisexual", "Bicurious", "Pansexual", "Asexual", } HereFor = []string{ "Dating", "Relationship", "Platonic friends", "Networking", "Casual acquaintances", "Hookups", "Chat room", "Forums", "Galleries", "Exhibitionism", "Voyeurism", "Couch surfing", } // Enums all wrapped up for template use. ProfileEnums = map[string][]string{ "MaritalStatus": MaritalStatus, "RelationshipType": RelationshipType, "Gender": Gender, "Orientation": Orientation, "HereFor": HereFor, } // Input field names for profile fields. ProfileFields = []string{ "gender", "pronouns", "city", "job", "orientation", "marital_status", "relationship_type", "about_me", "interests", "music_movies", "hide_age", } EssayProfileFields = []string{ "about_me", "interests", "music_movies", } // Site preference names (stored in ProfileField table) SitePreferenceFields = []string{ "dm_privacy", "blur_explicit", "site_gallery_default", // default view on site gallery (friends-only or all certified?) "chat_moderation_rules", } // Website theme color hue choices. WebsiteThemeHueChoices = []OptGroup{ { Header: "Custom Themes", Options: []Option{ { Label: "Default (no added color; classic nonshy theme)", Value: "", }, { Label: "nonshy blue & pink", Value: "blue-pink", }, }, }, { Header: "Just a Splash of Color", Options: []Option{ { Label: "Burnt red", Value: "red", }, { Label: "Harvest orange", Value: "orange", }, { Label: "Golden yellow", Value: "yellow", }, { Label: "Leafy green", Value: "green", }, { Label: "Cool blue", Value: "blue", }, { Label: "Pretty in pink", Value: "pink", }, { Label: "Royal purple", Value: "purple", }, }, }, } // Choices for the Contact Us subject ContactUsChoices = []OptGroup{ { Header: "Website Feedback", Options: []Option{ {"feedback", "Website feedback"}, {"feature", "Make a feature request"}, {"bug", "Report a bug or broken feature"}, {"other", "General/miscellaneous/other"}, }, }, { Header: "Report a Problem", Options: []Option{ {"report.user", "Report a problematic user"}, {"report.photo", "Report a problematic photo"}, {"report.message", "Report a direct message conversation"}, {"report.comment", "Report a forum post or comment"}, {"report.forum", "Report a forum or community"}, {"forum.adopt", "Adopt a forum"}, }, }, } // Default forum categories for forum landing page. ForumCategories = []string{ "Rules and Announcements", "Nudists", "Exhibitionists", "Photo Boards", "Anything Goes", } // Forum Poll expiration options. PollExpires = []Option{ { Label: "Never", Value: "0", }, { Label: "1 Day", Value: "1", }, { Label: "2 Days", Value: "2", }, { Label: "3 Days", Value: "3", }, { Label: "4 Days", Value: "4", }, { Label: "5 Days", Value: "5", }, { Label: "6 Days", Value: "6", }, { Label: "7 Days", Value: "7", }, { Label: "2 Weeks", Value: "14", }, { Label: "1 Month (30 days)", Value: "30", }, } // Keywords that appear in a DM that make it likely spam. DirectMessageSpamKeywords = []*regexp.Regexp{ regexp.MustCompile(`\b(telegram|whats\s*app|signal|kik|session)\b`), regexp.MustCompile(`https?://(t.me|join.skype.com|zoom.us|whereby.com|meet.jit.si|wa.me)`), } // Chat Moderation Rules. ChatModerationRules = []ChecklistOption{ { Value: "redcam", Label: "Red camera", Help: "The user's camera is forced to 'explicit' when they are broadcasting.", }, { Value: "nobroadcast", Label: "No broadcast", Help: "The user can not broadcast their webcam, but may still watch other peoples' webcams.", }, { Value: "novideo", Label: "No webcam privileges ('Shy Accounts')", Help: "The user can not broadcast or watch any webcam. Note: this option supercedes all other video-related rules.", }, { Value: "noimage", Label: "No image sharing privileges ('Shy Accounts')", Help: "The user can not share or see any image shared on chat.", }, } ) // OptGroup choices for the subject drop-down. type OptGroup struct { Header string Options []Option } // Option for select boxes. type Option struct { Value string Label string } // ChecklistOption for checkbox-lists. type ChecklistOption struct { Value string Label string Help string } // NotificationOptout field values (stored in user ProfileField table) const ( NotificationOptOutFriendPhotos = "notif_optout_friends_photos" NotificationOptOutPrivatePhotos = "notif_optout_private_photos" NotificationOptOutExplicitPhotos = "notif_optout_explicit_photos" NotificationOptOutLikes = "notif_optout_likes" NotificationOptOutComments = "notif_optout_comments" NotificationOptOutSubscriptions = "notif_optout_subscriptions" NotificationOptOutFriendRequestAccepted = "notif_optout_friend_request_accepted" NotificationOptOutPrivateGrant = "notif_optout_private_grant" // Web Push Notifications PushNotificationOptOutMessage = "notif_optout_push_messages" PushNotificationOptOutFriends = "notif_optout_push_friends" ) // Notification opt-outs (stored in ProfileField table) var NotificationOptOutFields = []string{ NotificationOptOutFriendPhotos, NotificationOptOutPrivatePhotos, NotificationOptOutExplicitPhotos, NotificationOptOutLikes, NotificationOptOutComments, NotificationOptOutSubscriptions, NotificationOptOutFriendRequestAccepted, NotificationOptOutPrivateGrant, } // Push Notification opt-outs (stored in ProfileField table) var PushNotificationOptOutFields = []string{ PushNotificationOptOutMessage, PushNotificationOptOutFriends, }