fix webapp opening in termux

Open real url not html shim since android and file:// urls is a nasty
kettle of fish.

This commit was sponsored by John Pellman on Patreon.
This commit is contained in:
Joey Hess 2018-04-25 14:38:42 -04:00
parent b0df331b4a
commit 9807e5bead
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
5 changed files with 40 additions and 27 deletions

View file

@ -38,6 +38,7 @@ import Config
import Utility.Gpg import Utility.Gpg
import qualified Remote.GCrypt as GCrypt import qualified Remote.GCrypt as GCrypt
import qualified Types.Remote import qualified Types.Remote
import Utility.Android
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Map as M import qualified Data.Map as M
@ -144,10 +145,6 @@ defaultRepositoryPath firstrun = do
legit d = not <$> doesFileExist (d </> "git-annex") legit d = not <$> doesFileExist (d </> "git-annex")
#endif #endif
-- Detect when the Linux build is running on Android, eg in termux.
osAndroid :: IO Bool
osAndroid = ("Android" == ) <$> readProcess "uname" ["-o"]
newRepositoryForm :: FilePath -> Hamlet.Html -> MkMForm RepositoryPath newRepositoryForm :: FilePath -> Hamlet.Html -> MkMForm RepositoryPath
newRepositoryForm defpath msg = do newRepositoryForm defpath msg = do
(pathRes, pathView) <- mreq (repositoryPathField True) (bfs "") (pathRes, pathView) <- mreq (repositoryPathField True) (bfs "")

View file

@ -31,6 +31,7 @@ import qualified Annex
import Config.Files import Config.Files
import Upgrade import Upgrade
import Annex.Version import Annex.Version
import Utility.Android
import Control.Concurrent import Control.Concurrent
import Control.Concurrent.STM import Control.Concurrent.STM
@ -207,24 +208,32 @@ openBrowser mcmd htmlshim realurl outh errh = do
openBrowser' :: Maybe FilePath -> FilePath -> String -> Maybe Handle -> Maybe Handle -> IO () openBrowser' :: Maybe FilePath -> FilePath -> String -> Maybe Handle -> Maybe Handle -> IO ()
#ifndef __ANDROID__ #ifndef __ANDROID__
openBrowser' mcmd htmlshim _realurl outh errh = runbrowser openBrowser' mcmd htmlshim realurl outh errh =
ifM osAndroid
{- Android does not support file:// urls well, but neither
- is the security of the url in the process table important
- there, so just use the real url. -}
( runbrowser realurl
, runbrowser (fileUrl htmlshim)
)
#else #else
openBrowser' mcmd htmlshim realurl outh errh = do openBrowser' mcmd htmlshim realurl outh errh = do
recordUrl url recordUrl realurl
{- Android's `am` command does not work reliably across the {- Android's `am` command does not work reliably across the
- wide range of Android devices. Intead, FIFO should be set to - wide range of Android devices. Intead, FIFO should be set to
- the filename of a fifo that we can write the URL to. -} - the filename of a fifo that we can write the URL to. -}
v <- getEnv "FIFO" v <- getEnv "FIFO"
case v of case v of
Nothing -> runbrowser Nothing -> runbrowser realurl
Just f -> void $ forkIO $ do Just f -> void $ forkIO $ do
fd <- openFd f WriteOnly Nothing defaultFileFlags fd <- openFd f WriteOnly Nothing defaultFileFlags
void $ fdWrite fd url void $ fdWrite fd realurl
closeFd fd closeFd fd
#endif #endif
where where
p = case mcmd of runbrowser url = do
Just c -> proc c [htmlshim] let p = case mcmd of
Just c -> proc c [url]
Nothing -> Nothing ->
#ifndef mingw32_HOST_OS #ifndef mingw32_HOST_OS
browserProc url browserProc url
@ -235,15 +244,6 @@ openBrowser' mcmd htmlshim realurl outh errh = do
(browserProc (takeFileName htmlshim)) (browserProc (takeFileName htmlshim))
{ cwd = Just (takeDirectory htmlshim) } { cwd = Just (takeDirectory htmlshim) }
#endif #endif
#ifdef __ANDROID__
{- Android does not support file:// urls, but neither is
- the security of the url in the process table important
- there, so just use the real url. -}
url = realurl
#else
url = fileUrl htmlshim
#endif
runbrowser = do
hPutStrLn (fromMaybe stdout outh) $ "Launching web browser on " ++ url hPutStrLn (fromMaybe stdout outh) $ "Launching web browser on " ++ url
hFlush stdout hFlush stdout
environ <- cleanEnvironment environ <- cleanEnvironment

14
Utility/Android.hs Normal file
View file

@ -0,0 +1,14 @@
{- Android stuff
-
- Copyright 2018 Joey Hess <id@joeyh.name>
-
- License: BSD-2-clause
-}
module Utility.Android where
import Common
-- Detect when the Linux build is running on Android, eg in termux.
osAndroid :: IO Bool
osAndroid = ("Android" == ) <$> readProcess "uname" ["-o"]

View file

@ -21,11 +21,12 @@ The webapp is able to open an url (after I upgraded termux) via xdg-open
chrome was not able to access, apparently a permissions problem. The chrome was not able to access, apparently a permissions problem. The
webapp.html does not add any security on android, since it's not a webapp.html does not add any security on android, since it's not a
multiuser unix system, and so it should open the url to the webapp multiuser unix system, and so it should open the url to the webapp
directly. directly. (Done)
Accessing the sdcard may need termux-setup-storage to be run once, Accessing the sdcard may need termux-setup-storage to be run once,
depending on the version of android. That sets up $HOME/storage. depending on the version of android. That sets up $HOME/storage.
The webapp ought to default to making a repository somewhere in there. The webapp ought to default to making a repository somewhere in there.
(Done)
webbapp won't start on boot, but could be made to using https://wiki.termux.com/wiki/Termux:Boot webbapp won't start on boot, but could be made to using https://wiki.termux.com/wiki/Termux:Boot

View file

@ -1000,6 +1000,7 @@ Executable git-annex
Upgrade.V4 Upgrade.V4
Upgrade.V5 Upgrade.V5
Utility.Aeson Utility.Aeson
Utility.Android
Utility.Applicative Utility.Applicative
Utility.AuthToken Utility.AuthToken
Utility.Base64 Utility.Base64