Last active
May 27, 2023 14:41
-
-
Save distgr/d0a618ed17bbdecfb7c3ac1589a7f6b5 to your computer and use it in GitHub Desktop.
Secret input in python, Get input secretly and in a personalized way!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class SecretInput: | |
def __init__(self, prompt, show='*'): | |
import os | |
import sys | |
import pynput | |
import getpass | |
self.on_char = 0 | |
self.show = show | |
self.value = str() | |
def get_active_window(): | |
active_window_name = None | |
if sys.platform in ['linux', 'linux2']: | |
try: | |
import wnck | |
except ImportError: | |
os.system('sudo pip install wnck') | |
wnck = None | |
if wnck is not None: | |
screen = wnck.screen_get_default() | |
screen.force_update() | |
window = screen.get_active_window() | |
if window is not None: | |
pid = window.get_pid() | |
with open("/proc/{pid}/cmdline".format(pid=pid)) as f: | |
return f.read() | |
else: | |
try: | |
from gi.repository import Gtk, Wnck | |
gi = "Installed" | |
except ImportError: | |
os.system('sudo pip install gi') | |
gi = None | |
if gi is not None: | |
Gtk.init([]) | |
screen = Wnck.Screen.get_default() | |
screen.force_update() | |
active_window = screen.get_active_window() | |
pid = active_window.get_pid() | |
with open("/proc/{pid}/cmdline".format(pid=pid)) as f: | |
return f.read() | |
elif sys.platform in ['Windows', 'win32', 'cygwin']: | |
import win32gui | |
window = win32gui.GetForegroundWindow() | |
return win32gui.GetWindowText(window) | |
elif sys.platform in ['Mac', 'darwin', 'os2', 'os2emx']: | |
from AppKit import NSWorkspace | |
return (NSWorkspace.sharedWorkspace().activeApplication()['NSApplicationName']) | |
else: | |
sys.exit(0) | |
def GetPrint(prompt): | |
sys.stdout.write(prompt) | |
sys.stdout.flush() | |
def on_press(key): | |
if 'py' not in str(get_active_window()).lower(): | |
return | |
if(key == pynput.keyboard.Key.enter): | |
getpass.getpass('') | |
quit() | |
if(key != pynput.keyboard.Key.backspace): | |
try: | |
char = key.char | |
if(key.char == None and str(format(key)).startswith('<')): | |
char = str(int(str(format(key)).replace('<', '').replace('>', ''))-96) | |
self.value += char if key != pynput.keyboard.Key.space else ' ' | |
self.on_char += 1 | |
sys.stdout.write(self.show) | |
except: | |
pass | |
else: | |
if(self.on_char <= 0): | |
return | |
sys.stdout.write('\b \b'*len(self.show)) | |
self.on_char -= 1 | |
self.value = self.value[0:len(self.value)-1] | |
sys.stdout.flush() | |
with pynput.keyboard.Listener(on_press = on_press) as listener: | |
listener.join() | |
GetPrint(prompt) | |
del self.on_char, self.show | |
def __str__(self): | |
return self.value |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
thanks! very helpful class!