Awesome-Python-Scripts/Folder Locker & Hider/locker.py
Prajjwal Pathak 33935f573e
New Project (#206)
* Added folder locker and hider

* Update README.md
2021-04-16 22:57:13 +05:30

84 lines
1.9 KiB
Python

import os
import json
import shelve
import random
import subprocess
def read_json():
json_file = 'files/locked_folders.json'
if os.path.exists(json_file):
with open(json_file, 'r') as file:
dct = json.load(file)
else:
dct = {}
return dct
def write_to_json(data):
json_file = 'files/locked_folders.json'
with open(json_file, 'w') as file:
json.dump(data, file)
def get_from_json(fname):
dct = read_json()
return dct.get(fname, None)
# Locker/Unlocker ----------------------------------------------------------------
def generate_key():
string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'
keygen = random.sample(string, 12)
return ''.join(keygen)
def lock(fpath, password):
key = generate_key()
fname = os.path.basename(fpath)
cwd = '/'.join(fpath.split('/')[:-1]) + '/'
command1 = 'ren ' + fname + ' "Control Panel.{21EC2020-3AEA-1069-A2DD-' + key + '}"'
command2 = 'attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-' + key + '}"'
dct = read_json()
if not fname in dct.keys():
dct[fname] = [fpath, key]
write_to_json(dct)
with shelve.open('files/pwd') as pwd_manager:
pwd_manager[fname] = password
subprocess.call(command1, shell=True, cwd=cwd)
subprocess.call(command2, shell=True, cwd=cwd)
status = 'locked'
else:
status = 'failed'
return status
def unlock(fpath, password, key):
fname = os.path.basename(fpath)
cwd = '/'.join(fpath.split('/')[:-1]) + '/'
command1 = 'attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-' + key + '}"'
command2 = 'ren "Control Panel.{21EC2020-3AEA-1069-A2DD-' + key + '}" ' + fname
with shelve.open('files/pwd') as pwd_manager:
pass_ = pwd_manager[fname]
if pass_ == password:
dct = read_json()
del dct[fname]
write_to_json(dct)
subprocess.call(command1, shell=True, cwd=cwd)
subprocess.call(command2, shell=True, cwd=cwd)
with shelve.open('files/pwd') as pwd_manager:
del pwd_manager[fname]
status = 'unlocked'
else:
status = 'failed'
return status