SYMBOL INDEX (1091 symbols across 172 files) FILE: cmd/admin.go type serverConfig (line 15) | type serverConfig struct method GetServerConfig (line 41) | func (a *App) GetServerConfig(c echo.Context) error { method GetDashboardCharts (line 94) | func (a *App) GetDashboardCharts(c echo.Context) error { method GetDashboardCounts (line 105) | func (a *App) GetDashboardCounts(c echo.Context) error { method ReloadApp (line 116) | func (a *App) ReloadApp(c echo.Context) error { FILE: cmd/archive.go type campArchive (line 17) | type campArchive struct method GetCampaignArchives (line 27) | func (a *App) GetCampaignArchives(c echo.Context) error { method GetCampaignArchivesFeed (line 53) | func (a *App) GetCampaignArchivesFeed(c echo.Context) error { method CampaignArchivesPage (line 99) | func (a *App) CampaignArchivesPage(c echo.Context) error { method CampaignArchivePage (line 119) | func (a *App) CampaignArchivePage(c echo.Context) error { method CampaignArchivePageLatest (line 177) | func (a *App) CampaignArchivePageLatest(c echo.Context) error { method getCampaignArchives (line 194) | func (a *App) getCampaignArchives(offset, limit int, renderBody bool) ([... method compileArchiveCampaigns (line 239) | func (a *App) compileArchiveCampaigns(camps []models.Campaign) ([]manage... FILE: cmd/auth.go constant passwordResetTTL (line 29) | passwordResetTTL = 30 * time.Minute constant twofaTokenTTL (line 30) | twofaTokenTTL = 5 * time.Minute constant tmpAuthTokenLen (line 33) | tmpAuthTokenLen = 64 type loginTpl (line 36) | type loginTpl struct type oidcState (line 48) | type oidcState struct type forgotPasswordTpl (line 53) | type forgotPasswordTpl struct type resetPasswordTpl (line 59) | type resetPasswordTpl struct type twofaTpl (line 67) | type twofaTpl struct method LoginPage (line 85) | func (a *App) LoginPage(c echo.Context) error { method LoginSetupPage (line 109) | func (a *App) LoginSetupPage(c echo.Context) error { method TwofaPage (line 127) | func (a *App) TwofaPage(c echo.Context) error { method Logout (line 168) | func (a *App) Logout(c echo.Context) error { method OIDCLogin (line 177) | func (a *App) OIDCLogin(c echo.Context) error { method OIDCFinish (line 204) | func (a *App) OIDCFinish(c echo.Context) error { method ForgotPage (line 275) | func (a *App) ForgotPage(c echo.Context) error { method ResetPage (line 287) | func (a *App) ResetPage(c echo.Context) error { method renderLoginPage (line 320) | func (a *App) renderLoginPage(c echo.Context, loginErr error) error { method renderLoginSetupPage (line 395) | func (a *App) renderLoginSetupPage(c echo.Context, loginErr error) error { method createOIDCUser (line 420) | func (a *App) createOIDCUser(claims auth.OIDCclaim, c echo.Context) (aut... method doLogin (line 450) | func (a *App) doLogin(c echo.Context) error { method doFirstTimeSetup (line 503) | func (a *App) doFirstTimeSetup(c echo.Context) error { method renderResetPasswordPage (line 570) | func (a *App) renderResetPasswordPage(c echo.Context, token, email, errM... method doForgotPassword (line 581) | func (a *App) doForgotPassword(c echo.Context) error { method doResetPassword (line 648) | func (a *App) doResetPassword(c echo.Context, token, email string) error { method renderTwofaPage (line 700) | func (a *App) renderTwofaPage(c echo.Context, token, next, errMsg string... method doTwofaVerify (line 712) | func (a *App) doTwofaVerify(c echo.Context, token string, userID int, ne... method GenerateTOTPQR (line 750) | func (a *App) GenerateTOTPQR(c echo.Context) error { FILE: cmd/bounce.go method GetBounce (line 15) | func (a *App) GetBounce(c echo.Context) error { method GetBounces (line 27) | func (a *App) GetBounces(c echo.Context) error { method GetSubscriberBounces (line 59) | func (a *App) GetSubscriberBounces(c echo.Context) error { method DeleteBounces (line 71) | func (a *App) DeleteBounces(c echo.Context) error { method DeleteBounce (line 97) | func (a *App) DeleteBounce(c echo.Context) error { method BlocklistBouncedSubscribers (line 108) | func (a *App) BlocklistBouncedSubscribers(c echo.Context) error { method BounceWebhook (line 117) | func (a *App) BounceWebhook(c echo.Context) error { method validateBounceFields (line 237) | func (a *App) validateBounceFields(b models.Bounce) (models.Bounce, erro... FILE: cmd/campaigns.go type campReq (line 26) | type campReq struct type campContentReq (line 43) | type campContentReq struct method GetCampaigns (line 55) | func (a *App) GetCampaigns(c echo.Context) error { method GetCampaign (line 112) | func (a *App) GetCampaign(c echo.Context) error { method PreviewCampaign (line 137) | func (a *App) PreviewCampaign(c echo.Context) error { method PreviewCampaignArchive (line 199) | func (a *App) PreviewCampaignArchive(c echo.Context) error { method CampaignContent (line 237) | func (a *App) CampaignContent(c echo.Context) error { method CreateCampaign (line 254) | func (a *App) CreateCampaign(c echo.Context) error { method UpdateCampaign (line 301) | func (a *App) UpdateCampaign(c echo.Context) error { method UpdateCampaignStatus (line 348) | func (a *App) UpdateCampaignStatus(c echo.Context) error { method UpdateCampaignArchive (line 379) | func (a *App) UpdateCampaignArchive(c echo.Context) error { method DeleteCampaign (line 414) | func (a *App) DeleteCampaign(c echo.Context) error { method DeleteCampaigns (line 432) | func (a *App) DeleteCampaigns(c echo.Context) error { method GetRunningCampaignStats (line 482) | func (a *App) GetRunningCampaignStats(c echo.Context) error { method TestCampaign (line 516) | func (a *App) TestCampaign(c echo.Context) error { method GetCampaignViewAnalytics (line 590) | func (a *App) GetCampaignViewAnalytics(c echo.Context) error { method sendTestMessage (line 631) | func (a *App) sendTestMessage(sub models.Subscriber, camp *models.Campai... method validateCampaignFields (line 649) | func (a *App) validateCampaignFields(c campReq) (campReq, error) { method makeOptinCampaignMessage (line 736) | func (a *App) makeOptinCampaignMessage(o campReq) (campReq, error) { method checkCampaignPerm (line 779) | func (a *App) checkCampaignPerm(types auth.PermType, id int, c echo.Cont... function canEditCampaign (line 816) | func canEditCampaign(status string) bool { FILE: cmd/events.go method EventStream (line 14) | func (a *App) EventStream(c echo.Context) error { FILE: cmd/handlers.go constant stdInputMaxLen (line 18) | stdInputMaxLen = 2000 constant uriAdmin (line 21) | uriAdmin = "/admin" type okResp (line 24) | type okResp struct function initHTTPHandlers (line 33) | func initHTTPHandlers(e *echo.Echo, a *App) { method AdminPage (line 307) | func (a *App) AdminPage(c echo.Context) error { method HealthCheck (line 319) | func (a *App) HealthCheck(c echo.Context) error { function serveCustomAppearance (line 325) | func serveCustomAppearance(name string) echo.HandlerFunc { method hasUUID (line 357) | func (a *App) hasUUID(next echo.HandlerFunc, params ...string) echo.Hand... function hasID (line 370) | func hasID(next echo.HandlerFunc) echo.HandlerFunc { method hasSub (line 384) | func (a *App) hasSub(next echo.HandlerFunc) echo.HandlerFunc { function noIndex (line 404) | func noIndex(next echo.HandlerFunc) echo.HandlerFunc { function getID (line 412) | func getID(c echo.Context) int { FILE: cmd/i18n.go type i18nLang (line 15) | type i18nLang struct type i18nLangRaw (line 20) | type i18nLangRaw struct method GetI18nLang (line 28) | func (a *App) GetI18nLang(c echo.Context) error { function getI18nLangList (line 43) | func getI18nLangList(fs stuffbin.FileSystem) ([]i18nLang, error) { function getI18nLang (line 75) | func getI18nLang(lang string, fs stuffbin.FileSystem) (*i18n.I18n, bool,... FILE: cmd/import.go method ImportSubscribers (line 17) | func (a *App) ImportSubscribers(c echo.Context) error { method GetImportSubscribers (line 112) | func (a *App) GetImportSubscribers(c echo.Context) error { method GetImportSubscriberStats (line 118) | func (a *App) GetImportSubscriberStats(c echo.Context) error { method StopImportSubscribers (line 125) | func (a *App) StopImportSubscribers(c echo.Context) error { FILE: cmd/init.go constant queryFilePath (line 60) | queryFilePath = "/queries" constant emailMsgr (line 62) | emailMsgr = "email" type UrlConfig (line 66) | type UrlConfig struct type Config (line 80) | type Config struct function initFlags (line 155) | func initFlags(ko *koanf.Koanf) { function initConfigFiles (line 185) | func initConfigFiles(files []string, ko *koanf.Koanf) { function initFS (line 199) | func initFS(appDir, frontendDir, staticDir, i18nDir string) stuffbin.Fil... function initDB (line 310) | func initDB() *sqlx.DB { function readQueries (line 341) | func readQueries(dir string, fs stuffbin.FileSystem) goyesql.Queries { function prepareQueries (line 373) | func prepareQueries(qMap goyesql.Queries, db *sqlx.DB, ko *koanf.Koanf) ... function initSettings (line 404) | func initSettings(query string, db *sqlx.DB, ko *koanf.Koanf) { function initUrlConfig (line 428) | func initUrlConfig(ko *koanf.Koanf) *UrlConfig { function initConstConfig (line 459) | func initConstConfig(ko *koanf.Koanf) *Config { function initI18n (line 522) | func initI18n(lang string, fs stuffbin.FileSystem) *i18n.I18n { function initCore (line 535) | func initCore(fnNotify func(sub models.Subscriber, listIDs []int) (int, ... function initCampaignManager (line 559) | func initCampaignManager(msgrs []manager.Messenger, q *models.Queries, u... function initTxTemplates (line 596) | func initTxTemplates(m *manager.Manager, co *core.Core) { function initImporter (line 613) | func initImporter(q *models.Queries, db *sqlx.DB, core *core.Core, i *i1... function initSMTPMessengers (line 636) | func initSMTPMessengers() []manager.Messenger { function initPostbackMessengers (line 687) | func initPostbackMessengers(ko *koanf.Koanf) []manager.Messenger { function initMediaStore (line 722) | func initMediaStore(ko *koanf.Koanf) media.Store { function initNotifs (line 757) | func initNotifs(fs stuffbin.FileSystem, i *i18n.I18n, em *email.Emailer,... function initBounceManager (line 790) | func initBounceManager(cb func(models.Bounce) error, stmt *sqlx.Stmt, lo... function initAbout (line 842) | func initAbout(q *models.Queries, db *sqlx.DB) about { function initHTTPServer (line 879) | func initHTTPServer(cfg *Config, urlCfg *UrlConfig, i *i18n.I18n, fs stu... function initCaptcha (line 948) | func initCaptcha() *captcha.Captcha { function initCron (line 958) | func initCron(co *core.Core, db *sqlx.DB) { function awaitReload (line 1003) | func awaitReload(sigChan chan os.Signal, closerWait chan bool, closer fu... function initTplFuncs (line 1037) | func initTplFuncs(i *i18n.I18n, u *UrlConfig) template.FuncMap { function initAuth (line 1071) | func initAuth(co *core.Core, db *sql.DB, ko *koanf.Koanf) (bool, *auth.A... function joinFSPaths (line 1146) | func joinFSPaths(root string, paths []string) []string { FILE: cmd/install.go function install (line 20) | func install(lastVer string, db *sqlx.DB, fs stuffbin.FileSystem, prompt... function installSchema (line 121) | func installSchema(curVer string, db *sqlx.DB, fs stuffbin.FileSystem) e... function installLists (line 135) | func installLists(q *models.Queries) (int, int) { function installSubs (line 166) | func installSubs(defListID, optinListID int, q *models.Queries) { function installTemplates (line 190) | func installTemplates(q *models.Queries) (int, int) { function installCampaign (line 243) | func installCampaign(campTplID, archiveTplID int, q *models.Queries) { function recordMigrationVersion (line 281) | func recordMigrationVersion(ver string, db *sqlx.DB) error { function newConfigFile (line 288) | func newConfigFile(path string) error { function checkSchema (line 305) | func checkSchema(db *sqlx.DB) (bool, error) { function installUser (line 315) | func installUser(username, password, apiUsername string, q *models.Queri... FILE: cmd/lists.go method GetLists (line 14) | func (a *App) GetLists(c echo.Context) error { method GetList (line 75) | func (a *App) GetList(c echo.Context) error { method CreateList (line 95) | func (a *App) CreateList(c echo.Context) error { method UpdateList (line 116) | func (a *App) UpdateList(c echo.Context) error { method DeleteList (line 147) | func (a *App) DeleteList(c echo.Context) error { method DeleteLists (line 166) | func (a *App) DeleteLists(c echo.Context) error { FILE: cmd/main.go type App (line 35) | type App struct function init (line 96) | func init() { function main (line 193) | func main() { FILE: cmd/maintenance.go method GCSubscribers (line 13) | func (a *App) GCSubscribers(c echo.Context) error { method GCSubscriptions (line 40) | func (a *App) GCSubscriptions(c echo.Context) error { method GCCampaignAnalytics (line 59) | func (a *App) GCCampaignAnalytics(c echo.Context) error { function RunDBVacuum (line 89) | func RunDBVacuum(db *sqlx.DB, lo *log.Logger) { FILE: cmd/manager_store.go type store (line 14) | type store struct method NextCampaigns (line 39) | func (s *store) NextCampaigns(currentIDs []int64, sentCounts []int64) ... method NextSubscribers (line 49) | func (s *store) NextSubscribers(campID, limit int) ([]models.Subscribe... method GetCampaign (line 70) | func (s *store) GetCampaign(campID int) (*models.Campaign, error) { method UpdateCampaignStatus (line 77) | func (s *store) UpdateCampaignStatus(campID int, status string) error { method UpdateCampaignCounts (line 83) | func (s *store) UpdateCampaignCounts(campID int, toSend int, sent int,... method GetAttachment (line 89) | func (s *store) GetAttachment(mediaID int) (models.Attachment, error) { method CreateLink (line 108) | func (s *store) CreateLink(url string) (string, error) { method RecordBounce (line 125) | func (s *store) RecordBounce(b models.Bounce) (int64, int, error) { method BlocklistSubscriber (line 143) | func (s *store) BlocklistSubscriber(id int64) error { method DeleteSubscriber (line 149) | func (s *store) DeleteSubscriber(id int64) error { type runningCamp (line 20) | type runningCamp struct function newManagerStore (line 28) | func newManagerStore(q *models.Queries, c *core.Core, m media.Store) *st... FILE: cmd/media.go constant thumbPrefix (line 16) | thumbPrefix = "thumb_" constant thumbnailSize (line 17) | thumbnailSize = 250 method UploadMedia (line 26) | func (a *App) UploadMedia(c echo.Context) error { method GetAllMedia (line 143) | func (a *App) GetAllMedia(c echo.Context) error { method GetMedia (line 166) | func (a *App) GetMedia(c echo.Context) error { method DeleteMedia (line 178) | func (a *App) DeleteMedia(c echo.Context) error { method ServeS3Media (line 195) | func (a *App) ServeS3Media(c echo.Context) error { function processImage (line 212) | func processImage(file *multipart.FileHeader) (*bytes.Reader, int, int, ... FILE: cmd/public.go constant tplMessage (line 25) | tplMessage = "message" type tplRenderer (line 29) | type tplRenderer struct method Render (line 106) | func (t *tplRenderer) Render(w io.Writer, name string, data any, c ech... type tplData (line 43) | type tplData struct type publicTpl (line 56) | type publicTpl struct type unsubTpl (line 61) | type unsubTpl struct type optinReq (line 73) | type optinReq struct type optinTpl (line 79) | type optinTpl struct type msgTpl (line 84) | type msgTpl struct type subFormTpl (line 90) | type subFormTpl struct method GetPublicLists (line 123) | func (a *App) GetPublicLists(c echo.Context) error { method ViewCampaignMessage (line 148) | func (a *App) ViewCampaignMessage(c echo.Context) error { method SubscriptionPage (line 197) | func (a *App) SubscriptionPage(c echo.Context) error { method SubscriptionPrefs (line 253) | func (a *App) SubscriptionPrefs(c echo.Context) error { method OptinPage (line 348) | func (a *App) OptinPage(c echo.Context) error { method SubscriptionFormPage (line 413) | func (a *App) SubscriptionFormPage(c echo.Context) error { method SubscriptionForm (line 452) | func (a *App) SubscriptionForm(c echo.Context) error { method PublicSubscription (line 516) | func (a *App) PublicSubscription(c echo.Context) error { method LinkRedirect (line 534) | func (a *App) LinkRedirect(c echo.Context) error { method RegisterCampaignView (line 569) | func (a *App) RegisterCampaignView(c echo.Context) error { method SelfExportSubscriberData (line 598) | func (a *App) SelfExportSubscriberData(c echo.Context) error { method WipeSubscriberData (line 654) | func (a *App) WipeSubscriberData(c echo.Context) error { method AltchaChallenge (line 673) | func (a *App) AltchaChallenge(c echo.Context) error { function drawTransparentImage (line 693) | func drawTransparentImage(h, w int) []byte { method processSubForm (line 706) | func (a *App) processSubForm(c echo.Context) (bool, error) { FILE: cmd/roles.go method GetUserRoles (line 13) | func (a *App) GetUserRoles(c echo.Context) error { method GeListRoles (line 24) | func (a *App) GeListRoles(c echo.Context) error { method CreateUserRole (line 35) | func (a *App) CreateUserRole(c echo.Context) error { method CreateListRole (line 54) | func (a *App) CreateListRole(c echo.Context) error { method UpdateUserRole (line 73) | func (a *App) UpdateUserRole(c echo.Context) error { method UpdateListRole (line 108) | func (a *App) UpdateListRole(c echo.Context) error { method DeleteRole (line 145) | func (a *App) DeleteRole(c echo.Context) error { method validateUserRole (line 167) | func (a *App) validateUserRole(r auth.Role) error { method validateListRole (line 181) | func (a *App) validateListRole(r auth.ListRole) error { FILE: cmd/settings.go constant pwdMask (line 29) | pwdMask = "•" type aboutHost (line 31) | type aboutHost struct type aboutSystem (line 37) | type aboutSystem struct type about (line 43) | type about struct method GetSettings (line 58) | func (a *App) GetSettings(c echo.Context) error { method UpdateSettings (line 86) | func (a *App) UpdateSettings(c echo.Context) error { method UpdateSettingsByKey (line 298) | func (a *App) UpdateSettingsByKey(c echo.Context) error { method handleSettingsRestart (line 320) | func (a *App) handleSettingsRestart(c echo.Context) error { method GetLogs (line 343) | func (a *App) GetLogs(c echo.Context) error { method TestSMTPSettings (line 348) | func (a *App) TestSMTPSettings(c echo.Context) error { method GetAboutInfo (line 403) | func (a *App) GetAboutInfo(c echo.Context) error { FILE: cmd/subscribers.go constant dummyUUID (line 23) | dummyUUID = "00000000-0000-0000-0000-000000000000" type subQueryReq (line 28) | type subQueryReq struct type subOptin (line 41) | type subOptin struct method GetSubscriber (line 59) | func (a *App) GetSubscriber(c echo.Context) error { method GetSubscriberActivity (line 78) | func (a *App) GetSubscriberActivity(c echo.Context) error { method QuerySubscribers (line 97) | func (a *App) QuerySubscribers(c echo.Context) error { method ExportSubscribers (line 143) | func (a *App) ExportSubscribers(c echo.Context) error { method CreateSubscriber (line 219) | func (a *App) CreateSubscriber(c echo.Context) error { method UpdateSubscriber (line 253) | func (a *App) UpdateSubscriber(c echo.Context) error { method SubscriberSendOptin (line 305) | func (a *App) SubscriberSendOptin(c echo.Context) error { method BlocklistSubscriber (line 322) | func (a *App) BlocklistSubscriber(c echo.Context) error { method BlocklistSubscribers (line 333) | func (a *App) BlocklistSubscribers(c echo.Context) error { method ManageSubscriberLists (line 355) | func (a *App) ManageSubscriberLists(c echo.Context) error { method DeleteSubscriber (line 416) | func (a *App) DeleteSubscriber(c echo.Context) error { method DeleteSubscribers (line 427) | func (a *App) DeleteSubscribers(c echo.Context) error { method DeleteSubscribersByQuery (line 449) | func (a *App) DeleteSubscribersByQuery(c echo.Context) error { method BlocklistSubscribersByQuery (line 486) | func (a *App) BlocklistSubscribersByQuery(c echo.Context) error { method ManageSubscriberListsByQuery (line 522) | func (a *App) ManageSubscriberListsByQuery(c echo.Context) error { method DeleteSubscriberBounces (line 571) | func (a *App) DeleteSubscriberBounces(c echo.Context) error { method ExportSubscriberData (line 585) | func (a *App) ExportSubscriberData(c echo.Context) error { method exportSubscriberData (line 607) | func (a *App) exportSubscriberData(id int, subUUID string, exportables m... method hasSubPerm (line 639) | func (a *App) hasSubPerm(u auth.User, subIDs []int) error { method filterListQueryByPerm (line 663) | func (a *App) filterListQueryByPerm(param string, qp url.Values, user au... function formatSQLExp (line 694) | func formatSQLExp(q string) string { function makeOptinNotifyHook (line 710) | func makeOptinNotifyHook(unsubHeader bool, u *UrlConfig, q *models.Queri... FILE: cmd/templates.go constant tplTag (line 18) | tplTag = `{{ template "content" . }}` constant dummyTpl (line 20) | dummyTpl = ` method GetTemplate (line 35) | func (a *App) GetTemplate(c echo.Context) error { method GetTemplates (line 50) | func (a *App) GetTemplates(c echo.Context) error { method PreviewTemplate (line 64) | func (a *App) PreviewTemplate(c echo.Context) error { method PreviewTemplateBody (line 82) | func (a *App) PreviewTemplateBody(c echo.Context) error { method CreateTemplate (line 108) | func (a *App) CreateTemplate(c echo.Context) error { method UpdateTemplate (line 148) | func (a *App) UpdateTemplate(c echo.Context) error { method TemplateSetDefault (line 189) | func (a *App) TemplateSetDefault(c echo.Context) error { method DeleteTemplate (line 200) | func (a *App) DeleteTemplate(c echo.Context) error { method validateTemplate (line 214) | func (a *App) validateTemplate(o models.Template) error { method previewTemplate (line 233) | func (a *App) previewTemplate(tpl models.Template) ([]byte, error) { FILE: cmd/tx.go method SendTxMessage (line 17) | func (a *App) SendTxMessage(c echo.Context) error { method validateTxMessage (line 179) | func (a *App) validateTxMessage(m models.TxMessage) (models.TxMessage, e... FILE: cmd/updates.go constant updateCheckURL (line 13) | updateCheckURL = "https://update.listmonk.app/update.json" type AppUpdate (line 15) | type AppUpdate struct method checkUpdates (line 39) | func (a *App) checkUpdates(curVersion string, interval time.Duration) { FILE: cmd/upgrade.go type migFunc (line 20) | type migFunc struct function upgrade (line 52) | func upgrade(db *sqlx.DB, fs stuffbin.FileSystem, prompt bool, record bo... function checkUpgrade (line 102) | func checkUpgrade(db *sqlx.DB) { function getPendingMigrations (line 124) | func getPendingMigrations(db *sqlx.DB) (string, []migFunc, error) { function getLastMigrationVersion (line 145) | func getLastMigrationVersion(db *sqlx.DB) (string, error) { function isTableNotExistErr (line 161) | func isTableNotExistErr(err error) bool { FILE: cmd/users.go method GetUser (line 22) | func (a *App) GetUser(c echo.Context) error { method GetUsers (line 37) | func (a *App) GetUsers(c echo.Context) error { method CreateUser (line 53) | func (a *App) CreateUser(c echo.Context) error { method UpdateUser (line 107) | func (a *App) UpdateUser(c echo.Context) error { method DeleteUser (line 185) | func (a *App) DeleteUser(c echo.Context) error { method DeleteUsers (line 201) | func (a *App) DeleteUsers(c echo.Context) error { method GetUserProfile (line 221) | func (a *App) GetUserProfile(c echo.Context) error { method UpdateUserProfile (line 233) | func (a *App) UpdateUserProfile(c echo.Context) error { method EnableTOTP (line 273) | func (a *App) EnableTOTP(c echo.Context) error { method DisableTOTP (line 309) | func (a *App) DisableTOTP(c echo.Context) error { function cacheUsers (line 341) | func cacheUsers(co *core.Core, a *auth.Auth) (bool, error) { FILE: cmd/utils.go function inArray (line 19) | func inArray(val string, vals []string) (ok bool) { function makeFilename (line 24) | func makeFilename(fName string) string { function appendSuffixToFilename (line 35) | func appendSuffixToFilename(filename, suffix string) string { function makeMsgTpl (line 44) | func makeMsgTpl(pageTitle, heading, msg string) msgTpl { function parseStringIDs (line 58) | func parseStringIDs(s []string) ([]int, error) { function generateRandomString (line 77) | func generateRandomString(n int) (string, error) { function strHasLen (line 92) | func strHasLen(str string, min, max int) bool { function getQueryInts (line 97) | func getQueryInts(param string, qp url.Values) ([]int, error) { FILE: docs/i18n/main.js constant BASEURL (line 1) | const BASEURL = "https://raw.githubusercontent.com/knadh/listmonk/master... constant BASELANG (line 2) | const BASELANG = "en"; method init (line 19) | init() { method loadBaseLang (line 24) | loadBaseLang(url) { method populateData (line 60) | populateData(data) { method loadLanguage (line 72) | loadLanguage(lang) { method saveData (line 81) | saveData() { method isDone (line 86) | isDone(key) { method isItemVisible (line 90) | isItemVisible(key) { method onToggleRaw (line 94) | onToggleRaw() { method onLoadLanguage (line 109) | onLoadLanguage() { method onNewLang (line 117) | onNewLang() { method onDownloadJSON (line 128) | onDownloadJSON() { method mounted (line 144) | mounted() { method view (line 149) | view(v) { method completed (line 174) | completed() { FILE: frontend/cypress.config.js method setupNodeEvents (line 21) | setupNodeEvents(on, config) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/index.tsx function renderMessage (line 20) | function renderMessage(val: string) { function ConfigurationPanel (line 28) | function ConfigurationPanel() { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/AvatarSidebarPanel.tsx type AvatarSidebarPanelProps (line 13) | type AvatarSidebarPanelProps = { function AvatarSidebarPanel (line 17) | function AvatarSidebarPanel({ data, setData }: AvatarSidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ButtonSidebarPanel.tsx type ButtonSidebarPanelProps (line 12) | type ButtonSidebarPanelProps = { function ButtonSidebarPanel (line 16) | function ButtonSidebarPanel({ data, setData }: ButtonSidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ColumnsContainerSidebarPanel.tsx type ColumnsContainerPanelProps (line 21) | type ColumnsContainerPanelProps = { function ColumnsContainerPanel (line 25) | function ColumnsContainerPanel({ data, setData }: ColumnsContainerPanelP... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ContainerSidebarPanel.tsx type ContainerSidebarPanelProps (line 8) | type ContainerSidebarPanelProps = { function ContainerSidebarPanel (line 13) | function ContainerSidebarPanel({ data, setData }: ContainerSidebarPanelP... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/DividerSidebarPanel.tsx type DividerSidebarPanelProps (line 11) | type DividerSidebarPanelProps = { function DividerSidebarPanel (line 15) | function DividerSidebarPanel({ data, setData }: DividerSidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/EmailLayoutSidebarPanel.tsx type EmailLayoutSidebarFieldsProps (line 14) | type EmailLayoutSidebarFieldsProps = { function EmailLayoutSidebarFields (line 18) | function EmailLayoutSidebarFields({ data, setData }: EmailLayoutSidebarF... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/HeadingSidebarPanel.tsx type HeadingSidebarPanelProps (line 11) | type HeadingSidebarPanelProps = { function HeadingSidebarPanel (line 15) | function HeadingSidebarPanel({ data, setData }: HeadingSidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/HtmlSidebarPanel.tsx type HtmlSidebarPanelProps (line 9) | type HtmlSidebarPanelProps = { function HtmlSidebarPanel (line 13) | function HtmlSidebarPanel({ data, setData }: HtmlSidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/ImageSidebarPanel.tsx type ImageSidebarPanelProps (line 17) | type ImageSidebarPanelProps = { function ImageSidebarPanel (line 21) | function ImageSidebarPanel({ data, setData }: ImageSidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/SpacerSidebarPanel.tsx type SpacerSidebarPanelProps (line 9) | type SpacerSidebarPanelProps = { function SpacerSidebarPanel (line 13) | function SpacerSidebarPanel({ data, setData }: SpacerSidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/TextSidebarPanel.tsx type TextSidebarPanelProps (line 10) | type TextSidebarPanelProps = { function TextSidebarPanel (line 14) | function TextSidebarPanel({ data, setData }: TextSidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/BaseSidebarPanel.tsx type SidebarPanelProps (line 5) | type SidebarPanelProps = { function BaseSidebarPanel (line 9) | function BaseSidebarPanel({ title, children }: SidebarPanelProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/BooleanInput.tsx type Props (line 5) | type Props = { function BooleanInput (line 11) | function BooleanInput({ label, defaultValue, onChange }: Props) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/BaseColorInput.tsx constant BUTTON_SX (line 8) | const BUTTON_SX = { type Props (line 17) | type Props = function ColorInput (line 30) | function ColorInput({ label, defaultValue, onChange, nullable }: Props) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/Picker.tsx constant DEFAULT_PRESET_COLORS (line 8) | const DEFAULT_PRESET_COLORS = [ type Props (line 72) | type Props = { function Picker (line 76) | function Picker({ value, onChange }: Props) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/Swatch.tsx type Props (line 5) | type Props = { constant TILE_BUTTON (line 11) | const TILE_BUTTON: SxProps = { function Swatch (line 15) | function Swatch({ paletteColors, value, onChange }: Props) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/index.tsx type Props (line 5) | type Props = { function ColorInput (line 10) | function ColorInput(props: Props) { type NullableProps (line 14) | type NullableProps = { function NullableColorInput (line 19) | function NullableColorInput(props: NullableProps) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColumnWidthsInput.tsx constant DEFAULT_2_COLUMNS (line 7) | const DEFAULT_2_COLUMNS = [6] as [number]; constant DEFAULT_3_COLUMNS (line 8) | const DEFAULT_3_COLUMNS = [4, 8] as [number, number]; type TWidthValue (line 10) | type TWidthValue = number | null | undefined; type FixedWidths (line 11) | type FixedWidths = [ type ColumnsLayoutInputProps (line 17) | type ColumnsLayoutInputProps = { function ColumnWidthsInput (line 21) | function ColumnWidthsInput({ defaultValue, onChange }: ColumnsLayoutInpu... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontFamily.tsx constant OPTIONS (line 7) | const OPTIONS = FONT_FAMILIES.map((option) => ( type NullableProps (line 13) | type NullableProps = { function NullableFontFamily (line 18) | function NullableFontFamily({ label, onChange, defaultValue }: NullableP... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontSizeInput.tsx type Props (line 8) | type Props = { function FontSizeInput (line 13) | function FontSizeInput({ label, defaultValue, onChange }: Props) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/FontWeightInput.tsx type Props (line 7) | type Props = { function FontWeightInput (line 12) | function FontWeightInput({ label, defaultValue, onChange }: Props) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/PaddingInput.tsx type TPaddingValue (line 13) | type TPaddingValue = { type Props (line 19) | type Props = { function PaddingInput (line 24) | function PaddingInput({ label, defaultValue, onChange }: Props) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/RadioGroupInput.tsx type Props (line 5) | type Props = { function RadioGroupInput (line 11) | function RadioGroupInput({ label, children, defaultValue, onChange }: Pr... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/SliderInput.tsx type SliderInputProps (line 7) | type SliderInputProps = { function SliderInput (line 21) | function SliderInput({ label, defaultValue, onChange, ...props }: Slider... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextAlignInput.tsx type Props (line 8) | type Props = { function TextAlignInput (line 13) | function TextAlignInput({ label, defaultValue, onChange }: Props) { FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextDimensionInput.tsx type TextDimensionInputProps (line 5) | type TextDimensionInputProps = { function TextDimensionInput (line 10) | function TextDimensionInput({ label, defaultValue, onChange }: TextDimen... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/TextInput.tsx type Props (line 5) | type Props = { function TextInput (line 15) | function TextInput({ helperText, label, placeholder, rows, InputProps, d... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/raw/RawSliderInput.tsx type SliderInputProps (line 5) | type SliderInputProps = { function RawSliderInput (line 18) | function RawSliderInput({ iconLabel, value, setValue, units, ...props }:... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/style-inputs/MultiStylePropertyPanel.tsx type MultiStylePropertyPanelProps (line 7) | type MultiStylePropertyPanelProps = { function MultiStylePropertyPanel (line 12) | function MultiStylePropertyPanel({ names, value, onChange }: MultiStyleP... FILE: frontend/email-builder/src/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/style-inputs/SingleStylePropertyPanel.tsx type StylePropertyPanelProps (line 14) | type StylePropertyPanelProps = { function SingleStylePropertyPanel (line 19) | function SingleStylePropertyPanel({ name, value, onChange }: StyleProper... FILE: frontend/email-builder/src/App/InspectorDrawer/StylesPanel.tsx function StylesPanel (line 7) | function StylesPanel() { FILE: frontend/email-builder/src/App/InspectorDrawer/ToggleInspectorPanelButton.tsx function ToggleInspectorPanelButton (line 8) | function ToggleInspectorPanelButton() { FILE: frontend/email-builder/src/App/InspectorDrawer/index.tsx constant INSPECTOR_DRAWER_WIDTH (line 12) | const INSPECTOR_DRAWER_WIDTH = 320; function InspectorDrawer (line 14) | function InspectorDrawer() { FILE: frontend/email-builder/src/App/TemplatePanel/DownloadJson/index.tsx function DownloadJson (line 8) | function DownloadJson() { FILE: frontend/email-builder/src/App/TemplatePanel/HtmlPanel.tsx function HtmlPanel (line 8) | function HtmlPanel() { FILE: frontend/email-builder/src/App/TemplatePanel/ImportJson/ImportJsonDialog.tsx type ImportJsonDialogProps (line 19) | type ImportJsonDialogProps = { function ImportJsonDialog (line 22) | function ImportJsonDialog({ onClose }: ImportJsonDialogProps) { FILE: frontend/email-builder/src/App/TemplatePanel/ImportJson/index.tsx function ImportJson (line 8) | function ImportJson() { FILE: frontend/email-builder/src/App/TemplatePanel/ImportJson/validateJsonStringValue.ts type TResult (line 3) | type TResult = { error: string; data?: undefined } | { data: TEditorConf... function validateTextAreaValue (line 5) | function validateTextAreaValue(value: string): TResult { FILE: frontend/email-builder/src/App/TemplatePanel/JsonPanel.tsx function JsonPanel (line 7) | function JsonPanel() { FILE: frontend/email-builder/src/App/TemplatePanel/MainTabsGroup.tsx function MainTabsGroup (line 8) | function MainTabsGroup() { FILE: frontend/email-builder/src/App/TemplatePanel/ShareButton.tsx function ShareButton (line 8) | function ShareButton() { FILE: frontend/email-builder/src/App/TemplatePanel/helper/HighlightedCodePanel.tsx type TextEditorPanelProps (line 5) | type TextEditorPanelProps = { function HighlightedCodePanel (line 9) | function HighlightedCodePanel({ type, value }: TextEditorPanelProps) { FILE: frontend/email-builder/src/App/TemplatePanel/helper/highlighters.tsx function html (line 12) | async function html(value: string): Promise { function json (line 20) | async function json(value: string): Promise { FILE: frontend/email-builder/src/App/TemplatePanel/index.tsx function TemplatePanel (line 22) | function TemplatePanel() { FILE: frontend/email-builder/src/App/index.tsx constant DEFAULT_SOURCE (line 10) | const DEFAULT_SOURCE: TEditorConfiguration = { function useDrawerTransition (line 17) | function useDrawerTransition(cssProperty: 'margin-left' | 'margin-right'... type AppProps (line 25) | interface AppProps { function App (line 34) | function App(props: AppProps) { FILE: frontend/email-builder/src/documents/blocks/ColumnsContainer/ColumnsContainerEditor.tsx constant EMPTY_COLUMNS (line 11) | const EMPTY_COLUMNS = [{ childrenIds: [] }, { childrenIds: [] }, { child... function ColumnsContainerEditor (line 13) | function ColumnsContainerEditor({ style, props }: ColumnsContainerProps) { FILE: frontend/email-builder/src/documents/blocks/ColumnsContainer/ColumnsContainerPropsSchema.ts type ColumnsContainerProps (line 22) | type ColumnsContainerProps = z.infer; FILE: frontend/email-builder/src/documents/blocks/Container/ContainerEditor.tsx function ContainerEditor (line 11) | function ContainerEditor({ style, props }: ContainerProps) { FILE: frontend/email-builder/src/documents/blocks/Container/ContainerPropsSchema.tsx type ContainerProps (line 17) | type ContainerProps = z.infer; FILE: frontend/email-builder/src/documents/blocks/EmailLayout/EmailLayoutEditor.tsx function getFontFamily (line 9) | function getFontFamily(fontFamily: EmailLayoutProps['fontFamily']) { function EmailLayoutEditor (line 33) | function EmailLayoutEditor(props: EmailLayoutProps) { FILE: frontend/email-builder/src/documents/blocks/EmailLayout/EmailLayoutPropsSchema.tsx constant COLOR_SCHEMA (line 3) | const COLOR_SCHEMA = z constant FONT_FAMILY_SCHEMA (line 9) | const FONT_FAMILY_SCHEMA = z type EmailLayoutProps (line 36) | type EmailLayoutProps = z.infer; FILE: frontend/email-builder/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/BlockButton.tsx type BlockMenuButtonProps (line 5) | type BlockMenuButtonProps = { constant BUTTON_SX (line 11) | const BUTTON_SX: SxProps = { p: 1.5, display: 'flex', flexDirection: 'co... constant ICON_SX (line 12) | const ICON_SX: SxProps = { function BlockTypeButton (line 23) | function BlockTypeButton({ label, icon, onClick }: BlockMenuButtonProps) { FILE: frontend/email-builder/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/BlocksMenu.tsx type BlocksMenuProps (line 10) | type BlocksMenuProps = { function BlocksMenu (line 15) | function BlocksMenu({ anchorEl, setAnchorEl, onSelect }: BlocksMenuProps) { FILE: frontend/email-builder/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/DividerButton.tsx type Props (line 6) | type Props = { function DividerButton (line 10) | function DividerButton({ buttonElement, onClick }: Props) { FILE: frontend/email-builder/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/PlaceholderButton.tsx type Props (line 6) | type Props = { function PlaceholderButton (line 9) | function PlaceholderButton({ onClick }: Props) { FILE: frontend/email-builder/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/buttons.tsx type TButtonProps (line 18) | type TButtonProps = { constant BUTTONS (line 23) | const BUTTONS: TButtonProps[] = [ FILE: frontend/email-builder/src/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/index.tsx type Props (line 9) | type Props = { function AddBlockButton (line 13) | function AddBlockButton({ onSelect, placeholder }: Props) { FILE: frontend/email-builder/src/documents/blocks/helpers/EditorChildrenIds/index.tsx type EditorChildrenChange (line 8) | type EditorChildrenChange = { function generateId (line 14) | function generateId() { type EditorChildrenIdsProps (line 18) | type EditorChildrenIdsProps = { function EditorChildrenIds (line 22) | function EditorChildrenIds({ childrenIds, onChange }: EditorChildrenIdsP... FILE: frontend/email-builder/src/documents/blocks/helpers/TStyle.ts type TStyle (line 3) | type TStyle = { FILE: frontend/email-builder/src/documents/blocks/helpers/block-wrappers/EditorBlockWrapper.tsx type TEditorBlockWrapperProps (line 10) | type TEditorBlockWrapperProps = { function EditorBlockWrapper (line 14) | function EditorBlockWrapper({ children }: TEditorBlockWrapperProps) { FILE: frontend/email-builder/src/documents/blocks/helpers/block-wrappers/ReaderBlockWrapper.tsx type TReaderBlockWrapperProps (line 5) | type TReaderBlockWrapperProps = { function ReaderBlockWrapper (line 10) | function ReaderBlockWrapper({ style, children }: TReaderBlockWrapperProp... FILE: frontend/email-builder/src/documents/blocks/helpers/block-wrappers/TuneMenu.tsx type Props (line 19) | type Props = { function TuneMenu (line 22) | function TuneMenu({ blockId }: Props) { FILE: frontend/email-builder/src/documents/blocks/helpers/fontFamily.ts constant FONT_FAMILIES (line 1) | const FONT_FAMILIES = [ constant FONT_FAMILY_NAMES (line 51) | const FONT_FAMILY_NAMES = [ FILE: frontend/email-builder/src/documents/blocks/helpers/zod.ts function zColor (line 5) | function zColor() { function zFontFamily (line 9) | function zFontFamily() { function zFontWeight (line 13) | function zFontWeight() { function zTextAlign (line 17) | function zTextAlign() { function zPadding (line 21) | function zPadding() { FILE: frontend/email-builder/src/documents/editor/EditorBlock.tsx type EditorBlockProps (line 9) | type EditorBlockProps = { function EditorBlock (line 18) | function EditorBlock({ id }: EditorBlockProps) { FILE: frontend/email-builder/src/documents/editor/EditorContext.tsx type TValue (line 8) | type TValue = { function useDocument (line 31) | function useDocument() { function subscribeDocument (line 35) | function subscribeDocument (listener: (selectedState: TEditorConfigurati... function useSelectedBlockId (line 39) | function useSelectedBlockId() { function useSelectedScreenSize (line 43) | function useSelectedScreenSize() { function useSelectedMainTab (line 47) | function useSelectedMainTab() { function setSelectedMainTab (line 51) | function setSelectedMainTab(selectedMainTab: TValue['selectedMainTab']) { function useSelectedSidebarTab (line 55) | function useSelectedSidebarTab() { function useInspectorDrawerOpen (line 59) | function useInspectorDrawerOpen() { function useSamplesDrawerOpen (line 63) | function useSamplesDrawerOpen() { function setSelectedBlockId (line 67) | function setSelectedBlockId(selectedBlockId: TValue['selectedBlockId']) { function setSidebarTab (line 80) | function setSidebarTab(selectedSidebarTab: TValue['selectedSidebarTab']) { function resetDocument (line 84) | function resetDocument(document: TValue['document']) { function setDocument (line 92) | function setDocument(document: TValue['document']) { function toggleInspectorDrawerOpen (line 102) | function toggleInspectorDrawerOpen() { function toggleSamplesDrawerOpen (line 107) | function toggleSamplesDrawerOpen() { function setSelectedScreenSize (line 112) | function setSelectedScreenSize(selectedScreenSize: TValue['selectedScree... FILE: frontend/email-builder/src/documents/editor/core.tsx constant EDITOR_DICTIONARY (line 26) | const EDITOR_DICTIONARY = buildBlockConfigurationDictionary({ type TEditorBlock (line 126) | type TEditorBlock = z.infer; type TEditorConfiguration (line 127) | type TEditorConfiguration = Record; FILE: frontend/email-builder/src/getConfiguration/index.tsx function getConfiguration (line 3) | function getConfiguration(template: string) { FILE: frontend/email-builder/src/getConfiguration/sample/empty-email-message.ts constant EMPTY_EMAIL_MESSAGE (line 3) | const EMPTY_EMAIL_MESSAGE: TEditorConfiguration = { FILE: frontend/email-builder/src/main.tsx function isRendered (line 9) | function isRendered(containerId: string): boolean { function render (line 18) | function render(containerId: string, props: AppProps, force: boolean = f... FILE: frontend/email-builder/src/theme.ts constant BRAND_NAVY (line 5) | const BRAND_NAVY = '#212443'; constant BRAND_BLUE (line 6) | const BRAND_BLUE = '#0079CC'; constant BRAND_GREEN (line 7) | const BRAND_GREEN = '#1F8466'; constant BRAND_RED (line 8) | const BRAND_RED = '#E81212'; constant BRAND_YELLOW (line 9) | const BRAND_YELLOW = '#F6DC9F'; constant BRAND_PURPLE (line 10) | const BRAND_PURPLE = '#6C0E7C'; constant BRAND_BROWN (line 11) | const BRAND_BROWN = '#CC996C'; constant STANDARD_FONT_FAMILY (line 12) | const STANDARD_FONT_FAMILY = 'sans-serif, "Segoe UI", Roboto, Helvetica,... constant MONOSPACE_FONT_FAMILY (line 13) | const MONOSPACE_FONT_FAMILY = 'monospace, Menlo, Monaco, "Segoe UI Mono"... constant BASE_THEME (line 15) | const BASE_THEME = createTheme({ constant THEME (line 30) | const THEME = createTheme(BASE_THEME, { FILE: frontend/email-builder/src/utils.tsx function renderHtmlWithMeta (line 4) | function renderHtmlWithMeta(document: TEditorConfiguration, options: { r... FILE: frontend/src/main.js function initConfig (line 34) | async function initConfig(app) { method loadConfig (line 101) | loadConfig() { method awaitRestart (line 108) | awaitRestart(response) { method mounted (line 131) | mounted() { FILE: frontend/src/router/index.js method scrollBehavior (line 147) | scrollBehavior(to) { FILE: frontend/src/store/index.js method setModelResponse (line 25) | setModelResponse(state, { model, data }) { method setLoading (line 33) | setLoading(state, { model, status }) { FILE: frontend/src/utils.js class Utils (line 28) | class Utils { method constructor (line 29) | constructor(i18n) { method formatNumber (line 121) | formatNumber(v) { FILE: internal/auth/auth.go type OIDCclaim (line 23) | type OIDCclaim struct type OIDCConfig (line 32) | type OIDCConfig struct type BasicAuthConfig (line 43) | type BasicAuthConfig struct type Config (line 49) | type Config struct type Callbacks (line 55) | type Callbacks struct type Auth (line 61) | type Auth struct method CacheAPIUsers (line 118) | func (o *Auth) CacheAPIUsers(users []User) { method CacheAPIUser (line 129) | func (o *Auth) CacheAPIUser(u User) { method GetAPIToken (line 136) | func (o *Auth) GetAPIToken(user string, token string) (User, bool) { method initOIDC (line 149) | func (o *Auth) initOIDC() error { method getProvider (line 176) | func (o *Auth) getProvider() (*oidc.Provider, error) { method getVerifier (line 189) | func (o *Auth) getVerifier() (*oidc.IDTokenVerifier, error) { method getOAuthConfig (line 202) | func (o *Auth) getOAuthConfig() (*oauth2.Config, error) { method GetOIDCAuthURL (line 215) | func (o *Auth) GetOIDCAuthURL(state, nonce string) string { method ExchangeOIDCToken (line 226) | func (o *Auth) ExchangeOIDCToken(code, nonce string) (string, OIDCclai... method Middleware (line 286) | func (o *Auth) Middleware(next echo.HandlerFunc) echo.HandlerFunc { method Perm (line 336) | func (o *Auth) Perm(next echo.HandlerFunc, perms ...string) echo.Handl... method SaveSession (line 370) | func (o *Auth) SaveSession(u User, oidcToken string, c echo.Context) e... method validateSession (line 386) | func (o *Auth) validateSession(c echo.Context) (*simplesessions.Sessio... function New (line 78) | func New(cfg Config, db *sql.DB, cb *Callbacks, lo *log.Logger) (*Auth, ... function GetUser (line 417) | func GetUser(c echo.Context) User { function parseAuthHeader (line 422) | func parseAuthHeader(h string) (string, string, error) { FILE: internal/auth/models.go type PermType (line 15) | type PermType constant PermTypeGet (line 18) | PermTypeGet PermType = 1 << iota constant PermTypeManage (line 19) | PermTypeManage constant UserHTTPCtxKey (line 24) | UserHTTPCtxKey = "auth_user" constant SessionKey (line 25) | SessionKey = "auth_session" constant SuperAdminRoleID (line 30) | SuperAdminRoleID = 1 constant UserTypeUser (line 33) | UserTypeUser = "user" constant UserTypeAPI (line 34) | UserTypeAPI = "api" constant UserStatusEnabled (line 35) | UserStatusEnabled = "enabled" constant UserStatusDisabled (line 36) | UserStatusDisabled = "disabled" constant RoleTypeUser (line 39) | RoleTypeUser = "user" constant RoleTypeList (line 40) | RoleTypeList = "list" constant PermListGetAll (line 45) | PermListGetAll = "lists:get_all" constant PermListManageAll (line 46) | PermListManageAll = "lists:manage_all" constant PermListManage (line 47) | PermListManage = "list:manage" constant PermListGet (line 48) | PermListGet = "list:get" constant PermSubscribersGet (line 49) | PermSubscribersGet = "subscribers:get" constant PermSubscribersGetAll (line 50) | PermSubscribersGetAll = "subscribers:get_all" constant PermSubscribersManage (line 51) | PermSubscribersManage = "subscribers:manage" constant PermSubscribersImport (line 52) | PermSubscribersImport = "subscribers:import" constant PermSubscribersSqlQuery (line 53) | PermSubscribersSqlQuery = "subscribers:sql_query" constant PermTxSend (line 54) | PermTxSend = "tx:send" constant PermCampaignsGet (line 55) | PermCampaignsGet = "campaigns:get" constant PermCampaignsGetAll (line 56) | PermCampaignsGetAll = "campaigns:get_all" constant PermCampaignsGetAnalytics (line 57) | PermCampaignsGetAnalytics = "campaigns:get_analytics" constant PermCampaignsManage (line 58) | PermCampaignsManage = "campaigns:manage" constant PermCampaignsManageAll (line 59) | PermCampaignsManageAll = "campaigns:manage_all" constant PermBouncesGet (line 60) | PermBouncesGet = "bounces:get" constant PermBouncesManage (line 61) | PermBouncesManage = "bounces:manage" constant PermWebhooksPostBounce (line 62) | PermWebhooksPostBounce = "webhooks:post_bounce" constant PermMediaGet (line 63) | PermMediaGet = "media:get" constant PermMediaManage (line 64) | PermMediaManage = "media:manage" constant PermTemplatesGet (line 65) | PermTemplatesGet = "templates:get" constant PermTemplatesManage (line 66) | PermTemplatesManage = "templates:manage" constant PermUsersGet (line 67) | PermUsersGet = "users:get" constant PermUsersManage (line 68) | PermUsersManage = "users:manage" constant PermRolesGet (line 69) | PermRolesGet = "roles:get" constant PermRolesManage (line 70) | PermRolesManage = "roles:manage" constant PermSettingsGet (line 71) | PermSettingsGet = "settings:get" constant PermSettingsManage (line 72) | PermSettingsManage = "settings:manage" constant PermSettingsMaintain (line 73) | PermSettingsMaintain = "settings:maintain" type Base (line 77) | type Base struct type User (line 84) | type User struct method HasPerm (line 160) | func (u *User) HasPerm(perm string) bool { method HasListPerm (line 172) | func (u *User) HasListPerm(types PermType, listIDs ...int) error { method hasListPerm (line 203) | func (u *User) hasListPerm(perm string, listID int) bool { method GetPermittedLists (line 221) | func (u *User) GetPermittedLists(types PermType) (bool, []int) { method FilterListsByPerm (line 270) | func (u *User) FilterListsByPerm(types PermType, listIDs []int) []int { type ListPermission (line 123) | type ListPermission struct type ListRolePermissions (line 129) | type ListRolePermissions struct type Role (line 135) | type Role struct type ListRole (line 148) | type ListRole struct FILE: internal/bounce/bounce.go type Mailbox (line 16) | type Mailbox interface type Opt (line 21) | type Opt struct type Manager (line 43) | type Manager struct method Run (line 109) | func (m *Manager) Run() { method runMailboxScanner (line 126) | func (m *Manager) runMailboxScanner() { method Record (line 138) | func (m *Manager) Record(b models.Bounce) error { type Queries (line 56) | type Queries struct function New (line 62) | func New(opt Opt, q *Queries, lo *log.Logger) (*Manager, error) { FILE: internal/bounce/mailbox/opt.go type Opt (line 6) | type Opt struct FILE: internal/bounce/mailbox/pop.go type POP (line 19) | type POP struct method Scan (line 79) | func (p *POP) Scan(limit int, ch chan models.Bounce) error { type bounceHeaders (line 25) | type bounceHeaders struct type bounceMeta (line 30) | type bounceMeta struct function NewPOP (line 63) | func NewPOP(opt Opt, lo *log.Logger) *POP { function classifyBounce (line 214) | func classifyBounce(b []byte) (string, string) { FILE: internal/bounce/webhooks/forwardemail.go type BounceDetails (line 16) | type BounceDetails struct type forwardemailNotif (line 25) | type forwardemailNotif struct type Forwardemail (line 41) | type Forwardemail struct method ProcessBounce (line 49) | func (p *Forwardemail) ProcessBounce(sigHex string, body []byte) ([]mo... function NewForwardemail (line 45) | func NewForwardemail(key []byte) *Forwardemail { FILE: internal/bounce/webhooks/postmark.go type postmarkNotif (line 15) | type postmarkNotif struct type Postmark (line 39) | type Postmark struct method ProcessBounce (line 52) | func (p *Postmark) ProcessBounce(b []byte, c echo.Context) ([]models.B... function NewPostmark (line 43) | func NewPostmark(username, password string) *Postmark { function makePostmarkAuthHandler (line 101) | func makePostmarkAuthHandler(cfgUser, cfgPassword string) func(username,... FILE: internal/bounce/webhooks/sendgrid.go type sendgridNotif (line 19) | type sendgridNotif struct type Sendgrid (line 32) | type Sendgrid struct method ProcessBounce (line 53) | func (s *Sendgrid) ProcessBounce(sig, timestamp string, b []byte) ([]m... method verifyNotif (line 90) | func (s *Sendgrid) verifyNotif(sig, timestamp string, b []byte) error { function NewSendgrid (line 37) | func NewSendgrid(key string) (*Sendgrid, error) { FILE: internal/bounce/webhooks/ses.go type sesNotif (line 28) | type sesNotif struct type sesTimestamp (line 46) | type sesTimestamp method UnmarshalJSON (line 260) | func (st *sesTimestamp) UnmarshalJSON(b []byte) error { type sesMail (line 48) | type sesMail struct type SES (line 67) | type SES struct method ProcessSubscription (line 80) | func (s *SES) ProcessSubscription(b []byte) error { method ProcessBounce (line 108) | func (s *SES) ProcessBounce(b []byte) (models.Bounce, error) { method buildSignature (line 175) | func (s *SES) buildSignature(n sesNotif) []byte { method verifyNotif (line 199) | func (s *SES) verifyNotif(n sesNotif) error { method getCert (line 216) | func (s *SES) getCert(certURL string) (*x509.Certificate, error) { function NewSES (line 72) | func NewSES() *SES { FILE: internal/buflog/buflog.go type BufLog (line 11) | type BufLog struct method Write (line 30) | func (bu *BufLog) Write(b []byte) (n int, err error) { method Lines (line 44) | func (bu *BufLog) Lines() []string { function New (line 20) | func New(maxLines int) *BufLog { FILE: internal/captcha/captcha.go constant hCaptchaURL (line 19) | hCaptchaURL = "https://hcaptcha.com/siteverify" type hCaptchaResp (line 22) | type hCaptchaResp struct constant ProviderNone (line 28) | ProviderNone = "" constant ProviderHCaptcha (line 29) | ProviderHCaptcha = "hcaptcha" constant ProviderAltcha (line 30) | ProviderAltcha = "altcha" type Captcha (line 34) | type Captcha struct method IsEnabled (line 105) | func (c *Captcha) IsEnabled() bool { method GetProvider (line 110) | func (c *Captcha) GetProvider() string { method GenerateChallenge (line 117) | func (c *Captcha) GenerateChallenge() (string, error) { method Verify (line 147) | func (c *Captcha) Verify(token string) (error, bool) { method verifyHCaptcha (line 159) | func (c *Captcha) verifyHCaptcha(token string) (error, bool) { method verifyAltcha (line 187) | func (c *Captcha) verifyAltcha(payload string) (error, bool) { type Opt (line 41) | type Opt struct type hCaptchaOpt (line 53) | type hCaptchaOpt struct type altchaOpt (line 57) | type altchaOpt struct function New (line 63) | func New(o Opt) *Captcha { FILE: internal/core/bounces.go method QueryBounces (line 16) | func (c *Core) QueryBounces(campID, subID int, source, orderBy, order st... method GetBounce (line 41) | func (c *Core) GetBounce(id int) (models.Bounce, error) { method RecordBounce (line 60) | func (c *Core) RecordBounce(b models.Bounce) error { method BlocklistBouncedSubscribers (line 90) | func (c *Core) BlocklistBouncedSubscribers() error { method DeleteBounce (line 100) | func (c *Core) DeleteBounce(id int) error { method DeleteBounces (line 105) | func (c *Core) DeleteBounces(ids []int, all bool) error { FILE: internal/core/campaigns.go constant CampaignAnalyticsViews (line 16) | CampaignAnalyticsViews = "views" constant CampaignAnalyticsClicks (line 17) | CampaignAnalyticsClicks = "clicks" constant CampaignAnalyticsBounces (line 18) | CampaignAnalyticsBounces = "bounces" constant campaignTplDefault (line 20) | campaignTplDefault = "default" constant campaignTplArchive (line 21) | campaignTplArchive = "archive" method QueryCampaigns (line 26) | func (c *Core) QueryCampaigns(searchStr string, statuses, tags []string,... method GetCampaign (line 68) | func (c *Core) GetCampaign(id int, uuid, archiveSlug string) (models.Cam... method GetArchivedCampaign (line 73) | func (c *Core) GetArchivedCampaign(id int, uuid, archiveSlug string) (mo... method getCampaign (line 90) | func (c *Core) getCampaign(id int, uuid, archiveSlug string, tplType str... method GetCampaignForPreview (line 129) | func (c *Core) GetCampaignForPreview(id, tplID int) (models.Campaign, er... method GetArchivedCampaigns (line 146) | func (c *Core) GetArchivedCampaigns(offset, limit int) (models.Campaigns... method CreateCampaign (line 163) | func (c *Core) CreateCampaign(o models.Campaign, listIDs []int, mediaIDs... method UpdateCampaign (line 214) | func (c *Core) UpdateCampaign(id int, o models.Campaign, listIDs []int, ... method UpdateCampaignStatus (line 250) | func (c *Core) UpdateCampaignStatus(id int, status string) (models.Campa... method UpdateCampaignArchive (line 306) | func (c *Core) UpdateCampaignArchive(id int, enabled bool, tplID int, me... method DeleteCampaign (line 318) | func (c *Core) DeleteCampaign(id int) error { method DeleteCampaigns (line 336) | func (c *Core) DeleteCampaigns(ids []int, query string, hasAllPerm bool,... method CampaignHasLists (line 355) | func (c *Core) CampaignHasLists(id int, listIDs []int) (bool, error) { method GetRunningCampaignStats (line 367) | func (c *Core) GetRunningCampaignStats() ([]models.CampaignStats, error) { method GetCampaignAnalyticsCounts (line 384) | func (c *Core) GetCampaignAnalyticsCounts(campIDs []int, typ, fromDate, ... method GetCampaignAnalyticsLinks (line 413) | func (c *Core) GetCampaignAnalyticsLinks(campIDs []int, typ, fromDate, t... method RegisterCampaignView (line 425) | func (c *Core) RegisterCampaignView(campUUID, subUUID string) error { method GetLinkURL (line 439) | func (c *Core) GetLinkURL(linkUUID string) (string, error) { method RegisterCampaignLinkClick (line 449) | func (c *Core) RegisterCampaignLinkClick(linkUUID, campUUID, subUUID str... method DeleteCampaignViews (line 464) | func (c *Core) DeleteCampaignViews(before time.Time) error { method DeleteCampaignLinkClicks (line 474) | func (c *Core) DeleteCampaignLinkClicks(before time.Time) error { FILE: internal/core/core.go constant SortAsc (line 23) | SortAsc = "asc" constant SortDesc (line 24) | SortDesc = "desc" constant matDashboardCharts (line 26) | matDashboardCharts = "mat_dashboard_charts" constant matDashboardCounts (line 27) | matDashboardCounts = "mat_dashboard_counts" constant matListSubStats (line 28) | matListSubStats = "mat_list_subscriber_stats" type Core (line 32) | type Core struct method RefreshMatViews (line 91) | func (c *Core) RefreshMatViews(concurrent bool) error { method RefreshMatView (line 99) | func (c *Core) RefreshMatView(name string, concurrent bool) error { method refreshCache (line 116) | func (c *Core) refreshCache(name string, concurrent bool) error { type Constants (line 43) | type Constants struct type Hooks (line 53) | type Hooks struct type Opt (line 58) | type Opt struct function New (line 79) | func New(o *Opt, h *Hooks) *Core { function pqErrMsg (line 126) | func pqErrMsg(err error) string { function makeSearchQuery (line 138) | func makeSearchQuery(searchStr, orderBy, order, query string, querySortF... function makeSearchString (line 155) | func makeSearchString(searchStr string) string { function strSliceContains (line 163) | func strSliceContains(str string, sl []string) bool { function normalizeTags (line 175) | func normalizeTags(tags []string) []string { function sanitizeSQLExp (line 193) | func sanitizeSQLExp(q string) string { function strHasLen (line 207) | func strHasLen(str string, min, max int) bool { FILE: internal/core/dashboard.go method GetDashboardCharts (line 11) | func (c *Core) GetDashboardCharts() (types.JSONText, error) { method GetDashboardCounts (line 24) | func (c *Core) GetDashboardCounts() (types.JSONText, error) { FILE: internal/core/lists.go type listType (line 12) | type listType struct method GetLists (line 19) | func (c *Core) GetLists(typ, status string, getAll bool, permittedIDs []... method QueryLists (line 45) | func (c *Core) QueryLists(searchStr, typ, optin, status string, tags []s... method GetList (line 78) | func (c *Core) GetList(id int, uuid string) (models.List, error) { method GetListsByOptin (line 110) | func (c *Core) GetListsByOptin(ids []int, optinType string) ([]models.Li... method GetListTypes (line 126) | func (c *Core) GetListTypes(ids []int, uuids []string) (map[any]string, ... method CreateList (line 149) | func (c *Core) CreateList(l models.List) (models.List, error) { method UpdateList (line 180) | func (c *Core) UpdateList(id int, l models.List) (models.List, error) { method DeleteList (line 197) | func (c *Core) DeleteList(id int) error { method DeleteLists (line 202) | func (c *Core) DeleteLists(ids []int, query string, getAll bool, permitt... FILE: internal/core/media.go method QueryMedia (line 17) | func (c *Core) QueryMedia(provider string, s media.Store, query string, ... method GetMedia (line 47) | func (c *Core) GetMedia(id int, uuid, fileName string, s media.Store) (m... method InsertMedia (line 73) | func (c *Core) InsertMedia(fileName, thumbName, contentType string, meta... method DeleteMedia (line 93) | func (c *Core) DeleteMedia(id int) (string, error) { FILE: internal/core/roles.go method GetRoles (line 13) | func (c *Core) GetRoles() ([]auth.Role, error) { method GetRole (line 24) | func (c *Core) GetRole(id int) (auth.Role, error) { method GetListRoles (line 41) | func (c *Core) GetListRoles() ([]auth.ListRole, error) { method CreateRole (line 63) | func (c *Core) CreateRole(r auth.Role) (auth.Role, error) { method CreateListRole (line 75) | func (c *Core) CreateListRole(r auth.ListRole) (auth.ListRole, error) { method UpsertListPermissions (line 92) | func (c *Core) UpsertListPermissions(roleID int, lp []auth.ListPermissio... method DeleteListPermission (line 120) | func (c *Core) DeleteListPermission(roleID, listID int) error { method UpdateUserRole (line 133) | func (c *Core) UpdateUserRole(id int, r auth.Role) (auth.Role, error) { method UpdateListRole (line 149) | func (c *Core) UpdateListRole(id int, r auth.ListRole) (auth.ListRole, e... method DeleteRole (line 170) | func (c *Core) DeleteRole(id int) error { FILE: internal/core/settings.go method GetSettings (line 13) | func (c *Core) GetSettings() (models.Settings, error) { method UpdateSettings (line 35) | func (c *Core) UpdateSettings(s models.Settings) error { method UpdateSettingsByKey (line 53) | func (c *Core) UpdateSettingsByKey(key string, value json.RawMessage) er... FILE: internal/core/subscribers.go method GetSubscriber (line 34) | func (c *Core) GetSubscriber(id int, uuid, email string) (models.Subscri... method HasSubscriberLists (line 63) | func (c *Core) HasSubscriberLists(subIDs []int, listIDs []int) (map[int]... method GetSubscribersByEmail (line 84) | func (c *Core) GetSubscribersByEmail(emails []string) (models.Subscriber... method QuerySubscribers (line 106) | func (c *Core) QuerySubscribers(searchStr, queryExp string, listIDs []in... method GetSubscriberLists (line 174) | func (c *Core) GetSubscriberLists(subID int, uuid string, listIDs []int,... method GetSubscriberProfileForExport (line 201) | func (c *Core) GetSubscriberProfileForExport(id int, uuid string) (model... method GetSubscriberActivity (line 219) | func (c *Core) GetSubscriberActivity(id int) (models.SubscriberActivity,... method ExportSubscribers (line 235) | func (c *Core) ExportSubscribers(searchStr, query string, subIDs, listID... method InsertSubscriber (line 286) | func (c *Core) InsertSubscriber(sub models.Subscriber, listIDs []int, li... method UpdateSubscriber (line 352) | func (c *Core) UpdateSubscriber(id int, sub models.Subscriber) (models.S... method UpdateSubscriberWithLists (line 388) | func (c *Core) UpdateSubscriberWithLists(id int, sub models.Subscriber, ... method BlocklistSubscribers (line 441) | func (c *Core) BlocklistSubscribers(subIDs []int) error { method BlocklistSubscribersByQuery (line 452) | func (c *Core) BlocklistSubscribersByQuery(searchStr, queryExp string, l... method DeleteSubscribers (line 463) | func (c *Core) DeleteSubscribers(subIDs []int, subUUIDs []string) error { method DeleteSubscribersByQuery (line 481) | func (c *Core) DeleteSubscribersByQuery(searchStr, queryExp string, list... method UnsubscribeByCampaign (line 493) | func (c *Core) UnsubscribeByCampaign(subUUID, campUUID string, blocklist... method ConfirmOptionSubscription (line 504) | func (c *Core) ConfirmOptionSubscription(subUUID string, listUUIDs []str... method DeleteSubscriberBounces (line 519) | func (c *Core) DeleteSubscriberBounces(id int, uuid string) error { method DeleteOrphanSubscribers (line 535) | func (c *Core) DeleteOrphanSubscribers() (int, error) { method DeleteBlocklistedSubscribers (line 548) | func (c *Core) DeleteBlocklistedSubscribers() (int, error) { method getSubscriberCount (line 560) | func (c *Core) getSubscriberCount(searchStr, queryExp, subStatus string,... function validateQueryTables (line 595) | func validateQueryTables(db *sqlx.DB, query string, allowedTables map[st... function getTablesFromQueryPlan (line 625) | func getTablesFromQueryPlan(explainJSON string) ([]string, error) { function traverseQueryPlan (line 644) | func traverseQueryPlan(node map[string]any, tables map[string]struct{}) { FILE: internal/core/subscriptions.go method GetSubscriptions (line 13) | func (c *Core) GetSubscriptions(subID int, subUUID string, allLists bool... method AddSubscriptions (line 26) | func (c *Core) AddSubscriptions(subIDs, listIDs []int, status string) er... method AddSubscriptionsByQuery (line 38) | func (c *Core) AddSubscriptionsByQuery(searchStr, queryExp string, sourc... method DeleteSubscriptions (line 54) | func (c *Core) DeleteSubscriptions(subIDs, listIDs []int) error { method DeleteSubscriptionsByQuery (line 67) | func (c *Core) DeleteSubscriptionsByQuery(searchStr, queryExp string, so... method UnsubscribeLists (line 83) | func (c *Core) UnsubscribeLists(subIDs, listIDs []int, listUUIDs []strin... method UnsubscribeListsByQuery (line 95) | func (c *Core) UnsubscribeListsByQuery(searchStr, queryExp string, sourc... method DeleteUnconfirmedSubscriptions (line 112) | func (c *Core) DeleteUnconfirmedSubscriptions(beforeDate time.Time) (int... FILE: internal/core/templates.go method GetTemplates (line 13) | func (c *Core) GetTemplates(status string, noBody bool) ([]models.Templa... method GetTemplate (line 24) | func (c *Core) GetTemplate(id int, noBody bool) (models.Template, error) { method CreateTemplate (line 40) | func (c *Core) CreateTemplate(name, typ, subject string, body []byte, bo... method UpdateTemplate (line 51) | func (c *Core) UpdateTemplate(id int, name, subject string, body []byte,... method SetDefaultTemplate (line 67) | func (c *Core) SetDefaultTemplate(id int) error { method DeleteTemplate (line 77) | func (c *Core) DeleteTemplate(id int) error { FILE: internal/core/users.go method GetUsers (line 15) | func (c *Core) GetUsers() ([]auth.User, error) { method GetUser (line 26) | func (c *Core) GetUser(id int, username, email string) (auth.User, error) { method CreateUser (line 43) | func (c *Core) CreateUser(u auth.User) (auth.User, error) { method UpdateUser (line 76) | func (c *Core) UpdateUser(id int, u auth.User) (auth.User, error) { method UpdateUserProfile (line 100) | func (c *Core) UpdateUserProfile(id int, u auth.User) (auth.User, error) { method UpdateUserLogin (line 116) | func (c *Core) UpdateUserLogin(id int, avatar string) error { method SetTwoFA (line 126) | func (c *Core) SetTwoFA(id int, twofaType, twofaKey string) error { method DeleteUsers (line 136) | func (c *Core) DeleteUsers(ids []int) error { method LoginUser (line 150) | func (c *Core) LoginUser(username, password string) (auth.User, error) { method setupUserFields (line 165) | func (c *Core) setupUserFields(users []auth.User) []auth.User { FILE: internal/events/events.go constant TypeError (line 14) | TypeError = "error" type Event (line 18) | type Event struct type Events (line 26) | type Events struct method Subscribe (line 41) | func (ev *Events) Subscribe(id string) (chan Event, error) { method Unsubscribe (line 56) | func (ev *Events) Unsubscribe(id string) { method Publish (line 63) | func (ev *Events) Publish(e Event) error { method ErrWriter (line 98) | func (ev *Events) ErrWriter() io.Writer { function New (line 32) | func New() *Events { type wri (line 80) | type wri struct method Write (line 84) | func (w *wri) Write(b []byte) (n int, err error) { FILE: internal/i18n/i18n.go type I18n (line 14) | type I18n struct method Load (line 48) | func (i *I18n) Load(b []byte) error { method JSON (line 62) | func (i *I18n) JSON() []byte { method T (line 68) | func (i *I18n) T(key string) string { method Ts (line 86) | func (i *I18n) Ts(key string, params ...string) string { method Tc (line 109) | func (i *I18n) Tc(key string, n int) string { method getSingular (line 125) | func (i *I18n) getSingular(s string) string { method getPlural (line 135) | func (i *I18n) getPlural(s string) string { method subAllParams (line 149) | func (i *I18n) subAllParams(s string) string { function New (line 23) | func New(b []byte) (*I18n, error) { FILE: internal/manager/manager.go constant BaseTPL (line 25) | BaseTPL = "base" constant ContentTpl (line 28) | ContentTpl = "content" constant dummyUUID (line 30) | dummyUUID = "00000000-0000-0000-0000-000000000000" type Store (line 35) | type Store interface type Messenger (line 49) | type Messenger interface type CampStats (line 57) | type CampStats struct type Manager (line 63) | type Manager struct method AddMessenger (line 184) | func (m *Manager) AddMessenger(msg Messenger) error { method PushMessage (line 196) | func (m *Manager) PushMessage(msg models.Message) error { method PushCampaignMessage (line 212) | func (m *Manager) PushCampaignMessage(msg CampaignMessage) error { method HasMessenger (line 232) | func (m *Manager) HasMessenger(id string) bool { method HasRunningCampaigns (line 239) | func (m *Manager) HasRunningCampaigns() bool { method GetCampaignStats (line 247) | func (m *Manager) GetCampaignStats(id int) CampStats { method Run (line 265) | func (m *Manager) Run() { method CacheTpl (line 318) | func (m *Manager) CacheTpl(id int, tpl *models.Template) { method DeleteTpl (line 325) | func (m *Manager) DeleteTpl(id int) { method GetTpl (line 332) | func (m *Manager) GetTpl(id int) (*models.Template, error) { method TemplateFuncs (line 346) | func (m *Manager) TemplateFuncs(c *models.Campaign) template.FuncMap { method GenericTemplateFuncs (line 400) | func (m *Manager) GenericTemplateFuncs() template.FuncMap { method StopCampaign (line 405) | func (m *Manager) StopCampaign(id int) { method Close (line 414) | func (m *Manager) Close() { method scanCampaigns (line 422) | func (m *Manager) scanCampaigns(tick time.Duration) { method worker (line 462) | func (m *Manager) worker() { method getCurrentCampaigns (line 563) | func (m *Manager) getCurrentCampaigns() ([]int64, []int64) { method trackLink (line 586) | func (m *Manager) trackLink(url, campUUID, subUUID string) string { method sendNotif (line 617) | func (m *Manager) sendNotif(c *models.Campaign, status, reason string)... method makeGnericFuncMap (line 635) | func (m *Manager) makeGnericFuncMap() template.FuncMap { method attachMedia (line 664) | func (m *Manager) attachMedia(c *models.Campaign) error { type CampaignMessage (line 99) | type CampaignMessage struct type Config (line 114) | type Config struct function New (line 150) | func New(cfg Config, store Store, i *i18n.I18n, l *log.Logger) *Manager { function MakeAttachmentHeader (line 685) | func MakeAttachmentHeader(filename, encoding, contentType string) textpr... FILE: internal/manager/message.go method NewCampaignMessage (line 13) | func (m *Manager) NewCampaignMessage(c *models.Campaign, s models.Subscr... method render (line 33) | func (m *CampaignMessage) render() error { method Subject (line 68) | func (m *CampaignMessage) Subject() string { method Body (line 73) | func (m *CampaignMessage) Body() []byte { method AltBody (line 80) | func (m *CampaignMessage) AltBody() []byte { FILE: internal/manager/pipe.go type pipe (line 13) | type pipe struct method NextSubscribers (line 76) | func (p *pipe) NextSubscribers() (bool, error) { method OnError (line 138) | func (p *pipe) OnError() { method Stop (line 156) | func (p *pipe) Stop(withErrors bool) { method newMessage (line 172) | func (p *pipe) newMessage(s models.Subscriber) (CampaignMessage, error) { method cleanup (line 187) | func (p *pipe) cleanup() { method newPipe (line 27) | func (m *Manager) newPipe(c *models.Campaign) (*pipe, error) { FILE: internal/media/media.go type Media (line 11) | type Media struct type Store (line 27) | type Store interface FILE: internal/media/providers/filesystem/filesystem.go type Opts (line 13) | type Opts struct type Client (line 20) | type Client struct method Put (line 32) | func (c *Client) Put(filename string, cType string, src io.ReadSeeker)... method GetURL (line 52) | func (c *Client) GetURL(name string) string { method GetBlob (line 57) | func (c *Client) GetBlob(url string) ([]byte, error) { method Delete (line 63) | func (c *Client) Delete(file string) error { function New (line 25) | func New(opts Opts) (media.Store, error) { function getDir (line 72) | func getDir(dir string) string { FILE: internal/media/providers/s3/s3.go type Opt (line 16) | type Opt struct type Client (line 30) | type Client struct method Put (line 67) | func (c *Client) Put(name string, cType string, file io.ReadSeeker) (s... method GetURL (line 91) | func (c *Client) GetURL(name string) string { method GetBlob (line 112) | func (c *Client) GetBlob(uurl string) ([]byte, error) { method Delete (line 139) | func (c *Client) Delete(name string) error { method makeBucketPath (line 150) | func (c *Client) makeBucketPath(name string) string { method makeFileURL (line 161) | func (c *Client) makeFileURL(name string) string { function NewS3Store (line 37) | func NewS3Store(opt Opt) (media.Store, error) { FILE: internal/messenger/email/email.go constant MessengerName (line 16) | MessengerName = "email" constant hdrReturnPath (line 18) | hdrReturnPath = "Return-Path" constant hdrBcc (line 19) | hdrBcc = "Bcc" constant hdrCc (line 20) | hdrCc = "Cc" type Server (line 24) | type Server struct type Emailer (line 43) | type Emailer struct method Name (line 106) | func (e *Emailer) Name() string { method Push (line 111) | func (e *Emailer) Push(m models.Message) error { method Flush (line 196) | func (e *Emailer) Flush() error { method Close (line 201) | func (e *Emailer) Close() error { function New (line 51) | func New(name string, servers ...Server) (*Emailer, error) { FILE: internal/messenger/postback/postback.go type postback (line 18) | type postback struct type campaign (line 28) | type campaign struct type recipient (line 36) | type recipient struct type attachment (line 44) | type attachment struct type Options (line 51) | type Options struct type Postback (line 62) | type Postback struct method Name (line 92) | func (p *Postback) Name() string { method Push (line 97) | func (p *Postback) Push(m models.Message) error { method Flush (line 145) | func (p *Postback) Flush() error { method Close (line 150) | func (p *Postback) Close() error { method exec (line 156) | func (p *Postback) exec(method, rURL string, reqBody []byte, headers h... function New (line 69) | func New(o Options) (*Postback, error) { FILE: internal/messenger/postback/postback_easyjson.go function easyjsonDf11841fDecodeGithubComKnadhListmonkInternalMessengerPostback (line 22) | func easyjsonDf11841fDecodeGithubComKnadhListmonkInternalMessengerPostba... function easyjsonDf11841fEncodeGithubComKnadhListmonkInternalMessengerPostback (line 115) | func easyjsonDf11841fEncodeGithubComKnadhListmonkInternalMessengerPostba... method MarshalJSON (line 184) | func (v postback) MarshalJSON() ([]byte, error) { method MarshalEasyJSON (line 191) | func (v postback) MarshalEasyJSON(w *jwriter.Writer) { method UnmarshalJSON (line 196) | func (v *postback) UnmarshalJSON(data []byte) error { method UnmarshalEasyJSON (line 203) | func (v *postback) UnmarshalEasyJSON(l *jlexer.Lexer) { function easyjsonDf11841fDecodeGithubComKnadhListmonkInternalMessengerPostback3 (line 206) | func easyjsonDf11841fDecodeGithubComKnadhListmonkInternalMessengerPostba... function easyjsonDf11841fEncodeGithubComKnadhListmonkInternalMessengerPostback3 (line 281) | func easyjsonDf11841fEncodeGithubComKnadhListmonkInternalMessengerPostba... function easyjsonDf11841fDecodeGithubComKnadhListmonkInternalMessengerPostback2 (line 329) | func easyjsonDf11841fDecodeGithubComKnadhListmonkInternalMessengerPostba... function easyjsonDf11841fEncodeGithubComKnadhListmonkInternalMessengerPostback2 (line 424) | func easyjsonDf11841fEncodeGithubComKnadhListmonkInternalMessengerPostba... function easyjsonDf11841fDecodeGithubComKnadhListmonkInternalMessengerPostback1 (line 493) | func easyjsonDf11841fDecodeGithubComKnadhListmonkInternalMessengerPostba... function easyjsonDf11841fEncodeGithubComKnadhListmonkInternalMessengerPostback1 (line 552) | func easyjsonDf11841fEncodeGithubComKnadhListmonkInternalMessengerPostba... FILE: internal/migrations/v0.4.0.go function V0_4_0 (line 12) | func V0_4_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v0.7.0.go function V0_7_0 (line 12) | func V0_7_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v0.8.0.go function V0_8_0 (line 12) | func V0_8_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v0.9.0.go function V0_9_0 (line 13) | func V0_9_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v1.0.0.go function V1_0_0 (line 12) | func V1_0_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v2.0.0.go function V2_0_0 (line 12) | func V2_0_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v2.1.0.go function V2_1_0 (line 12) | func V2_1_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v2.2.0.go function V2_2_0 (line 12) | func V2_2_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v2.3.0.go function V2_3_0 (line 12) | func V2_3_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v2.4.0.go function V2_4_0 (line 12) | func V2_4_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v2.5.0.go function V2_5_0 (line 12) | func V2_5_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v3.0.0.go function V3_0_0 (line 12) | func V3_0_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v4.0.0.go function V4_0_0 (line 15) | func V4_0_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v4.1.0.go function V4_1_0 (line 12) | func V4_1_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v5.0.0.go function V5_0_0 (line 12) | func V5_0_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v5.1.0.go function V5_1_0 (line 11) | func V5_1_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v6.0.0.go function V6_0_0 (line 11) | func V6_0_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/migrations/v6.1.0.go function V6_1_0 (line 11) | func V6_1_0(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf, lo *lo... FILE: internal/notifs/notifs.go constant TplImport (line 20) | TplImport = "import-status" constant TplCampaignStatus (line 21) | TplCampaignStatus = "campaign-status" constant TplSubscriberOptin (line 22) | TplSubscriberOptin = "subscriber-optin" constant TplSubscriberData (line 23) | TplSubscriberData = "subscriber-data" constant TplForgotPassword (line 24) | TplForgotPassword = "forgot-password" type FuncPush (line 27) | type FuncPush type FuncNotif (line 28) | type FuncNotif type FuncNotifSystem (line 29) | type FuncNotifSystem type Opt (line 31) | type Opt struct type Notifs (line 37) | type Notifs struct function Initialize (line 52) | func Initialize(opt Opt, tpls *template.Template, em *email.Emailer, lo ... function NotifySystem (line 66) | func NotifySystem(subject, tplName string, data any, hdr textproto.MIMEH... function Notify (line 71) | func Notify(toEmails []string, subject, tplName string, data any, hdr te... function GetTplSubject (line 106) | func GetTplSubject(subject string, body []byte) (string, []byte) { FILE: internal/subimporter/importer.go constant commitBatchSize (line 35) | commitBatchSize = 10000 constant StatusNone (line 40) | StatusNone = "none" constant StatusImporting (line 41) | StatusImporting = "importing" constant StatusStopping (line 42) | StatusStopping = "stopping" constant StatusFinished (line 43) | StatusFinished = "finished" constant StatusFailed (line 44) | StatusFailed = "failed" constant ModeSubscribe (line 46) | ModeSubscribe = "subscribe" constant ModeBlocklist (line 47) | ModeBlocklist = "blocklist" type Importer (line 51) | type Importer struct method NewSession (line 167) | func (im *Importer) NewSession(opt SessionOpt) (*Session, error) { method GetStats (line 197) | func (im *Importer) GetStats() Status { method GetLogs (line 210) | func (im *Importer) GetLogs() []byte { method setStatus (line 222) | func (im *Importer) setStatus(status string) { method getStatus (line 229) | func (im *Importer) getStatus() string { method isDone (line 237) | func (im *Importer) isDone() bool { method incrementImportCount (line 249) | func (im *Importer) incrementImportCount(n int) { method sendNotif (line 256) | func (im *Importer) sendNotif(status string) error { method Stop (line 588) | func (im *Importer) Stop() { method SanitizeEmail (line 606) | func (im *Importer) SanitizeEmail(email string) (string, error) { method ValidateFields (line 643) | func (im *Importer) ValidateFields(s SubReq) (SubReq, error) { method checkInList (line 671) | func (im *Importer) checkInList(domain string, hasWildcards bool, mp m... type Options (line 70) | type Options struct type Session (line 81) | type Session struct method Start (line 273) | func (s *Session) Start() { method Stop (line 366) | func (s *Session) Stop() { method ExtractZIP (line 373) | func (s *Session) ExtractZIP(srcPath string, maxCSVs int) (string, []s... method LoadCSV (line 452) | func (s *Session) LoadCSV(srcPath string, delim rune) error { method mapCSVHeaders (line 697) | func (s *Session) mapCSVHeaders(csvHdrs []string, knownHdrs map[string... type SessionOpt (line 90) | type SessionOpt struct type Status (line 102) | type Status struct type SubReq (line 111) | type SubReq struct type importStatusTpl (line 118) | type importStatusTpl struct function New (line 139) | func New(opt Options, db *sql.DB, i *i18n.I18n) *Importer { function countLines (line 717) | func countLines(r io.Reader) (int, error) { function makeDomainMap (line 747) | func makeDomainMap(domains []string) (map[string]struct{}, bool) { FILE: internal/tmptokens/tmptokens.go constant maxTries (line 15) | maxTries = 15 type Token (line 19) | type Token struct function init (line 33) | func init() { function Set (line 46) | func Set(id string, ttl time.Duration, data any) { function Check (line 62) | func Check(id string) (any, error) { function Get (line 94) | func Get(id string) (any, error) { function Delete (line 116) | func Delete(id string) { function Clean (line 125) | func Clean() { FILE: internal/utils/utils.go function ValidateEmail (line 12) | func ValidateEmail(email string) bool { function GenerateRandomString (line 25) | func GenerateRandomString(n int) (string, error) { function SanitizeURI (line 41) | func SanitizeURI(u string) string { FILE: models/bounces.go constant BounceTypeHard (line 9) | BounceTypeHard = "hard" constant BounceTypeSoft (line 10) | BounceTypeSoft = "soft" constant BounceTypeComplaint (line 11) | BounceTypeComplaint = "complaint" type Bounce (line 15) | type Bounce struct FILE: models/campaigns.go constant CampaignStatusDraft (line 19) | CampaignStatusDraft = "draft" constant CampaignStatusScheduled (line 20) | CampaignStatusScheduled = "scheduled" constant CampaignStatusRunning (line 21) | CampaignStatusRunning = "running" constant CampaignStatusPaused (line 22) | CampaignStatusPaused = "paused" constant CampaignStatusFinished (line 23) | CampaignStatusFinished = "finished" constant CampaignStatusCancelled (line 24) | CampaignStatusCancelled = "cancelled" constant CampaignTypeRegular (line 25) | CampaignTypeRegular = "regular" constant CampaignTypeOptin (line 26) | CampaignTypeOptin = "optin" constant CampaignContentTypeRichtext (line 27) | CampaignContentTypeRichtext = "richtext" constant CampaignContentTypeHTML (line 28) | CampaignContentTypeHTML = "html" constant CampaignContentTypeMarkdown (line 29) | CampaignContentTypeMarkdown = "markdown" constant CampaignContentTypePlain (line 30) | CampaignContentTypePlain = "plain" constant CampaignContentTypeVisual (line 31) | CampaignContentTypeVisual = "visual" type Campaigns (line 35) | type Campaigns method GetIDs (line 103) | func (camps Campaigns) GetIDs() []int { method LoadStats (line 113) | func (camps Campaigns) LoadStats(stmt *sqlx.Stmt) error { type Campaign (line 38) | type Campaign struct method CompileTemplate (line 138) | func (c *Campaign) CompileTemplate(f template.FuncMap) error { method ConvertContent (line 214) | func (c *Campaign) ConvertContent(from, to string) (string, error) { type CampaignMeta (line 83) | type CampaignMeta struct FILE: models/common.go constant EmailHeaderSubscriberUUID (line 19) | EmailHeaderSubscriberUUID = "X-Listmonk-Subscriber" constant EmailHeaderCampaignUUID (line 20) | EmailHeaderCampaignUUID = "X-Listmonk-Campaign" constant EmailHeaderDate (line 23) | EmailHeaderDate = "Date" constant EmailHeaderFrom (line 24) | EmailHeaderFrom = "From" constant EmailHeaderSubject (line 25) | EmailHeaderSubject = "Subject" constant EmailHeaderMessageId (line 26) | EmailHeaderMessageId = "Message-Id" constant EmailHeaderDeliveredTo (line 27) | EmailHeaderDeliveredTo = "Delivered-To" constant EmailHeaderReceived (line 28) | EmailHeaderReceived = "Received" constant TwofaTypeNone (line 31) | TwofaTypeNone = "none" constant TwofaTypeTOTP (line 32) | TwofaTypeTOTP = "totp" type regTplFunc (line 38) | type regTplFunc struct type Headers (line 92) | type Headers method Scan (line 150) | func (h *Headers) Scan(src any) error { method Value (line 169) | func (h Headers) Value() (driver.Value, error) { type PageResults (line 95) | type PageResults struct type Base (line 106) | type Base struct type JSON (line 113) | type JSON method Value (line 119) | func (s JSON) Value() (driver.Value, error) { method Scan (line 124) | func (s JSON) Scan(b any) error { type StringIntMap (line 116) | type StringIntMap method Scan (line 137) | func (s StringIntMap) Scan(src any) error { FILE: models/lists.go constant ListTypePrivate (line 9) | ListTypePrivate = "private" constant ListTypePublic (line 10) | ListTypePublic = "public" constant ListOptinSingle (line 11) | ListOptinSingle = "single" constant ListOptinDouble (line 12) | ListOptinDouble = "double" constant ListStatusActive (line 13) | ListStatusActive = "active" constant ListStatusArchived (line 14) | ListStatusArchived = "archived" type List (line 18) | type List struct FILE: models/messages.go type Message (line 13) | type Message struct type Attachment (line 34) | type Attachment struct constant TxSubModeDefault (line 42) | TxSubModeDefault = "default" constant TxSubModeFallback (line 43) | TxSubModeFallback = "fallback" constant TxSubModeExternal (line 44) | TxSubModeExternal = "external" type TxMessage (line 48) | type TxMessage struct method Render (line 74) | func (m *TxMessage) Render(sub Subscriber, tpl *Template, funcs txttpl... FILE: models/queries.go type Queries (line 13) | type Queries struct method compileSubscriberQueryTpl (line 145) | func (q *Queries) compileSubscriberQueryTpl(searchStr, queryExp string... method ExecSubQueryTpl (line 170) | func (q *Queries) ExecSubQueryTpl(searchStr, queryExp, baseQueryTpl st... FILE: models/settings.go type Settings (line 6) | type Settings struct FILE: models/subscribers.go constant SubscriberStatusEnabled (line 15) | SubscriberStatusEnabled = "enabled" constant SubscriberStatusDisabled (line 16) | SubscriberStatusDisabled = "disabled" constant SubscriberStatusBlockListed (line 17) | SubscriberStatusBlockListed = "blocklisted" constant SubscriptionStatusUnconfirmed (line 19) | SubscriptionStatusUnconfirmed = "unconfirmed" constant SubscriptionStatusConfirmed (line 20) | SubscriptionStatusConfirmed = "confirmed" constant SubscriptionStatusUnsubscribed (line 21) | SubscriptionStatusUnsubscribed = "unsubscribed" type Subscribers (line 25) | type Subscribers method GetIDs (line 45) | func (subs Subscribers) GetIDs() []int { method LoadLists (line 56) | func (subs Subscribers) LoadLists(stmt *sqlx.Stmt) error { type Subscriber (line 28) | type Subscriber struct method FirstName (line 79) | func (s Subscriber) FirstName() string { method LastName (line 92) | func (s Subscriber) LastName() string { type subLists (line 39) | type subLists struct type Subscription (line 105) | type Subscription struct type SubscriberExport (line 113) | type SubscriberExport struct type SubscriberExportProfile (line 124) | type SubscriberExportProfile struct type SubscriberActivity (line 133) | type SubscriberActivity struct FILE: models/templates.go constant BaseTpl (line 14) | BaseTpl = "base" constant ContentTpl (line 15) | ContentTpl = "content" constant TemplateTypeCampaign (line 16) | TemplateTypeCampaign = "campaign" constant TemplateTypeCampaignVisual (line 17) | TemplateTypeCampaignVisual = "campaign_visual" constant TemplateTypeTx (line 18) | TemplateTypeTx = "tx" type Template (line 22) | type Template struct method Compile (line 40) | func (t *Template) Compile(f template.FuncMap) error { type CampaignStats (line 61) | type CampaignStats struct type CampaignAnalyticsCount (line 72) | type CampaignAnalyticsCount struct type CampaignAnalyticsLink (line 78) | type CampaignAnalyticsLink struct FILE: schema.sql type subscribers (line 20) | CREATE TABLE subscribers ( type idx_subs_email (line 31) | CREATE UNIQUE INDEX idx_subs_email ON subscribers(LOWER(email)) type idx_subs_status (line 32) | CREATE INDEX idx_subs_status ON subscribers(status) type idx_subs_id_status (line 33) | CREATE INDEX idx_subs_id_status ON subscribers(id, status) type idx_subs_created_at (line 34) | CREATE INDEX idx_subs_created_at ON subscribers(created_at) type idx_subs_updated_at (line 35) | CREATE INDEX idx_subs_updated_at ON subscribers(updated_at) type lists (line 39) | CREATE TABLE lists ( type idx_lists_type (line 52) | CREATE INDEX idx_lists_type ON lists(type) type idx_lists_optin (line 53) | CREATE INDEX idx_lists_optin ON lists(optin) type idx_lists_status (line 54) | CREATE INDEX idx_lists_status ON lists(status) type idx_lists_name (line 55) | CREATE INDEX idx_lists_name ON lists(name) type idx_lists_created_at (line 56) | CREATE INDEX idx_lists_created_at ON lists(created_at) type idx_lists_updated_at (line 57) | CREATE INDEX idx_lists_updated_at ON lists(updated_at) type subscriber_lists (line 61) | CREATE TABLE subscriber_lists ( type idx_sub_lists_sub_id (line 72) | CREATE INDEX idx_sub_lists_sub_id ON subscriber_lists(subscriber_id) type idx_sub_lists_list_id (line 73) | CREATE INDEX idx_sub_lists_list_id ON subscriber_lists(list_id) type idx_sub_lists_status (line 74) | CREATE INDEX idx_sub_lists_status ON subscriber_lists(status) type templates (line 78) | CREATE TABLE templates ( type templates (line 90) | CREATE UNIQUE INDEX ON templates (is_default) WHERE is_default = true type campaigns (line 95) | CREATE TABLE campaigns ( type idx_camps_status (line 135) | CREATE INDEX idx_camps_status ON campaigns(status) type idx_camps_name (line 136) | CREATE INDEX idx_camps_name ON campaigns(name) type idx_camps_created_at (line 137) | CREATE INDEX idx_camps_created_at ON campaigns(created_at) type idx_camps_updated_at (line 138) | CREATE INDEX idx_camps_updated_at ON campaigns(updated_at) type campaign_lists (line 142) | CREATE TABLE campaign_lists ( type campaign_lists (line 151) | CREATE UNIQUE INDEX ON campaign_lists (campaign_id, list_id) type idx_camp_lists_camp_id (line 152) | CREATE INDEX idx_camp_lists_camp_id ON campaign_lists(campaign_id) type idx_camp_lists_list_id (line 153) | CREATE INDEX idx_camp_lists_list_id ON campaign_lists(list_id) type campaign_views (line 156) | CREATE TABLE campaign_views ( type idx_views_camp_id (line 164) | CREATE INDEX idx_views_camp_id ON campaign_views(campaign_id) type idx_views_subscriber_id (line 165) | CREATE INDEX idx_views_subscriber_id ON campaign_views(subscriber_id) type idx_views_date (line 166) | CREATE INDEX idx_views_date ON campaign_views(created_at) type media (line 170) | CREATE TABLE media ( type idx_media_filename (line 180) | CREATE INDEX idx_media_filename ON media(provider, filename) type campaign_media (line 184) | CREATE TABLE campaign_media ( type idx_camp_media_id (line 193) | CREATE UNIQUE INDEX idx_camp_media_id ON campaign_media (campaign_id, me... type idx_camp_media_camp_id (line 194) | CREATE INDEX idx_camp_media_camp_id ON campaign_media(campaign_id) type links (line 199) | CREATE TABLE links ( type link_clicks (line 207) | CREATE TABLE link_clicks ( type idx_clicks_camp_id (line 216) | CREATE INDEX idx_clicks_camp_id ON link_clicks(campaign_id) type idx_clicks_link_id (line 217) | CREATE INDEX idx_clicks_link_id ON link_clicks(link_id) type idx_clicks_sub_id (line 218) | CREATE INDEX idx_clicks_sub_id ON link_clicks(subscriber_id) type idx_clicks_date (line 219) | CREATE INDEX idx_clicks_date ON link_clicks(created_at) type settings (line 223) | CREATE TABLE settings ( type idx_settings_key (line 228) | CREATE INDEX idx_settings_key ON settings(key) type bounces (line 302) | CREATE TABLE bounces ( type idx_bounces_sub_id (line 311) | CREATE INDEX idx_bounces_sub_id ON bounces(subscriber_id) type idx_bounces_camp_id (line 312) | CREATE INDEX idx_bounces_camp_id ON bounces(campaign_id) type idx_bounces_source (line 313) | CREATE INDEX idx_bounces_source ON bounces(source) type idx_bounces_date (line 314) | CREATE INDEX idx_bounces_date ON bounces(created_at) type roles (line 318) | CREATE TABLE roles ( type idx_roles (line 328) | CREATE UNIQUE INDEX idx_roles ON roles (parent_id, list_id) type idx_roles_name (line 329) | CREATE UNIQUE INDEX idx_roles_name ON roles (type, name) WHERE name IS N... type users (line 333) | CREATE TABLE users ( type sessions (line 354) | CREATE TABLE sessions ( type idx_sessions (line 359) | CREATE INDEX idx_sessions ON sessions (id, created_at) type mat_dashboard_stats_idx (line 396) | CREATE UNIQUE INDEX mat_dashboard_stats_idx ON mat_dashboard_counts (upd... type mat_dashboard_charts_idx (line 432) | CREATE UNIQUE INDEX mat_dashboard_charts_idx ON mat_dashboard_charts (up... type mat_list_subscriber_stats_idx (line 442) | CREATE UNIQUE INDEX mat_list_subscriber_stats_idx ON mat_list_subscriber... FILE: scripts/translate-i18n.py function translate (line 20) | def translate(data, lang):