GiveYouAMail 1.0.0__tar.gz → 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GiveYouAMail
3
- Version: 1.0.0
4
- Summary: CLI Temporary Email Tool
3
+ Version: 1.0.1
4
+ Summary: CLI Temporary Email Tool - GYAM Edition
5
5
  Author: MurilooPrDev
6
6
  Requires-Dist: requests
7
7
  Dynamic: author
@@ -7,4 +7,6 @@ GiveYouAMail.egg-info/entry_points.txt
7
7
  GiveYouAMail.egg-info/requires.txt
8
8
  GiveYouAMail.egg-info/top_level.txt
9
9
  gyam/30MMCLI.py
10
- gyam/__init__.py
10
+ gyam/__init__.py
11
+ gyam/gyam.py
12
+ gyam/main_script.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ GYAM = gyam.main_script:main
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: GiveYouAMail
3
- Version: 1.0.0
4
- Summary: CLI Temporary Email Tool
3
+ Version: 1.0.1
4
+ Summary: CLI Temporary Email Tool - GYAM Edition
5
5
  Author: MurilooPrDev
6
6
  Requires-Dist: requests
7
7
  Dynamic: author
@@ -0,0 +1,51 @@
1
+
2
+ # 📧 GYAM - GiveYouAMail CLI
3
+
4
+ **GYAM** é uma ferramenta de elite para provisionamento de identidades temporárias via terminal. Esqueça o spam no seu e-mail pessoal e pare de caçar contas compartilhadas. Aqui, cada identidade é sua, exclusiva e gerada em segundos.
5
+
6
+ ---
7
+
8
+ ## 🛠️ Instalação
9
+
10
+ Para instalar essa joia no seu sistema (Termux ou Linux):
11
+
12
+ ```bash
13
+ pip install .
14
+
15
+ Como usar a Máquina
16
+ O GYAM trabalha com dois pilares: Criação e Acesso.
17
+
18
+ 1. Criando sua Identidade (Login)
19
+ Para gerar uma conta nova com um domínio ativo e exclusivo:
20
+
21
+ Bash
22
+ GYAM -Login CF -- pswd:SUA_SENHA_AQUI
23
+
24
+ O sistema escolherá um domínio aleatório e seguro.
25
+
26
+ Sua sessão será salva localmente em session.json.
27
+
28
+ Nota: Se quiser um e-mail específico, use M:seu_nome@dominio.com.
29
+
30
+ . Acessando a Inbox (OAuth)
31
+ Uma vez logado, entre no painel de controle:
32
+
33
+ Bash
34
+ GYAM -oauth
35
+
36
+ Controles da TUI (Interface)
37
+ Dentro do painel, você manda na porra toda:
38
+
39
+ SETAS (↑/↓): Navega entre as mensagens recebidas.
40
+
41
+ ENTER: Abre o conteúdo completo do e-mail selecionado.
42
+
43
+ R: Dá um Refresh nervoso para buscar novos e-mails.
44
+
45
+ ESC / B: Volta da leitura para a lista.
46
+
47
+ Q / ESC: Sai da ferramenta e volta para o prompt.
48
+
49
+ (GYAM foi feito para ser rápido, bruto e funcional.
50
+
51
+ Desenvolvido por: MurilooPrDev)
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env python
2
+ import requests, sys, re, json, os, curses
3
+
4
+ API = "https://api.mail.tm"
5
+
6
+ def read_msg(stdscr, token, msg_id):
7
+ headers = {"Authorization": f"Bearer {token}"}
8
+ res = requests.get(f"{API}/messages/{msg_id}", headers=headers).json()
9
+ body = res.get('text', res.get('intro', 'Sem conteúdo'))
10
+
11
+ while True:
12
+ stdscr.clear()
13
+ h, w = stdscr.getmaxyx()
14
+ stdscr.attron(curses.color_pair(1))
15
+ stdscr.addstr(1, 2, "╔" + "═"*(w-6) + "╗")
16
+ stdscr.addstr(2, 2, f"║ CONTEÚDO DA MENSAGEM {' '*(w-29)}║")
17
+ stdscr.addstr(3, 2, "╚" + "═"*(w-6) + "╝")
18
+ stdscr.attroff(curses.color_pair(1))
19
+
20
+ # Exibe o corpo do e-mail (quebra linha simples)
21
+ lines = body.split('\n')
22
+ for i, line in enumerate(lines[:h-10]):
23
+ stdscr.addstr(5+i, 4, line[:w-8])
24
+
25
+ stdscr.attron(curses.color_pair(3))
26
+ stdscr.addstr(h-2, 2, " [ESC/B] VOLTAR ", curses.A_REVERSE)
27
+ stdscr.attroff(curses.color_pair(3))
28
+
29
+ stdscr.refresh()
30
+ k = stdscr.getch()
31
+ if k in [27, ord('b'), ord('B')]: break
32
+
33
+ def tui_original(stdscr, token, email):
34
+ curses.start_color()
35
+ curses.init_pair(1, curses.COLOR_CYAN, curses.COLOR_BLACK)
36
+ curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLUE)
37
+ curses.init_pair(3, curses.COLOR_GREEN, curses.COLOR_BLACK)
38
+ curses.curs_set(0)
39
+ idx = 0
40
+
41
+ while True:
42
+ stdscr.clear()
43
+ h, w = stdscr.getmaxyx()
44
+
45
+ stdscr.attron(curses.color_pair(1) | curses.A_BOLD)
46
+ stdscr.addstr(1, 2, "╔" + "═"*(w-6) + "╗")
47
+ stdscr.addstr(2, 2, f"║ GiveYouAMail CLI {' '*(w-25)}║")
48
+ stdscr.addstr(3, 2, f"║ User: {email.ljust(w-16)} ║")
49
+ stdscr.addstr(4, 2, "╚" + "═"*(w-6) + "╝")
50
+ stdscr.attroff(curses.color_pair(1) | curses.A_BOLD)
51
+
52
+ headers = {"Authorization": f"Bearer {token}"}
53
+ try:
54
+ r = requests.get(f"{API}/messages", headers=headers, timeout=5)
55
+ items = r.json().get('hydra:member', [])
56
+ except: items = []
57
+
58
+ if not items:
59
+ stdscr.addstr(h//2, w//2-9, ">> NO INCOMING <<", curses.A_BOLD)
60
+ else:
61
+ for i, m in enumerate(items[:h-10]):
62
+ style = curses.color_pair(2) if i == idx else curses.A_NORMAL
63
+ sender = m['from']['address'][:20].ljust(22)
64
+ subj = m['subject'][:w-40].ljust(w-40)
65
+ stdscr.addstr(6+i, 4, f" {sender} | {subj} ", style)
66
+
67
+ stdscr.attron(curses.color_pair(3))
68
+ stdscr.addstr(h-2, 2, " [Q] QUIT [R] REFRESH [ENTER] OPEN ", curses.A_REVERSE)
69
+ stdscr.attroff(curses.color_pair(3))
70
+
71
+ stdscr.refresh()
72
+ k = stdscr.getch()
73
+
74
+ if k in [ord('q'), ord('Q'), 27]: break
75
+ elif k == curses.KEY_UP and idx > 0: idx -= 1
76
+ elif k == curses.KEY_DOWN and idx < len(items)-1: idx += 1
77
+ elif k in [10, 13]: # ENTER
78
+ if items:
79
+ read_msg(stdscr, token, items[idx]['id'])
80
+ elif k in [ord('r'), ord('R')]: idx = 0
81
+
82
+ def main():
83
+ raw = " ".join(sys.argv)
84
+ m_mail = re.search(r'M:[\s"]*([^\s"]+)', raw)
85
+ m_pswd = re.search(r'pswd:[\s"]*([^\s"]+)', raw)
86
+
87
+ if "-Login" in raw:
88
+ if not m_pswd: return
89
+ try:
90
+ doms = requests.get(f"{API}/domains").json()['hydra:member']
91
+ target_dom = doms[0]['domain']
92
+ except: target_dom = "moakt.cc"
93
+ email = m_mail.group(1) if m_mail else f"user_{os.urandom(2).hex()}@{target_dom}"
94
+ pswd = m_pswd.group(1)
95
+ res = requests.post(f"{API}/accounts", json={"address": email, "password": pswd})
96
+ if res.status_code in [201, 200, 422]:
97
+ with open("session.json", "w") as f:
98
+ json.dump({"email": email, "password": pswd}, f)
99
+ print(f"Sessão Criada: {email}")
100
+ return
101
+
102
+ if "-oauth" in raw:
103
+ if not os.path.exists("session.json"): return
104
+ with open("session.json", "r") as f:
105
+ s = json.load(f); email, pswd = s['email'], s['password']
106
+ res = requests.post(f"{API}/token", json={"address": email, "password": pswd})
107
+ if res.status_code == 200:
108
+ curses.wrapper(tui_original, res.json()['token'], email)
109
+
110
+ if __name__ == "__main__":
111
+ main()
@@ -0,0 +1,111 @@
1
+ #!/usr/bin/env python
2
+ import requests, sys, re, json, os, curses
3
+
4
+ API = "https://api.mail.tm"
5
+
6
+ def read_msg(stdscr, token, msg_id):
7
+ headers = {"Authorization": f"Bearer {token}"}
8
+ res = requests.get(f"{API}/messages/{msg_id}", headers=headers).json()
9
+ body = res.get('text', res.get('intro', 'Sem conteúdo'))
10
+
11
+ while True:
12
+ stdscr.clear()
13
+ h, w = stdscr.getmaxyx()
14
+ stdscr.attron(curses.color_pair(1))
15
+ stdscr.addstr(1, 2, "╔" + "═"*(w-6) + "╗")
16
+ stdscr.addstr(2, 2, f"║ CONTEÚDO DA MENSAGEM {' '*(w-29)}║")
17
+ stdscr.addstr(3, 2, "╚" + "═"*(w-6) + "╝")
18
+ stdscr.attroff(curses.color_pair(1))
19
+
20
+ # Exibe o corpo do e-mail (quebra linha simples)
21
+ lines = body.split('\n')
22
+ for i, line in enumerate(lines[:h-10]):
23
+ stdscr.addstr(5+i, 4, line[:w-8])
24
+
25
+ stdscr.attron(curses.color_pair(3))
26
+ stdscr.addstr(h-2, 2, " [ESC/B] VOLTAR ", curses.A_REVERSE)
27
+ stdscr.attroff(curses.color_pair(3))
28
+
29
+ stdscr.refresh()
30
+ k = stdscr.getch()
31
+ if k in [27, ord('b'), ord('B')]: break
32
+
33
+ def tui_original(stdscr, token, email):
34
+ curses.start_color()
35
+ curses.init_pair(1, curses.COLOR_CYAN, curses.COLOR_BLACK)
36
+ curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLUE)
37
+ curses.init_pair(3, curses.COLOR_GREEN, curses.COLOR_BLACK)
38
+ curses.curs_set(0)
39
+ idx = 0
40
+
41
+ while True:
42
+ stdscr.clear()
43
+ h, w = stdscr.getmaxyx()
44
+
45
+ stdscr.attron(curses.color_pair(1) | curses.A_BOLD)
46
+ stdscr.addstr(1, 2, "╔" + "═"*(w-6) + "╗")
47
+ stdscr.addstr(2, 2, f"║ GiveYouAMail CLI {' '*(w-25)}║")
48
+ stdscr.addstr(3, 2, f"║ User: {email.ljust(w-16)} ║")
49
+ stdscr.addstr(4, 2, "╚" + "═"*(w-6) + "╝")
50
+ stdscr.attroff(curses.color_pair(1) | curses.A_BOLD)
51
+
52
+ headers = {"Authorization": f"Bearer {token}"}
53
+ try:
54
+ r = requests.get(f"{API}/messages", headers=headers, timeout=5)
55
+ items = r.json().get('hydra:member', [])
56
+ except: items = []
57
+
58
+ if not items:
59
+ stdscr.addstr(h//2, w//2-9, ">> NO INCOMING <<", curses.A_BOLD)
60
+ else:
61
+ for i, m in enumerate(items[:h-10]):
62
+ style = curses.color_pair(2) if i == idx else curses.A_NORMAL
63
+ sender = m['from']['address'][:20].ljust(22)
64
+ subj = m['subject'][:w-40].ljust(w-40)
65
+ stdscr.addstr(6+i, 4, f" {sender} | {subj} ", style)
66
+
67
+ stdscr.attron(curses.color_pair(3))
68
+ stdscr.addstr(h-2, 2, " [Q] QUIT [R] REFRESH [ENTER] OPEN ", curses.A_REVERSE)
69
+ stdscr.attroff(curses.color_pair(3))
70
+
71
+ stdscr.refresh()
72
+ k = stdscr.getch()
73
+
74
+ if k in [ord('q'), ord('Q'), 27]: break
75
+ elif k == curses.KEY_UP and idx > 0: idx -= 1
76
+ elif k == curses.KEY_DOWN and idx < len(items)-1: idx += 1
77
+ elif k in [10, 13]: # ENTER
78
+ if items:
79
+ read_msg(stdscr, token, items[idx]['id'])
80
+ elif k in [ord('r'), ord('R')]: idx = 0
81
+
82
+ def main():
83
+ raw = " ".join(sys.argv)
84
+ m_mail = re.search(r'M:[\s"]*([^\s"]+)', raw)
85
+ m_pswd = re.search(r'pswd:[\s"]*([^\s"]+)', raw)
86
+
87
+ if "-Login" in raw:
88
+ if not m_pswd: return
89
+ try:
90
+ doms = requests.get(f"{API}/domains").json()['hydra:member']
91
+ target_dom = doms[0]['domain']
92
+ except: target_dom = "moakt.cc"
93
+ email = m_mail.group(1) if m_mail else f"user_{os.urandom(2).hex()}@{target_dom}"
94
+ pswd = m_pswd.group(1)
95
+ res = requests.post(f"{API}/accounts", json={"address": email, "password": pswd})
96
+ if res.status_code in [201, 200, 422]:
97
+ with open("session.json", "w") as f:
98
+ json.dump({"email": email, "password": pswd}, f)
99
+ print(f"Sessão Criada: {email}")
100
+ return
101
+
102
+ if "-oauth" in raw:
103
+ if not os.path.exists("session.json"): return
104
+ with open("session.json", "r") as f:
105
+ s = json.load(f); email, pswd = s['email'], s['password']
106
+ res = requests.post(f"{API}/token", json={"address": email, "password": pswd})
107
+ if res.status_code == 200:
108
+ curses.wrapper(tui_original, res.json()['token'], email)
109
+
110
+ if __name__ == "__main__":
111
+ main()
@@ -0,0 +1,15 @@
1
+ from setuptools import setup, find_packages
2
+
3
+ setup(
4
+ name='GiveYouAMail',
5
+ version='1.0.1',
6
+ packages=find_packages(),
7
+ install_requires=['requests'],
8
+ entry_points={
9
+ 'console_scripts': [
10
+ 'GYAM=gyam.main_script:main'
11
+ ]
12
+ },
13
+ author='MurilooPrDev',
14
+ description='CLI Temporary Email Tool - GYAM Edition'
15
+ )
@@ -1,2 +0,0 @@
1
- [console_scripts]
2
- 30MM = gyam.30MMCLI:main
@@ -1 +0,0 @@
1
- # GiveYouAMail
@@ -1,2 +0,0 @@
1
- from setuptools import setup, find_packages
2
- setup(name='GiveYouAMail',version='1.0.0',packages=find_packages(),install_requires=['requests'],entry_points={'console_scripts':['30MM=gyam.30MMCLI:main']},author='MurilooPrDev',description='CLI Temporary Email Tool')
File without changes