core: add commands that will not be forwarded to connected mobile (#3398)

* core: add commands that will not be forwarded to connected mobile

* fail if command that must be executed locally sent to remote host
This commit is contained in:
Evgeny Poberezkin
2023-11-19 20:48:25 +00:00
committed by GitHub
parent d9031cb209
commit 2a8d7b8926
3 changed files with 19 additions and 3 deletions
+3 -1
View File
@@ -400,7 +400,9 @@ execChatCommand rh s = do
case parseChatCommand s of
Left e -> pure $ chatCmdError u e
Right cmd -> case rh of
Just remoteHostId | allowRemoteCommand cmd -> execRemoteCommand u remoteHostId cmd s
Just rhId
| allowRemoteCommand cmd -> execRemoteCommand u rhId cmd s
| otherwise -> pure $ CRChatCmdError u $ ChatErrorRemoteHost (RHId rhId) $ RHELocalCommand
_ -> execChatCommand_ u cmd
execChatCommand' :: ChatMonad' m => ChatCommand -> m ChatResponse
+14 -1
View File
@@ -452,8 +452,20 @@ allowRemoteCommand = \case
APIStopChat -> False
APIActivateChat -> False
APISuspendChat _ -> False
SetTempFolder _ -> False
QuitChat -> False
SetTempFolder _ -> False
SetFilesFolder _ -> False
SetRemoteHostsFolder _ -> False
APISetXFTPConfig _ -> False
APISetEncryptLocalFiles _ -> False
APIExportArchive _ -> False
APIImportArchive _ -> False
ExportArchive -> False
APIDeleteStorage -> False
APIStorageEncryption _ -> False
APISetNetworkConfig _ -> False
APIGetNetworkConfig -> False
SetLocalDeviceName _ -> False
ListRemoteHosts -> False
StartRemoteHost _ -> False
SwitchRemoteHost {} -> False
@@ -1052,6 +1064,7 @@ data RemoteHostError
| RHETimeout
| RHEBadState -- ^ Illegal state transition
| RHEBadVersion {appVersion :: AppVersion}
| RHELocalCommand -- ^ Command not allowed for remote execution
| RHEDisconnected {reason :: Text} -- TODO should be sent when disconnected?
| RHEProtocolError RemoteProtocolError
deriving (Show, Exception)
+2 -1
View File
@@ -56,8 +56,9 @@ runInputLoop ct@ChatTerminal {termState, liveMessageState} cc = forever $ do
rh <- readTVarIO $ currentRemoteHost cc
let bs = encodeUtf8 $ T.pack s
cmd = parseChatCommand bs
rh' = if either (const False) allowRemoteCommand cmd then rh else Nothing
unless (isMessage cmd) $ echo s
r <- runReaderT (execChatCommand rh bs) cc
r <- runReaderT (execChatCommand rh' bs) cc
processResp s cmd r
printRespToTerminal ct cc False rh r
startLiveMessage cmd r