Implemented automatic user identification

This commit is contained in:
Kevin Veen-Birkenbach 2022-12-11 14:55:17 +01:00
parent 260d7dfbb7
commit 080b8d66e4
5 changed files with 36 additions and 10 deletions

View File

@ -42,8 +42,8 @@ python scripts/main.py --mode cleanup --file-types encrypted
## decrypt ## decrypt
### decrypt automatic (todo) ### decrypt automatic
To decrypt the data for a defined user type in: To decrypt the data type in:
```bash ```bash
python scripts/main.py --mode decrypt python scripts/main.py --mode decrypt
@ -64,7 +64,7 @@ python scripts/main.py --mode decrypt --user "<<user_id>>"
python scripts/main.py --amount 3 --quota 50 --mode encrypt --add-user-information --master-password "{{master_password}}" python scripts/main.py --amount 3 --quota 50 --mode encrypt --add-user-information --master-password "{{master_password}}"
``` ```
### encrypt master-password fuile ### encrypt master-password file
## todo ## todo
- add data-input attribut - add data-input attribut

View File

@ -8,7 +8,7 @@ class Cleanup():
def getAllFilePaths(self,file_type): def getAllFilePaths(self,file_type):
all_file_paths = [ all_file_paths = [
self.paths.getGroupFilesFolderPath(file_type), self.paths.getGroupFilesFolderPath(file_type),
self.paths.getUserFilesFolderPath(file_type), self.paths.getUserFilesPath(file_type),
self.paths.getAccumulatedFilePath(file_type) self.paths.getAccumulatedFilePath(file_type)
] ]
if file_type == Paths.TYPE_DECRYPTED: if file_type == Paths.TYPE_DECRYPTED:

View File

@ -1,6 +1,10 @@
import json import json
import os
from pathlib import Path from pathlib import Path
class AutomaticIdentificationImpossibleException(Exception):
pass
class Decryption(): class Decryption():
def __init__(self,cli,paths): def __init__(self,cli,paths):
@ -9,6 +13,18 @@ class Decryption():
self.cli = cli self.cli = cli
self.paths = paths self.paths = paths
def identifyUser(self):
file_type = self.paths.TYPE_ENCRYPTED
file_names = next(os.walk(self.paths.getUserFilesPath(file_type)), (None, None, []))[2]
users = []
user_file_suffix = self.paths.getUserFileSuffix(file_type)
for file in file_names:
if user_file_suffix in file:
users.append(file.replace(user_file_suffix, ''))
if len(users) < 2:
return users[0]
raise AutomaticIdentificationImpossibleException()
def initializeUser(self,user_id): def initializeUser(self,user_id):
self.user_id=str(user_id) self.user_id=str(user_id)
self.user_file_decrypted_path = self.paths.getUserFilePath(self.user_id,self.paths.TYPE_DECRYPTED) self.user_file_decrypted_path = self.paths.getUserFilePath(self.user_id,self.paths.TYPE_DECRYPTED)

View File

@ -16,7 +16,7 @@ class Paths():
def getGroupFilesFolderPath(self,folder_type): def getGroupFilesFolderPath(self,folder_type):
return self.getDataFolderPath(folder_type) + "group_files/" return self.getDataFolderPath(folder_type) + "group_files/"
def getUserFilesFolderPath(self,folder_type): def getUserFilesPath(self,folder_type):
return self.getDataFolderPath(folder_type) + "user_files/" return self.getDataFolderPath(folder_type) + "user_files/"
def getEncryptedMainDataFile(self): def getEncryptedMainDataFile(self):
@ -29,9 +29,12 @@ class Paths():
if file_type == Paths.TYPE_ENCRYPTED: if file_type == Paths.TYPE_ENCRYPTED:
return '.gpg' return '.gpg'
return '' return ''
def getUserFileSuffix(self,file_type):
return '.json' + self.getFileExtension(file_type)
def getUserFilePath(self,user_id,file_type): def getUserFilePath(self,user_id,file_type):
return self.getUserFilesFolderPath(file_type)+user_id+'.json' + self.getFileExtension(file_type); return self.getUserFilesPath(file_type) + user_id + self.getUserFileSuffix(file_type);
def getGroupFilePath(self,group_id,file_type): def getGroupFilePath(self,group_id,file_type):
return self.getGroupFilesFolderPath(file_type) + str(group_id) + '.txt' + self.getFileExtension(file_type); return self.getGroupFilesFolderPath(file_type) + str(group_id) + '.txt' + self.getFileExtension(file_type);

View File

@ -1,7 +1,7 @@
import argparse import argparse
from classes.Encryption import Encryption from classes.Encryption import Encryption
from classes.Cleanup import Cleanup from classes.Cleanup import Cleanup
from classes.Decryption import Decryption from classes.Decryption import Decryption, AutomaticIdentificationImpossibleException
from getpass import getpass from getpass import getpass
import traceback import traceback
from classes.Cli import Cli from classes.Cli import Cli
@ -61,9 +61,16 @@ try:
if args.mode == 'decrypt': if args.mode == 'decrypt':
decrypt = Decryption(cli,paths) decrypt = Decryption(cli,paths)
if args.master_password is None: if args.master_password is None:
if args.user is None: if args.user is None:
print("Type in the user id:") try:
decrypt.initializeUser(input()) print("Attempt to identify user.")
user_id = decrypt.identifyUser()
print("The user id is: " + user_id)
except:
print("A automatic user id identification wasn't possible.")
print("Type in the user id:")
user_id = input()
decrypt.initializeUser(user_id)
else: else:
decrypt.initializeUser(args.user) decrypt.initializeUser(args.user)
if args.user_password is None: if args.user_password is None: