Skip to content

Instantly share code, notes, and snippets.

@distgr
Last active May 27, 2023 14:41
Show Gist options
  • Select an option

  • Save distgr/d0a618ed17bbdecfb7c3ac1589a7f6b5 to your computer and use it in GitHub Desktop.

Select an option

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
Copy Markdown

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