More advanced domain sorting
parent
a11c41c954
commit
74c13678a8
17
app.json
17
app.json
|
@ -8,7 +8,7 @@
|
||||||
"disposable-mail"
|
"disposable-mail"
|
||||||
],
|
],
|
||||||
"env": {
|
"env": {
|
||||||
"DOMAINS": {
|
"EMAIL_DOMAINS": {
|
||||||
"description": "Email domains"
|
"description": "Email domains"
|
||||||
},
|
},
|
||||||
"EMAIL_PURGE_TIME": {
|
"EMAIL_PURGE_TIME": {
|
||||||
|
@ -19,6 +19,13 @@
|
||||||
"convert": true
|
"convert": true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"EMAIL_EXAMPLES": {
|
||||||
|
"description": "Examples of the domains",
|
||||||
|
"value": {
|
||||||
|
"account": "example@48hr.email",
|
||||||
|
"uids": [1, 2, 3]
|
||||||
|
}
|
||||||
|
},
|
||||||
"IMAP_USER": {
|
"IMAP_USER": {
|
||||||
"description": "Username to login to the imap server"
|
"description": "Username to login to the imap server"
|
||||||
},
|
},
|
||||||
|
@ -52,12 +59,8 @@
|
||||||
"description": "The branding of the site",
|
"description": "The branding of the site",
|
||||||
"value": ["48hr.email", "Crazyco", "https://crazyco.xyz"]
|
"value": ["48hr.email", "Crazyco", "https://crazyco.xyz"]
|
||||||
},
|
},
|
||||||
"HTTP_EXAMPLES": {
|
"HTTP_DISPLAY_SORT": {
|
||||||
"description": "Examples of the domains",
|
"description": "Sort the emails for use"
|
||||||
"value": {
|
|
||||||
"email": "example@48hr.email",
|
|
||||||
"uids": [1, 2, 3]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,11 @@ const config = {
|
||||||
time: 48, // Time value for when to purge
|
time: 48, // Time value for when to purge
|
||||||
unit: 'hours', // minutes, hours, days
|
unit: 'hours', // minutes, hours, days
|
||||||
convert: true, // Convert to highest sensible unit (and round)
|
convert: true, // Convert to highest sensible unit (and round)
|
||||||
}
|
},
|
||||||
|
examples: process.env.EMAIL_EXAMPLES || { // Examples to use to demonstrate the service
|
||||||
|
account: "example@48hr.email", // example email to keep clean, besides the UIDs specified below
|
||||||
|
uids: [1, 2, 3] // example uids to keep
|
||||||
|
},
|
||||||
},
|
},
|
||||||
imap: { // IMAP configuration
|
imap: { // IMAP configuration
|
||||||
user: process.env.IMAP_USER, // imap user
|
user: process.env.IMAP_USER, // imap user
|
||||||
|
@ -19,10 +23,7 @@ const config = {
|
||||||
http: { // HTTP configuration
|
http: { // HTTP configuration
|
||||||
port: normalizePort(process.env.HTTP_PORT || 3000), // http port to listen on
|
port: normalizePort(process.env.HTTP_PORT || 3000), // http port to listen on
|
||||||
branding: process.env.HTTP_BRANDING || ["48hr.email", "CrazyCo", "https://crazyco.xyz"], // branding
|
branding: process.env.HTTP_BRANDING || ["48hr.email", "CrazyCo", "https://crazyco.xyz"], // branding
|
||||||
examples: process.env.HTTP_EXAMPLES || { // Examples to use to demonstrate the service
|
displaySort: process.env.HTTP_DISPLAY_SHUFFLE || 0, // Sorting logic used for display (0 does not modify, 1 sorts alphabetically, 2 sorts alphabetically and only shuffles the first item, 3 shuffles all)
|
||||||
email: "example@48hr.email", // example email to keep clean, besides the UIDs specified below
|
|
||||||
uids: [1, 2, 3] // example uids to keep
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,40 @@ class Helper {
|
||||||
}
|
}
|
||||||
return array
|
return array
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shuffle first item of array, keeping original order afterwards
|
||||||
|
* @param {Array} array
|
||||||
|
* @returns {Array}
|
||||||
|
*/
|
||||||
|
|
||||||
|
shuffleFirstItem(array) {
|
||||||
|
let first = array[Math.floor(Math.random()*array.length)]
|
||||||
|
console.log(first)
|
||||||
|
array = array.filter((value)=>value!=first);
|
||||||
|
console.log(array)
|
||||||
|
array = [first].concat(array)
|
||||||
|
console.log(array)
|
||||||
|
return array
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a domain list from config for use
|
||||||
|
* @returns {Array}
|
||||||
|
*/
|
||||||
|
|
||||||
|
getDomains() {
|
||||||
|
switch (config.http.displaySort) {
|
||||||
|
case 0:
|
||||||
|
return config.email.domains // No modification
|
||||||
|
case 1:
|
||||||
|
return config.email.domains.sort() // Sort alphabetically
|
||||||
|
case 2:
|
||||||
|
return this.shuffleFirstItem(config.email.domains.sort()) // Sort alphabetically and shuffle first item
|
||||||
|
case 3:
|
||||||
|
return this.shuffleArray(config.email.domains) // Shuffle all
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = Helper
|
module.exports = Helper
|
||||||
|
|
|
@ -222,7 +222,7 @@ class ImapService extends EventEmitter {
|
||||||
|
|
||||||
const uidsWithHeaders = await this._getMailHeaders(uids)
|
const uidsWithHeaders = await this._getMailHeaders(uids)
|
||||||
uidsWithHeaders.forEach(mail => {
|
uidsWithHeaders.forEach(mail => {
|
||||||
if (mail['attributes'].date > DeleteOlderThan || this.config.http.examples.uids.includes(parseInt(mail['attributes'].uid))) {
|
if (mail['attributes'].date > DeleteOlderThan || this.config.email.examples.uids.includes(parseInt(mail['attributes'].uid))) {
|
||||||
uids = uids.filter(uid => uid !== mail['attributes'].uid)
|
uids = uids.filter(uid => uid !== mail['attributes'].uid)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -13,7 +13,7 @@ class MailRepository {
|
||||||
getForRecipient(address) {
|
getForRecipient(address) {
|
||||||
let mails = this.mailSummaries.get(address) || []
|
let mails = this.mailSummaries.get(address) || []
|
||||||
mails.forEach(mail => {
|
mails.forEach(mail => {
|
||||||
if (mail.to == this.config.http.examples.email && !this.config.http.examples.uids.includes(parseInt(mail.uid))) {
|
if (mail.to == this.config.email.examples.account && !this.config.email.examples.uids.includes(parseInt(mail.uid))) {
|
||||||
mails = mails.filter(m => m.uid != mail.uid)
|
mails = mails.filter(m => m.uid != mail.uid)
|
||||||
debug('prevented non-example email from being shown in example inbox', mail.uid)
|
debug('prevented non-example email from being shown in example inbox', mail.uid)
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ class MailRepository {
|
||||||
}
|
}
|
||||||
|
|
||||||
removeUid(uid, address) {
|
removeUid(uid, address) {
|
||||||
if (!this.config.http.examples.uids.includes(parseInt(uid))) {
|
if (!this.config.email.examples.uids.includes(parseInt(uid))) {
|
||||||
var deleted = false
|
var deleted = false
|
||||||
// TODO: make this more efficient, looping through each email is not cool.
|
// TODO: make this more efficient, looping through each email is not cool.
|
||||||
this.mailSummaries.forEachAssociation((mails, to) => {
|
this.mailSummaries.forEachAssociation((mails, to) => {
|
||||||
|
|
|
@ -14,7 +14,7 @@ router.get('/', (req, res, _next) => {
|
||||||
title: `${config.http.branding[0]} | Your temporary Inbox`,
|
title: `${config.http.branding[0]} | Your temporary Inbox`,
|
||||||
username: randomWord(),
|
username: randomWord(),
|
||||||
purgeTime: purgeTime,
|
purgeTime: purgeTime,
|
||||||
domains: helper.shuffleArray(config.email.domains),
|
domains: helper.getDomains(),
|
||||||
branding: config.http.branding,
|
branding: config.http.branding,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -46,7 +46,7 @@ router.post(
|
||||||
title: `${config.http.branding[0]} | Your temporary Inbox`,
|
title: `${config.http.branding[0]} | Your temporary Inbox`,
|
||||||
purgeTime: purgeTime,
|
purgeTime: purgeTime,
|
||||||
username: randomWord(),
|
username: randomWord(),
|
||||||
domains: helper.shuffleArray(config.email.domains),
|
domains: helper.getDomains(),
|
||||||
branding: config.http.branding,
|
branding: config.http.branding,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "48hr.email",
|
"name": "48hr.email",
|
||||||
"version": "1.5.4",
|
"version": "1.6.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node --trace-warnings ./app.js",
|
"start": "node --trace-warnings ./app.js",
|
||||||
|
|
Loading…
Reference in New Issue