UI for enabling existing webdav remotes

This commit is contained in:
Joey Hess 2012-11-17 15:58:27 -04:00
parent 7addb89dc1
commit 453587d392
6 changed files with 67 additions and 4 deletions

View file

@ -175,6 +175,9 @@ repoList reposelector
Just "directory" -> val False EnableDirectoryR
#ifdef WITH_S3
Just "S3" -> val True EnableS3R
#endif
#ifdef WITH_WEBDAV
Just "webdav" -> val True EnableWebDAVR
#endif
_ -> Nothing
where

View file

@ -21,12 +21,19 @@ import qualified Remote
import Types.Remote (RemoteConfig)
import Types.StandardGroups
import Logs.PreferredContent
import Logs.Remote
import Yesod
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Map as M
webDAVConfigurator :: Widget -> Handler RepHtml
webDAVConfigurator a = bootstrap (Just Config) $ do
sideBarDisplay
setTitle "Add a WebDAV repository"
a
boxConfigurator :: Widget -> Handler RepHtml
boxConfigurator a = bootstrap (Just Config) $ do
sideBarDisplay
@ -45,6 +52,12 @@ boxComAForm = WebDAVInput
<*> areq passwordField "Box.com Password" Nothing
<*> areq textField "Directory" (Just "annex")
webDAVCredsAForm :: AForm WebApp WebApp WebDAVInput
webDAVCredsAForm = WebDAVInput
<$> areq textField "Username or Email" Nothing
<*> areq passwordField "Password" Nothing
<*> pure (T.empty)
getAddBoxComR :: Handler RepHtml
getAddBoxComR = boxConfigurator $ do
((result, form), enctype) <- lift $
@ -67,6 +80,30 @@ getAddBoxComR = boxConfigurator $ do
setgroup r = runAnnex () $
setStandardGroup (Remote.uuid r) TransferGroup
getEnableWebDAVR :: UUID -> Handler RepHtml
getEnableWebDAVR uuid = do
m <- runAnnex M.empty readRemoteLog
let c = fromJust $ M.lookup uuid m
let name = fromJust $ M.lookup "name" c
let url = fromJust $ M.lookup "url" c
go name url
where
go name url
| "box.com/" `isInfixOf` url = boxConfigurator $ enable name url
| otherwise = webDAVConfigurator $ enable name url
enable name url = do
((result, form), enctype) <- lift $
runFormGet $ renderBootstrap webDAVCredsAForm
case result of
FormSuccess creds -> lift $
makeWebDavRemote name creds (const noop) M.empty
_ -> do
let authtoken = webAppFormAuthToken
description <- lift $ runAnnex "" $
T.pack . concat <$> Remote.prettyListUUIDs [uuid]
$(widgetFile "configurators/enablewebdav")
makeWebDavRemote :: String -> WebDAVInput -> (Remote -> Handler ()) -> RemoteConfig -> Handler ()
makeWebDavRemote name input setup config = do
remotename <- runAnnex name $ fromRepo $ uniqueRemoteName name 0

View file

@ -38,6 +38,7 @@
/config/repository/enable/rsync/#UUID EnableRsyncR GET
/config/repository/enable/directory/#UUID EnableDirectoryR GET
/config/repository/enable/S3/#UUID EnableS3R GET
/config/repository/enable/webdav/#UUID EnableWebDAVR GET
/transfers/#NotificationId TransfersR GET
/notifier/transfers NotifierTransfersR GET

View file

@ -9,11 +9,11 @@ several cloud providers via [[special_remotes]].
More should be added, such as:
* Google drive (attractive because it's free, only 5 gb tho)
* Owncloud (has several [providers](http://owncloud.org/providers/)
that also provide 5 gb free; open DAV based API)
* Owncloud (has several [providers](http://owncloud.org/providers/);
at least one provides 5 gb free; open DAV based API)
* OpenStack Swift (teh future)
* Box.com (it's free, and current method is hard to set up and a sorta
shakey; a better method would be to use its API)
shakey; a better method would be to use its API) **done**
* Dropbox? That would be ironic.. Via its API, presumably.
* [[Amazon Glacier|todo/special_remote_for_amazon_glacier]]
* [nimbus.io](https://nimbus.io/) Fairly low prices ($0.06/GB);

View file

@ -6,7 +6,7 @@ locally paired systems, and remote servers with rsync.
Help me prioritize my work: What special remote would you most like
to use with the git-annex assistant?
[[!poll open=yes 15 "Amazon S3 (done)" 12 "Amazon Glacier" 9 "Box.com" 62 "My phone (or MP3 player)" 15 "Tahoe-LAFS" 6 "OpenStack SWIFT" 23 "Google Drive"]]
[[!poll open=yes 15 "Amazon S3 (done)" 12 "Amazon Glacier" 9 "Box.com (done)" 62 "My phone (or MP3 player)" 15 "Tahoe-LAFS" 6 "OpenStack SWIFT" 23 "Google Drive"]]
This poll is ordered with the options I consider easiest to build
listed first. Mostly because git-annex already supports them and they

View file

@ -0,0 +1,22 @@
<div .span9 .hero-unit>
<h2>
Enabling #{description}
<p>
This is a WebDAV repository located at #
<a href="#{url}">
#{url}
<p>
<form .form-horizontal enctype=#{enctype}>
<fieldset>
^{form}
^{authtoken}
<div .form-actions>
<button .btn .btn-primary type=submit onclick="$('#workingmodal').modal('show');">
Enable repository
<div .modal .fade #workingmodal>
<div .modal-header>
<h3>
Enabling repository ...
<div .modal-body>
<p>
Enabling this WebDAV repository. This could take a minute.