Skip to content

Commit 9a15b9d

Browse files
authored
Merge pull request #24 from KG-1510/master
packaged files for pip
2 parents c384981 + e2937fd commit 9a15b9d

File tree

84 files changed

+1594
-75
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+1594
-75
lines changed
File renamed without changes.
File renamed without changes.
File renamed without changes.
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
from examplePackage.utils import message, debug, init_default_key_storage, STORAGE_DIR, STORE_KEY_F
2+
from printy import raw_format
3+
from cryptography.fernet import Fernet
4+
import os
5+
6+
# generating encryption key
7+
def keygen():
8+
try:
9+
#generating the key and storing them in a file
10+
key = Fernet.generate_key()
11+
message.success("Encryption key generated successfully")
12+
except Exception as e:
13+
message.error('Couldn\'t generate encryption key')
14+
debug.error(str(e))
15+
return False
16+
return key.decode('utf-8')
17+
18+
# storing the generated key to default/specified filename
19+
def storeKey(key, filename = STORE_KEY_F):
20+
storeTo = os.path.join (STORAGE_DIR, filename) + "_keys.key"
21+
if init_default_key_storage():
22+
try:
23+
#creating the key file in which the key'll be stored
24+
file = open(storeTo,'w')
25+
file.write(key)
26+
file.close()
27+
message.success("Key was stored to " + storeTo + " successfully")
28+
except Exception as e:
29+
message.error("Key couldn't be stored to " + storeTo)
30+
debug.error("Key couldn't be stored to " + storeTo)
31+
return False
32+
return True
33+
else:
34+
return False
35+
36+
# retrieve key from specified filename
37+
def getKey(filename = STORE_KEY_F):
38+
getFrom = os.path.join (STORAGE_DIR, filename) + "_keys.key"
39+
if init_default_key_storage():
40+
try:
41+
# retriving key file
42+
file = open (getFrom, 'r')
43+
key = file.read ()
44+
file.close ()
45+
message.success ('Loaded encryption key successfully')
46+
return key
47+
except:
48+
message.error ('Couldn\'t load encryption key')
49+
debug.error ('Couldn\'t load encryption key')
50+
return False
51+
else:
52+
message.error ('Couldn\'t load encryption key')
53+
debug.error ('Couldn\'t load encryption key')
54+
return False
55+
56+
# encrypting file using key
57+
def encryption(key, filename):
58+
try:
59+
with open(filename, 'rb') as f:
60+
data = f.read()
61+
#encrypting the data from the given file name
62+
fernet = Fernet(key)
63+
encrypted=fernet.encrypt(data)
64+
with open(filename,'wb') as f:
65+
f.write(encrypted)
66+
message.success(filename + ' successfully encrypted')
67+
except Exception as e:
68+
message.error(filename + ' couldn\'t be encrypted')
69+
debug.error(filename + ' couldn\'t be encrypted')
70+
print (e)
71+
return False
72+
return True
73+
74+
# decrypting file using key
75+
def decryption(key, filename):
76+
try:
77+
with open(filename,'rb') as f:
78+
data = f.read()
79+
q = Fernet(key)
80+
decrypted_message = q.decrypt(data)
81+
with open(filename,'wb') as f:
82+
f.write(decrypted_message)
83+
message.success(filename + ' successfully decrypted')
84+
except Exception as e:
85+
message.error(filename + ' couldn\'t be decrypted')
86+
debug.error(filename + ' couldn\'t be decrypted')
87+
print(e)
88+
return False
89+
return True
90+
91+
# test functions
92+
#print(storeKey(keygen()))
93+
#encryption(getKey(), 'test_data/test_api_keys.json')
94+
#decryption(getKey(), 'test_data/test_api_keys.json')
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from examplePackage.utils import message, debug, init_default_key_storage, printy, STORAGE_DIR, STORE_KEY_F
2+
3+
def help():
4+
message.success("Usage: clik <command> \n \n init\t\tinitializes the script to input key value pairs \n add\t\tinsert key value pair in existing json file \n subtract\tdelete key value pair in existing json file \n modify\t\talter key value in existing json file \n encrypt\tencrypts key value dictionary to json and generate encryption key \n decrypt\tdecrypts json file to dictionary \n help\t\tguide through all the CLIK functions \n version\tshows the CLIK version installed ")
5+
6+
def version():
7+
message.success("CLIK Version 0.0.0")
8+
9+
10+
#test functions
11+
#help()
12+
#version()
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import json
2+
from examplePackage.utils import message, debug, printy
3+
4+
#sample api keys
5+
api_val = {
6+
'ADMIN_KEY':'exampleadmin123',
7+
'ADMIN_USERNAME':'example@admin',
8+
'ADMIN_PASSWORD':'Darwin@Example2506',
9+
'TWITTER_ACCESS_TOKEN':'1234614-4Du6ZlFtVOpNMgtwIKjRe4wzwxHejcDRaxjNmAU',
10+
'INSTA_API_KEY':'Qhsh6yihijy3e8',
11+
'YOUTUBE_API_KEY':'83nicciwdcIIUNij',
12+
'FACEBOOK_API_KEY_SECRET':'7jewkdjwenbnsH',
13+
'INSTA_API_KEY_SECRET':'Qhsh6fjkdsbfky3e8',
14+
'YOUTUBE_API_KEY_SECRET':'8djkfhjsndcIIUNij',
15+
'FACEBOOK_API_KEYS_SECRET':'7jewdsjnfdnjnfssnsH'
16+
}
17+
18+
#function to convert JSON to dictionary and print
19+
def jsonToDict(filename):
20+
try:
21+
with open(filename,'r') as fh:
22+
json_str = fh.read()
23+
json_value = json.loads(json_str)
24+
return json_value
25+
except:
26+
return False
27+
28+
29+
#function to convert dictionary to JSON
30+
def dictToJson(inputDict, filename, indents=2):
31+
try:
32+
with open(filename, 'w') as fh2:
33+
fh2.write(json.dumps(inputDict, indent=indents, sort_keys=True))
34+
message.success('Keys stored successfully')
35+
return True
36+
except Exception as e:
37+
message.error('Couldn\'t write to JSON')
38+
debug.error(str(e))
39+
return False
40+
41+
# function to format and display JSON data
42+
def display_json (filename, display_indent=4):
43+
json_val = jsonToDict(filename)
44+
if json_val:
45+
message.success(filename + ' loaded successfully')
46+
printy (json_val, indentation=display_indent)
47+
else:
48+
message.error('JSON couldn\'t be loaded')
49+
debug.error('JSON to Dict Failed')
50+
51+
#calling the functions
52+
53+
#print(jsonToDict('test_data/test_api_keys.json'))
54+
# dictToJson(api_val,'test_data/test_api_keys.json')
55+
#display_json ('test_data/test_api_keys.json')
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
from examplePackage.utils import message, debug, init_default_key_storage, printy, STORAGE_DIR, STORE_KEY_F
2+
from examplePackage.encrypt import os, keygen, storeKey, encryption
3+
from examplePackage.json_convert import dictToJson
4+
5+
# function to get filename for holding keys from user
6+
def get_filename_from_user():
7+
filename = message.prompt('Name of file holding keys (keys.json)')
8+
9+
# default input: keys.json
10+
if(filename==''):
11+
filename = 'keys.json'
12+
13+
return filename
14+
15+
# function to get keys from the user
16+
def get_keys_from_user():
17+
keyDict = {}
18+
19+
# get value
20+
def getKeyValue(keyName):
21+
key = message.prompt(keyName + ' value')
22+
if(key!=''):
23+
keyDict[keyName] = key
24+
elif(key==''):
25+
message.error('Value cannot be empty.')
26+
getKeyValue(keyName)
27+
28+
# get key
29+
while(True):
30+
keyName = message.prompt('Key (done)')
31+
if(keyName!=''):
32+
getKeyValue(keyName)
33+
elif (keyName==''):
34+
break
35+
36+
# default input ends key-value input sequence
37+
message.delete_last()
38+
return keyDict
39+
40+
# function to generate and save encryption key
41+
def generate_encryption():
42+
key = keygen()
43+
44+
#Displaying the Key
45+
message.success("SECURITY KEY GENERATED: " + key)
46+
user_choice = message.prompt("Save the key locally (Y/n)")
47+
48+
# user choice to save the file
49+
# default user choice is YES
50+
if user_choice == "" or user_choice.lower() == "y" or user_choice.lower() == "yes":
51+
storage_choice = message.prompt("Path to store key to (" + os.path.join (STORAGE_DIR, STORE_KEY_F) + "_keys.key" + ")")
52+
if storage_choice != "":
53+
storeKey(key, storage_choice)
54+
else:
55+
storeKey(key)
56+
print(key)
57+
elif user_choice.lower()=="n" or user_choice.lower()=="no":
58+
message.success("YOUR KEY WILL NOT BE STORED. KEEP IT SAFE.")
59+
else:
60+
message.error("INVALID INPUT")
61+
generateEncryption()
62+
return key
63+
64+
# clik init
65+
def init_function():
66+
if init_default_key_storage():
67+
filename = get_filename_from_user()
68+
tokendict = get_keys_from_user()
69+
enc_key = generate_encryption()
70+
71+
if dictToJson(tokendict, filename):
72+
if encryption(enc_key, filename):
73+
message.success("Filename: " + filename)
74+
else:
75+
message.error("Filename: " + filename)
76+
message.success("Keys Added: ")
77+
printy(tokendict, indentation=4)
78+
79+
80+
# init_function()
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import sys
2+
from examplePackage.encrypt import encryption, decryption, getKey
3+
from examplePackage.json_convert import jsonToDict
4+
from examplePackage.utils import message, STORAGE_DIR, STORE_KEY_F
5+
from examplePackage.menu_functions import add, subtract, modify
6+
from examplePackage.helpVersion import help, version
7+
from examplePackage.keys_init import init_function
8+
9+
# check encrypted
10+
def checkEnc(filename):
11+
return jsonToDict(filename)
12+
13+
# main menu hub of CLIK
14+
def main_menu(args = sys.argv[1:]):
15+
# print(args)
16+
if args[0].lower() == 'init':
17+
init_function()
18+
elif args[0].lower() == '--help':
19+
help()
20+
elif args[0].lower() == '--version':
21+
version()
22+
else:
23+
fname = args[0]
24+
cmd = args[1]
25+
26+
# encrypt file
27+
if cmd.lower() == 'enc':
28+
if checkEnc(fname) != False:
29+
keyFname = message.prompt('File with key for description (' + STORAGE_DIR + '/' + STORE_KEY_F + '): ')
30+
key = getKey() if keyFname == '' else getKey(keyFname)
31+
encryption(key, fname)
32+
message.success(fname + ' is now encrypted')
33+
else:
34+
message.error(fname + ' is already encrypted')
35+
36+
# decrypt file
37+
elif cmd.lower() == 'dec':
38+
if checkEnc(fname) != False:
39+
message.error(fname + ' is already decrypted')
40+
else:
41+
keyFname = message.prompt('File with key for description (' + STORAGE_DIR + '/' + STORE_KEY_F + '): ')
42+
key = getKey() if keyFname == '' else getKey(keyFname)
43+
decryption(key, fname)
44+
message.success(fname + ' is now decrypted')
45+
46+
# add new keys
47+
elif cmd.lower() == 'add':
48+
if checkEnc(fname) != False:
49+
add(fname)
50+
else:
51+
message.error(fname + ' is encrypted')
52+
53+
# subtract keys
54+
elif cmd.lower() == 'sub':
55+
if checkEnc(fname) != False:
56+
subtract(fname)
57+
else:
58+
message.error(fname + ' is encrypted')
59+
60+
# subtract keys
61+
elif cmd.lower() == 'mod':
62+
if checkEnc(fname) != False:
63+
modify(fname)
64+
else:
65+
message.error(fname + ' is encrypted')
66+
67+
68+
# main function
69+
if __name__ == "__main__":
70+
main_menu(sys.argv[1:])

0 commit comments

Comments
 (0)