avatars encryption plugin
This commit is contained in:
		
							
								
								
									
										75
									
								
								AvatarEncryption/ae.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								AvatarEncryption/ae.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| import plugin_super_class | ||||
| import json | ||||
| import settings | ||||
| import os | ||||
|  | ||||
|  | ||||
| class AvatarEncryption(plugin_super_class.PluginSuperClass): | ||||
|  | ||||
|     def __init__(self, *args): | ||||
|         super(AvatarEncryption, self).__init__('AvatarEncryption', 'ae', *args) | ||||
|         self._path = settings.ProfileHelper.get_path() + 'avatars/' | ||||
|         self._contacts = self._profile._contacts[:] | ||||
|  | ||||
|     def close(self): | ||||
|         if not self._encrypt_save.has_password(): | ||||
|             return | ||||
|         i, data = 1, {} | ||||
|  | ||||
|         self.save_contact_avatar(data, self._profile, 0) | ||||
|         for friend in self._contacts: | ||||
|             self.save_contact_avatar(data, friend, i) | ||||
|             i += 1 | ||||
|         self.save_settings(json.dumps(data)) | ||||
|  | ||||
|     def start(self): | ||||
|         if not self._encrypt_save.has_password(): | ||||
|             return | ||||
|         data = json.loads(self.load_settings()) | ||||
|  | ||||
|         self.load_contact_avatar(data, self._profile) | ||||
|         for friend in self._contacts: | ||||
|             self.load_contact_avatar(data, friend) | ||||
|         self._profile.update() | ||||
|  | ||||
|     def save_contact_avatar(self, data, contact, i): | ||||
|         tox_id = contact.tox_id[:64] | ||||
|         data[str(tox_id)] = str(i) | ||||
|         path = self._path + tox_id + '.png' | ||||
|         if os.path.isfile(path): | ||||
|             with open(path, 'rb') as fl: | ||||
|                 avatar = fl.read() | ||||
|             encr_avatar = self._encrypt_save.pass_encrypt(avatar) | ||||
|             with open(self._path + self._settings.name + '_' + str(i) + '.png', 'wb') as fl: | ||||
|                 fl.write(encr_avatar) | ||||
|             os.remove(path) | ||||
|  | ||||
|     def load_contact_avatar(self, data, contact): | ||||
|         tox_id = str(contact.tox_id[:64]) | ||||
|         if tox_id not in data: | ||||
|             return | ||||
|         path = self._path + self._settings.name + '_' + data[tox_id] + '.png' | ||||
|         if os.path.isfile(path): | ||||
|             with open(path, 'rb') as fl: | ||||
|                 avatar = fl.read() | ||||
|             decr_avatar = self._encrypt_save.pass_decrypt(avatar) | ||||
|             with open(self._path + str(tox_id) + '.png', 'wb') as fl: | ||||
|                 fl.write(decr_avatar) | ||||
|             os.remove(path) | ||||
|             contact.load_avatar() | ||||
|  | ||||
|     def load_settings(self): | ||||
|         try: | ||||
|             with open(plugin_super_class.path_to_data(self._short_name) + self._settings.name + '.json', 'rb') as fl: | ||||
|                 data = fl.read() | ||||
|             return str(self._encrypt_save.pass_decrypt(data), 'utf-8') if data else '{}' | ||||
|         except: | ||||
|             return '{}' | ||||
|  | ||||
|     def save_settings(self, data): | ||||
|         try: | ||||
|             data = self._encrypt_save.pass_encrypt(bytes(data, 'utf-8')) | ||||
|             with open(plugin_super_class.path_to_data(self._short_name) + self._settings.name + '.json', 'wb') as fl: | ||||
|                 fl.write(data) | ||||
|         except: | ||||
|             pass | ||||
							
								
								
									
										2
									
								
								AvatarEncryption/ae/readme.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								AvatarEncryption/ae/readme.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| Plugin for avatars encryption. Works with encrypted profiles only. | ||||
| Note that it breaks compability with other clients. | ||||
| @@ -17,4 +17,4 @@ For more info visit [plugins.md](https://github.com/toxygen-project/toxygen/blob | ||||
| - Garland - changes your status like it's garland. | ||||
| - AutoAnswer - calls auto answering. | ||||
| - uToxInlineSending - send inlines with the same name as uTox does. | ||||
|  | ||||
| - AvatarEncryption - encrypt all avatars using profile password | ||||
|   | ||||
		Reference in New Issue
	
	Block a user