Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
on randomString(aLength)
set randomChars to {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
set aString to ""
repeat aLength times
set aString to aString & some item of randomChars
end repeat
return aString
end randomString
on appName()
tell application "System Events"
set frontmostProcess to first process where it is frontmost
set appName to name of frontmostProcess
end tell
if appName is equal to "Safari" then
tell application "Safari"
return the URL of the current tab of the front window
end tell
else if appName is equal to "Google Chrome" then
tell application "Google Chrome"
return the URL of the active tab of the front window
end tell
end if
tell application appName
return appName & " " & the name of the front window
end tell
return appName
end appName
on appNameSlug(aLength)
set commandString to "~/.bin/slugify \"" & appName() & "\" | cut -c -" & aLength as string
return do shell script commandString
end appNameSlug
on run {input, parameters}
(* TODO: update the format here to meet your needs *)
set email to randomString(5) & "." & appNameSlug(15) & "@privaterelay.example.com"
tell application "System Events" to keystroke email
do shell script "afplay /System/Library/Sounds/Bottle.aiff"
return input
end run
// ==UserScript==
// @name Email Generator
// @version 0.1
// @description Type in "/email in a text or textarea field and it will update it with a randomly generated username that goes through a relay.
// @author You
// @grant none
// @include *
// ==/UserScript==
(function() {
const tmClickAudio = new Audio('data:audio/wav;charset=utf-8;base64,UklGRrgEAABXQVZFZm10IBAAAAABAAEAIlYAACJWAAABAAgAZGF0YZQEAAB+fHp9dnOKeIeYTnh+eX1+yJfCt5KDVmptnJqxu6qUd4R4Xo11c7puf3ZwhGuGfHV6b1RoYmd4f4Fxc2NkX2lhXGlqX2RyZXh1hYqLlI6ViYKDhYeHhoyEh4uCiIGHioyRjZCSj4qLiIyKiYuIjo2Lj46Jh4aEhoSDg4OCgH5/fHd6fH1/goOBgoOAgIB+fX9/f4B+fn99fX19fHp5eHh5enl7fX5/f3+Af39+f4CAf319fX17fH5/gICBgoGBgYKCgYGCgoGAgICBgYCAgICBgH9+fn19foCAgICAgICAgIB/gX+AgYCAgYKCgYCAf4CAgICDgoCCgIGAfYGAgIKAgYB/gH5/gH+AgH6Af319fn5+fn6Af4B/gIOAgIKBgYCAgICAgIGCgoGAgYCAgYGDg4KBgYB+fH1/foCAgYCAgH1+fn1+fn+Afn9+foB+f4CAgIB/gICAgoGBgIB/gICCgoGCgYGBgICAgIKBgYKBgYGAgIB/f31+fX1/fX9/fn16eXp6en1+f3+AgH59fn9/f4CAgYGBgoGBg4SEg4KCgYGAgICAgICAf39/fn5/f39/f35+f318foCAf39/gH59fn+AgIGCgICAgICAgICAgYGBgICAgICAgH+AgYCAgICAgICAgH+AgICAgICAgICAgICBgICCgoGChIKAgICAgICBg4GBgoGAgICAgICAgICAgH5+f3+AgIB/gICAf3+Af39/gIB/f4CAf4CDgYKFhIB/gXh7gn2Ch4CAgoKEgH6AgIWBf4CAgICDgH+Bg4OAgYGCg4KBgYCAgICBgH+Af35+fX+Af35/fnx8fn5+foB+e3x8eXl7fn+AgoCAf36CgoaAipZ1hoJ+e3qOcJB8fI13g3+GgH92fn1/g4CKhId7f3h3fnx9fIOAf4CBfoB9fH98gYCChIKChIGDgX+CgoaEgoCAgH+Bf359f4GDg4B/fn6AgYGCg4GAgYB/fX+BgYWGgn98gIKDgX97eoCEhoR+fX19f357e3yAhIJ9e3t9foCDgoGEg4CAgoKAgIGBhIWEgYCAgoOCgoCAgIKDgYCAgICCg4KAgICCgoKCgYGBgoGAf39/gICAf35+fX5/f35/gH9+f3+AgYGAgICAgYB/gIGCgH6AgYCAgIWGg4V/g4mAd3Z9enx8fX+AgYBsgKaNfnxpPHikUHy2kGWdqSZcmlh7vouMu2eBgT5SVVGCoJPguJOlZ1lXdYObs7WklZxuZGZcY2yAjpCHm4hqdWdng4KHm5KMko15b3NwbHqJfoGOfXBwbG1wdoCAg4iIgXp5c3V4eX6Bf4GJhIKEgICFioaChYaIiYeDfnx4en5/gYSBfn96eHp8f4OIiYaCgn99gIOFhoeEhIWDgH9+e31/fXp9f3x9f358e3x8fYCAgYKEhYWGhYSDg4OEhoeFhISCgH5+e3l6fH1/gICAgICAgH+Ag4SFhoeFg4B/fHx9fYCAgYGAfXx7fH+AgoaHhoaHhIKDgoCAgoGAgH9+e3p7eXh6enp+f36AgICAgIODgYSEg4SFhIKCgIB/fX5+fICBfw==')
const TMGenerate = {
random: (length) => {
let result = ""
while (result.length < length) {
result += (Math.random()).toString(36).substr(2)
}
return result.substr(0, length)
},
domain: (length) => {
return document.domain.replace(/\.|www/g, '').substr(0, length)
},
email: () => {
// TODO: update the format here to meet your needs
const username = TMGenerate.random(8) + '.' + TMGenerate.domain(12);
const domain = 'privaterelay.example.com'
console.assert(username.length < 64);
console.assert(domain.length < 250);
return username + '@' + domain;
}
}
class TMEmail {
constructor(intervalLength = 1000) {
this.active = document.body
setInterval(() => this.onInterval(), intervalLength)
}
onInterval () {
const current = document.activeElement;
if (this.active !== current && current) {
if (this.active.removeEventListener) {
this.active.removeEventListener('keydown', this.onKeyDown)
}
this.active = current
current.addEventListener('keydown', this.onKeyDown)
}
}
onKeyDown (e) {
const el = e.target;
const value = el.value + e.key
if (value === '/email') {
e.preventDefault()
tmClickAudio.play()
el.value = TMGenerate.email()
}
}
}
new TMEmail()
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment