Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
kageru | 125d8f56d1 | ||
kageru | 50e49edcb4 |
|
@ -0,0 +1,22 @@
|
|||
# This is probably false advertising because it doesn't actually add a user for you.
|
||||
# It only generates a string that you can copy-paste into users.py
|
||||
|
||||
from pyshare_receiver import salthash
|
||||
from pyshare import character_pool
|
||||
from random import choices
|
||||
|
||||
import sys
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
print('''
|
||||
Usage:
|
||||
$ python add_user.py <username> <password>
|
||||
''')
|
||||
sys.exit(0)
|
||||
else:
|
||||
username, password = sys.argv[1:]
|
||||
salt = ''.join(choices(character_pool, k=10))
|
||||
hash = salthash(password, salt)
|
||||
print(f" '{username}': ['{hash}', '{salt}'],")
|
33
pyshare.py
33
pyshare.py
|
@ -9,8 +9,7 @@ from random import choices
|
|||
from datetime import date
|
||||
from PIL import Image
|
||||
import pyperclip
|
||||
import config
|
||||
import time
|
||||
import config2 as config
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
|
@ -51,11 +50,7 @@ def upload_local_file(path: str) -> None:
|
|||
url = config.url_template.format(filename)
|
||||
else:
|
||||
url = curl_upload(path)
|
||||
# Only pass the path when uploading an image
|
||||
if re.search(r'\.(png|jpe?g|bmp)$', path):
|
||||
notify_user(url, path)
|
||||
else:
|
||||
notify_user(url)
|
||||
notify_user(url)
|
||||
|
||||
|
||||
def prepare_file(ext: str) -> str:
|
||||
|
@ -78,6 +73,26 @@ def take_screenshot(edit=False) -> None:
|
|||
os.remove(file)
|
||||
|
||||
|
||||
def get_selection_rectangle() -> namedtuple:
|
||||
# TODO: let user cancel selection
|
||||
raw_coords = check_output(['slop', '-f', '%x,%y,%w,%h']).decode()
|
||||
x, y, w, h = [int(x) for x in raw_coords.split(',')]
|
||||
Rectangle = namedtuple('Rectangle', ['x', 'y', 'w', 'h'])
|
||||
return Rectangle(x, y, w, h)
|
||||
|
||||
|
||||
def record_screen() -> None:
|
||||
# ffmpeg -f x11grab -s "$W"x"$H" -i :0.0+$X,$Y ~/myfile.webm
|
||||
# TODO: show rectangle during recording
|
||||
# also TODO: find a way to end the capture
|
||||
file = prepare_file('webm')
|
||||
sel = get_selection_rectangle()
|
||||
call(['ffmpeg', '-f', 'x11grab', '-i', f':0.0+{sel.x},{sel.y}', '-s', f'{sel.w}x{sel.h}', 'file'])
|
||||
upload_local_file(file)
|
||||
if not config.keep_local_copies:
|
||||
os.remove(file)
|
||||
|
||||
|
||||
def get_extension(filename: str) -> str:
|
||||
"""
|
||||
Returns the extension of a file/full path as a string.
|
||||
|
@ -132,13 +147,13 @@ def notify_user(url:str, image=None) -> None:
|
|||
thumbnail = os.path.join(config.local_directory, 'thumb.jpg')
|
||||
img.save(thumbnail)
|
||||
call(['notify-send', '-a', 'pyshare', url, '-i', thumbnail, '-t', '3000'])
|
||||
time.sleep(0.2) # delay slightly before deleting the file so notify-send can actually read it
|
||||
os.remove(thumbnail)
|
||||
else:
|
||||
call(['notify-send', '-a', 'pyshare', url, '-t', '3000'])
|
||||
|
||||
|
||||
def parse_text(text):
|
||||
def parse_text():
|
||||
text = pyperclip.paste()
|
||||
if re.match(r'(https?|s?ftp)://', text):
|
||||
mirror_file(text)
|
||||
elif os.path.isfile(text):
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
# Add credentials for your own users here.
|
||||
# Since I'll only have very few users (probably just me), using a proper DB is overkill
|
||||
# The password hash is generated by
|
||||
# hashlib.sha3_256(bytes((password + salt).encode('utf8'))).hexdigest()
|
||||
|
||||
# If you actually want to use this for something serious, you should probably use argon2 or something
|
||||
|
||||
users = {
|
||||
'user1': ['c7d9c9621e417ea09141edbac126cd1f3ab1b2b94b2ad3b155a1e26a88b216c0', 'user1salt'],
|
||||
}
|
||||
|
||||
# And btw, the password is just 'password'.
|
||||
# I'm just saying this because there will be that one guy who actually thinks
|
||||
# "Oh, I could totally brute-force this password now"
|
Loading…
Reference in New Issue
Block a user