Skip to content

Instantly share code, notes, and snippets.

@distgr
Last active May 27, 2023 14:41
Show Gist options
  • Save distgr/d0a618ed17bbdecfb7c3ac1589a7f6b5 to your computer and use it in GitHub Desktop.
Save distgr/d0a618ed17bbdecfb7c3ac1589a7f6b5 to your computer and use it in GitHub Desktop.
Secret input in python, Get input secretly and in a personalized way!
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
@MAGANER
Copy link

MAGANER commented May 27, 2023

thanks! very helpful class!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment