浏览代码

Sync with cloud.

cixo 7 月之前
父节点
当前提交
deed3eea7a
共有 3 个文件被更改,包括 68 次插入3 次删除
  1. 45 0
      assets/secret.py
  2. 20 0
      assets/secret_encryption.py
  3. 3 3
      assets/user.py

+ 45 - 0
assets/secret.py

@@ -0,0 +1,45 @@
+import sqlmodel
+import hashlib
+import Crypto
+
+class secret(sqlmodel.SQLModel, table = True):
+    id: int | None = sqlmodel.Field(default = None, primary_key = True)
+    name: str = sqlmodel.Field(default = None, index = True)
+    domain: str = sqlmodel.Field(default = None, index = True)
+    crypted: bytes = sqlmodel.Field(default = None)
+    nonce: bytes = sqlmodel.Field(default = None)
+
+class secret_builder:
+    def __init__(self):
+        self.clean()
+
+    def clean(self) -> None:
+        self.__target = secret()
+
+    @property
+    def ready(self) -> bool:
+        if self.__target.name is None or self.__target.domain is None:
+            return False
+
+        if self.__target.crypted is None or self.__target.nonce is None:
+            return False
+
+        return True
+
+    @property
+    def result(self) -> secret:
+        if not self.ready:
+            raise TypeError("Secret is not ready to load.")
+
+        return self.__target
+
+    @property
+    def name(self) -> str | None:
+        return self.__target.name
+
+    @property
+    def domain(self) -> str | None:
+        return self.__target.domain
+
+    def crypt(self, key: str, target: str) -> bool:
+        pass

+ 20 - 0
assets/secret_encryption.py

@@ -0,0 +1,20 @@
+import Crypto
+import hashlib
+import os
+
+class secret_crypto:
+    def __init__(self, password: str):
+        self.__iv = os.urandom(16)
+        self.__key = self.__create_key(password)
+
+    @property
+    def __cipher(self) -> Crypto.Cipher:
+        return Crypto.Cipher.AES.new(self.__key
+
+    def __create_key(self, password: str) -> bytes:
+        encoded = password.encode("UTF-8")
+        hashed = hashlib.sha256(encoded)
+
+        return hashed.digest()
+    
+        

+ 3 - 3
assets/user.py

@@ -11,9 +11,9 @@ class user(sqlmodel.SQLModel, table = True):
     """
 
     id: int | None = sqlmodel.Field(default = None, primary_key = True)
-    nick: str = sqlmodel.Field(index = True, unique=True)
+    nick: str = sqlmodel.Field(index = True, unique = True)
     password: str = sqlmodel.Field(index = False)
-    apikey: str = sqlmodel.Field(index = True, unique=True)
+    apikey: str = sqlmodel.Field(index = True, unique = True)
 
 class user_builder:
     def __init__(self) -> None:
@@ -89,4 +89,4 @@ class user_builder:
         if not self.ready:
             raise TypeError("User in builder is not ready yet.")
 
-        return self.__target
+        return self.__target