core: encrypt chat database (#988)

* core: encrypt chat database

* check DB key error on start

* function to encrypt database

* encrypt database command

* decrypt, rekey

* remove rekey, refactor

* test for db encryption/decryption

* update simplexmq
This commit is contained in:
Evgeny Poberezkin
2022-08-31 18:07:34 +01:00
committed by GitHub
parent 5e5c851173
commit 3613fc953e
11 changed files with 167 additions and 22 deletions
+17
View File
@@ -112,6 +112,8 @@ data ChatCommand
| APIExportArchive ArchiveConfig
| APIImportArchive ArchiveConfig
| APIDeleteStorage
| APIEncryptStorage String
| APIDecryptStorage
| APIGetChats {pendingConnections :: Bool}
| APIGetChat ChatRef ChatPagination (Maybe String)
| APIGetChatItems Int
@@ -371,6 +373,7 @@ data ChatError
= ChatError {errorType :: ChatErrorType}
| ChatErrorAgent {agentError :: AgentErrorType}
| ChatErrorStore {storeError :: StoreError}
| ChatErrorDatabase {database :: DatabaseError}
deriving (Show, Exception, Generic)
instance ToJSON ChatError where
@@ -428,6 +431,20 @@ instance ToJSON ChatErrorType where
toJSON = J.genericToJSON . sumTypeJSON $ dropPrefix "CE"
toEncoding = J.genericToEncoding . sumTypeJSON $ dropPrefix "CE"
data DatabaseError
= DBENotEncrypted
| DBENoFile
| DBEExportFailed
| DBEOpenFailed
deriving (Show, Exception, Generic)
instance ToJSON DatabaseError where
toJSON = J.genericToJSON . sumTypeJSON $ dropPrefix "DBE"
toEncoding = J.genericToEncoding . sumTypeJSON $ dropPrefix "DBE"
throwDBError :: ChatMonad m => DatabaseError -> m ()
throwDBError = throwError . ChatErrorDatabase
type ChatMonad m = (MonadUnliftIO m, MonadReader ChatController m, MonadError ChatError m)
chatCmdError :: String -> ChatResponse