webapp: remove configurators for obsolste cloud storage services
* webapp: Remove configurator for box.com repository, since their webdav support is going away at the end of this January. * webapp: Remove configurator for gitlab, which stopped supporting git-annex some time ago. This commit was sponsored by Brock Spratlen on Patreon.
This commit is contained in:
parent
e0b3ba3819
commit
9a4406e5e7
8 changed files with 20 additions and 262 deletions
|
@ -213,9 +213,7 @@ enableSshRemote :: (RemoteConfig -> Maybe SshData) -> (SshInput -> RemoteName ->
|
||||||
enableSshRemote getsshdata rsyncnetsetup genericsetup u = do
|
enableSshRemote getsshdata rsyncnetsetup genericsetup u = do
|
||||||
m <- fromMaybe M.empty . M.lookup u <$> liftAnnex readRemoteLog
|
m <- fromMaybe M.empty . M.lookup u <$> liftAnnex readRemoteLog
|
||||||
case (unmangle <$> getsshdata m, M.lookup "name" m) of
|
case (unmangle <$> getsshdata m, M.lookup "name" m) of
|
||||||
(Just sshdata, Just reponame)
|
(Just sshdata, Just reponame) -> sshConfigurator $ do
|
||||||
| isGitLab sshdata -> enableGitLab sshdata
|
|
||||||
| otherwise -> sshConfigurator $ do
|
|
||||||
((result, form), enctype) <- liftH $
|
((result, form), enctype) <- liftH $
|
||||||
runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout $
|
runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout $
|
||||||
sshInputAForm textField $ mkSshInput sshdata
|
sshInputAForm textField $ mkSshInput sshdata
|
||||||
|
@ -675,110 +673,3 @@ prepRsyncNet sshinput reponame a = do
|
||||||
isRsyncNet :: Maybe Text -> Bool
|
isRsyncNet :: Maybe Text -> Bool
|
||||||
isRsyncNet Nothing = False
|
isRsyncNet Nothing = False
|
||||||
isRsyncNet (Just host) = ".rsync.net" `T.isSuffixOf` T.toLower host
|
isRsyncNet (Just host) = ".rsync.net" `T.isSuffixOf` T.toLower host
|
||||||
|
|
||||||
data GitLabUrl = GitLabUrl { unGitLabUrl :: Text }
|
|
||||||
|
|
||||||
badGitLabUrl :: Text
|
|
||||||
badGitLabUrl = "Bad SSH clone url. Expected something like: git@gitlab.com:yourlogin/annex.git"
|
|
||||||
|
|
||||||
parseGitLabUrl :: GitLabUrl -> Maybe SshData
|
|
||||||
parseGitLabUrl (GitLabUrl t) =
|
|
||||||
let (u, r) = separate (== '@') (T.unpack t)
|
|
||||||
(h, p) = separate (== ':') r
|
|
||||||
in if null u || null h || null p
|
|
||||||
then Nothing
|
|
||||||
else Just $ SshData
|
|
||||||
{ sshHostName = T.pack h
|
|
||||||
, sshUserName = Just (T.pack u)
|
|
||||||
, sshDirectory = T.pack p
|
|
||||||
, sshRepoName = genSshRepoName h p
|
|
||||||
, sshPort = 22
|
|
||||||
, needsPubKey = False
|
|
||||||
, sshCapabilities =
|
|
||||||
[ GitAnnexShellCapable
|
|
||||||
, GitCapable
|
|
||||||
, PushCapable
|
|
||||||
]
|
|
||||||
, sshRepoUrl = Just (T.unpack t)
|
|
||||||
}
|
|
||||||
|
|
||||||
isGitLab :: SshData -> Bool
|
|
||||||
isGitLab d = T.pack "gitlab.com" `T.isSuffixOf` (T.toLower (sshHostName d))
|
|
||||||
|
|
||||||
toGitLabUrl :: SshData -> GitLabUrl
|
|
||||||
toGitLabUrl d = GitLabUrl $ T.concat
|
|
||||||
[ fromMaybe (T.pack "git") (sshUserName d)
|
|
||||||
, T.pack "@"
|
|
||||||
, sshHostName d
|
|
||||||
, T.pack ":"
|
|
||||||
, sshDirectory d
|
|
||||||
]
|
|
||||||
|
|
||||||
{- Try to ssh into the gitlab server, verify we can access the repository,
|
|
||||||
- and get the uuid of the repository, if it already has one.
|
|
||||||
-
|
|
||||||
- A repository on gitlab won't be initialized as a git-annex repo
|
|
||||||
- unless a git-annex branch was already pushed to it. So, if
|
|
||||||
- git-annex-shell fails to work that's probably why; verify if
|
|
||||||
- the server is letting us ssh in by running git send-pack
|
|
||||||
- (in dry run mode). -}
|
|
||||||
testGitLabUrl :: GitLabUrl -> Annex (ServerStatus, Maybe SshData, UUID)
|
|
||||||
testGitLabUrl glu = case parseGitLabUrl glu of
|
|
||||||
Nothing -> return (UnusableServer badGitLabUrl, Nothing, NoUUID)
|
|
||||||
Just sshdata ->
|
|
||||||
checkor sshdata $ do
|
|
||||||
(sshdata', keypair) <- liftIO $ setupSshKeyPair sshdata
|
|
||||||
checkor sshdata' $
|
|
||||||
return (ServerNeedsPubKey (sshPubKey keypair), Just sshdata', NoUUID)
|
|
||||||
where
|
|
||||||
checkor sshdata ora = do
|
|
||||||
u <- probeuuid sshdata
|
|
||||||
if u /= NoUUID
|
|
||||||
then return (UsableServer (sshCapabilities sshdata), Just sshdata, u)
|
|
||||||
else ifM (verifysshworks sshdata)
|
|
||||||
( return (UsableServer (sshCapabilities sshdata), Just sshdata, NoUUID)
|
|
||||||
, ora
|
|
||||||
)
|
|
||||||
probeuuid sshdata = do
|
|
||||||
r <- inRepo $ Git.Construct.fromRemoteLocation (fromJust $ sshRepoUrl sshdata)
|
|
||||||
getUncachedUUID . either (const r) fst <$>
|
|
||||||
Remote.Helper.Ssh.onRemote NoConsumeStdin r
|
|
||||||
(Git.Config.fromPipe r, return (Left $ error "configlist failed"))
|
|
||||||
"configlist" [] []
|
|
||||||
verifysshworks sshdata = inRepo $ Git.Command.runBool
|
|
||||||
[ Param "send-pack"
|
|
||||||
, Param (fromJust $ sshRepoUrl sshdata)
|
|
||||||
, Param "--dry-run"
|
|
||||||
, Param "--force"
|
|
||||||
, Param (fromRef Annex.Branch.name)
|
|
||||||
]
|
|
||||||
|
|
||||||
gitLabUrlAForm :: Maybe GitLabUrl -> AForm Handler GitLabUrl
|
|
||||||
gitLabUrlAForm defval = GitLabUrl <$> areq check_input (bfs "SSH clone url") (unGitLabUrl <$> defval)
|
|
||||||
where
|
|
||||||
check_input = checkBool (isJust . parseGitLabUrl . GitLabUrl)
|
|
||||||
badGitLabUrl textField
|
|
||||||
|
|
||||||
getAddGitLabR :: Handler Html
|
|
||||||
getAddGitLabR = postAddGitLabR
|
|
||||||
postAddGitLabR :: Handler Html
|
|
||||||
postAddGitLabR = promptGitLab Nothing
|
|
||||||
|
|
||||||
promptGitLab :: Maybe GitLabUrl -> Handler Html
|
|
||||||
promptGitLab defval = sshConfigurator $ do
|
|
||||||
((result, form), enctype) <- liftH $
|
|
||||||
runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout $
|
|
||||||
gitLabUrlAForm defval
|
|
||||||
case result of
|
|
||||||
FormSuccess gitlaburl -> do
|
|
||||||
(status, msshdata, u) <- liftAnnex $ testGitLabUrl gitlaburl
|
|
||||||
case (status, msshdata) of
|
|
||||||
(UsableServer _, Just sshdata) ->
|
|
||||||
liftH $ redirect $ ConfirmSshR sshdata u
|
|
||||||
_ -> showform form enctype status
|
|
||||||
_ -> showform form enctype UntestedServer
|
|
||||||
where
|
|
||||||
showform form enctype status = $(widgetFile "configurators/gitlab.com/add")
|
|
||||||
|
|
||||||
enableGitLab :: SshData -> Handler Html
|
|
||||||
enableGitLab = promptGitLab . Just . toGitLabUrl
|
|
||||||
|
|
|
@ -30,9 +30,6 @@ import Network.URI
|
||||||
webDAVConfigurator :: Widget -> Handler Html
|
webDAVConfigurator :: Widget -> Handler Html
|
||||||
webDAVConfigurator = page "Add a WebDAV repository" (Just Configuration)
|
webDAVConfigurator = page "Add a WebDAV repository" (Just Configuration)
|
||||||
|
|
||||||
boxConfigurator :: Widget -> Handler Html
|
|
||||||
boxConfigurator = page "Add a Box.com repository" (Just Configuration)
|
|
||||||
|
|
||||||
data WebDAVInput = WebDAVInput
|
data WebDAVInput = WebDAVInput
|
||||||
{ user :: Text
|
{ user :: Text
|
||||||
, password :: Text
|
, password :: Text
|
||||||
|
@ -44,14 +41,6 @@ data WebDAVInput = WebDAVInput
|
||||||
toCredPair :: WebDAVInput -> CredPair
|
toCredPair :: WebDAVInput -> CredPair
|
||||||
toCredPair input = (T.unpack $ user input, T.unpack $ password input)
|
toCredPair input = (T.unpack $ user input, T.unpack $ password input)
|
||||||
|
|
||||||
boxComAForm :: Maybe CredPair -> MkAForm WebDAVInput
|
|
||||||
boxComAForm defcreds = WebDAVInput
|
|
||||||
<$> areq textField (bfs "Username or Email") (T.pack . fst <$> defcreds)
|
|
||||||
<*> areq passwordField (bfs "Box.com Password") (T.pack . snd <$> defcreds)
|
|
||||||
<*> areq checkBoxField "Share this account with other devices and friends?" (Just True)
|
|
||||||
<*> areq textField (bfs "Directory") (Just "annex")
|
|
||||||
<*> enableEncryptionField
|
|
||||||
|
|
||||||
webDAVCredsAForm :: Maybe CredPair -> MkAForm WebDAVInput
|
webDAVCredsAForm :: Maybe CredPair -> MkAForm WebDAVInput
|
||||||
webDAVCredsAForm defcreds = WebDAVInput
|
webDAVCredsAForm defcreds = WebDAVInput
|
||||||
<$> areq textField (bfs "Username or Email") (T.pack . fst <$> defcreds)
|
<$> areq textField (bfs "Username or Email") (T.pack . fst <$> defcreds)
|
||||||
|
@ -60,32 +49,6 @@ webDAVCredsAForm defcreds = WebDAVInput
|
||||||
<*> pure T.empty
|
<*> pure T.empty
|
||||||
<*> pure NoEncryption -- not used!
|
<*> pure NoEncryption -- not used!
|
||||||
|
|
||||||
getAddBoxComR :: Handler Html
|
|
||||||
getAddBoxComR = postAddBoxComR
|
|
||||||
postAddBoxComR :: Handler Html
|
|
||||||
#ifdef WITH_WEBDAV
|
|
||||||
postAddBoxComR = boxConfigurator $ do
|
|
||||||
defcreds <- liftAnnex $ previouslyUsedWebDAVCreds "box.com"
|
|
||||||
((result, form), enctype) <- liftH $
|
|
||||||
runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout
|
|
||||||
$ boxComAForm defcreds
|
|
||||||
case result of
|
|
||||||
FormSuccess input -> liftH $
|
|
||||||
makeWebDavRemote initSpecialRemote "box.com" (toCredPair input) $ M.fromList
|
|
||||||
[ configureEncryption $ enableEncryption input
|
|
||||||
, ("embedcreds", if embedCreds input then "yes" else "no")
|
|
||||||
, ("type", "webdav")
|
|
||||||
, ("url", "https://dav.box.com/dav/" ++ T.unpack (directory input))
|
|
||||||
-- Box.com has a max file size of 100 mb, but
|
|
||||||
-- using smaller chunks has better memory
|
|
||||||
-- performance.
|
|
||||||
, ("chunk", "10mb")
|
|
||||||
]
|
|
||||||
_ -> $(widgetFile "configurators/addbox.com")
|
|
||||||
#else
|
|
||||||
postAddBoxComR = giveup "WebDAV not supported by this build"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
getEnableWebDAVR :: UUID -> Handler Html
|
getEnableWebDAVR :: UUID -> Handler Html
|
||||||
getEnableWebDAVR = postEnableWebDAVR
|
getEnableWebDAVR = postEnableWebDAVR
|
||||||
postEnableWebDAVR :: UUID -> Handler Html
|
postEnableWebDAVR :: UUID -> Handler Html
|
||||||
|
@ -101,11 +64,7 @@ postEnableWebDAVR uuid = do
|
||||||
case mcreds of
|
case mcreds of
|
||||||
Just creds -> webDAVConfigurator $ liftH $
|
Just creds -> webDAVConfigurator $ liftH $
|
||||||
makeWebDavRemote enableSpecialRemote name creds M.empty
|
makeWebDavRemote enableSpecialRemote name creds M.empty
|
||||||
Nothing
|
Nothing -> webDAVConfigurator $ showform name url
|
||||||
| "box.com/" `isInfixOf` url ->
|
|
||||||
boxConfigurator $ showform name url
|
|
||||||
| otherwise ->
|
|
||||||
webDAVConfigurator $ showform name url
|
|
||||||
where
|
where
|
||||||
showform name url = do
|
showform name url = do
|
||||||
defcreds <- liftAnnex $
|
defcreds <- liftAnnex $
|
||||||
|
|
|
@ -55,8 +55,6 @@
|
||||||
/config/repository/add/cloud/S3 AddS3R GET POST
|
/config/repository/add/cloud/S3 AddS3R GET POST
|
||||||
/config/repository/add/cloud/IA AddIAR GET POST
|
/config/repository/add/cloud/IA AddIAR GET POST
|
||||||
/config/repository/add/cloud/glacier AddGlacierR GET POST
|
/config/repository/add/cloud/glacier AddGlacierR GET POST
|
||||||
/config/repository/add/cloud/box.com AddBoxComR GET POST
|
|
||||||
/config/repository/add/cloud/gitlab.com AddGitLabR GET POST
|
|
||||||
|
|
||||||
/config/repository/pair/local/start StartLocalPairR GET POST
|
/config/repository/pair/local/start StartLocalPairR GET POST
|
||||||
/config/repository/pair/local/running/#SecretReminder RunningLocalPairR GET
|
/config/repository/pair/local/running/#SecretReminder RunningLocalPairR GET
|
||||||
|
|
|
@ -39,6 +39,10 @@ git-annex (7.20181212) UNRELEASED; urgency=medium
|
||||||
* Windows: If 64 bit git is installed, use it when installing git-annex.
|
* Windows: If 64 bit git is installed, use it when installing git-annex.
|
||||||
(However, rsync still won't work and this is still not the documented way
|
(However, rsync still won't work and this is still not the documented way
|
||||||
to install it.)
|
to install it.)
|
||||||
|
* webapp: Remove configurator for box.com repository, since their
|
||||||
|
webdav support is going away at the end of this January.
|
||||||
|
* webapp: Remove configurator for gitlab, which stopped supporting git-annex
|
||||||
|
some time ago.
|
||||||
|
|
||||||
-- Joey Hess <id@joeyh.name> Tue, 18 Dec 2018 12:24:52 -0400
|
-- Joey Hess <id@joeyh.name> Tue, 18 Dec 2018 12:24:52 -0400
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,6 @@ Extra-Source-Files:
|
||||||
templates/configurators/edit/webrepository.hamlet
|
templates/configurators/edit/webrepository.hamlet
|
||||||
templates/configurators/edit/repository.hamlet
|
templates/configurators/edit/repository.hamlet
|
||||||
templates/configurators/unused.hamlet
|
templates/configurators/unused.hamlet
|
||||||
templates/configurators/addbox.com.hamlet
|
|
||||||
templates/configurators/ssh/testmodal.hamlet
|
templates/configurators/ssh/testmodal.hamlet
|
||||||
templates/configurators/ssh/expiredpassword.hamlet
|
templates/configurators/ssh/expiredpassword.hamlet
|
||||||
templates/configurators/ssh/error.hamlet
|
templates/configurators/ssh/error.hamlet
|
||||||
|
@ -228,7 +227,6 @@ Extra-Source-Files:
|
||||||
templates/configurators/addrepository/wormholepairing.hamlet
|
templates/configurators/addrepository/wormholepairing.hamlet
|
||||||
templates/configurators/rsync.net/add.hamlet
|
templates/configurators/rsync.net/add.hamlet
|
||||||
templates/configurators/rsync.net/encrypt.hamlet
|
templates/configurators/rsync.net/encrypt.hamlet
|
||||||
templates/configurators/gitlab.com/add.hamlet
|
|
||||||
templates/configurators/needgcrypt.hamlet
|
templates/configurators/needgcrypt.hamlet
|
||||||
templates/configurators/needtor.hamlet
|
templates/configurators/needtor.hamlet
|
||||||
templates/configurators/needmagicwormhole.hamlet
|
templates/configurators/needmagicwormhole.hamlet
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
<div .col-sm-9>
|
|
||||||
<div .content-box>
|
|
||||||
<h2>
|
|
||||||
Adding a Box.com repository
|
|
||||||
<p>
|
|
||||||
<a href="http://box.com">Box.com</a> offers a small quantity of storage #
|
|
||||||
for free, and larger quantities for a fee.
|
|
||||||
<p>
|
|
||||||
Even a small amount of free storage is useful, as a transfer point #
|
|
||||||
between your repositories.
|
|
||||||
<p>
|
|
||||||
<form method="post" .form-horizontal enctype=#{enctype}>
|
|
||||||
<fieldset>
|
|
||||||
^{form}
|
|
||||||
^{webAppFormAuthToken}
|
|
||||||
<div .form-group>
|
|
||||||
<div .col-sm-10 .col-sm-offset-2>
|
|
||||||
<button .btn .btn-primary type=submit onclick="$('#workingmodal').modal('show');">
|
|
||||||
Add repository
|
|
||||||
<div .modal .fade #workingmodal>
|
|
||||||
<div .modal-dialog>
|
|
||||||
<div .modal-content>
|
|
||||||
<div .modal-header>
|
|
||||||
<h3>
|
|
||||||
Making repository ...
|
|
||||||
<div .modal-body>
|
|
||||||
<p>
|
|
||||||
Setting up your Box.com repository. This could take a minute.
|
|
|
@ -1,17 +1,3 @@
|
||||||
<h3>
|
|
||||||
<a href="@{AddGitLabR}">
|
|
||||||
<span .glyphicon .glyphicon-plus-sign>
|
|
||||||
\ Gitlab.com
|
|
||||||
<p>
|
|
||||||
Hosts git-annex repositories for free.
|
|
||||||
|
|
||||||
<h3>
|
|
||||||
<a href="@{AddBoxComR}">
|
|
||||||
<span .glyphicon .glyphicon-plus-sign>
|
|
||||||
\ Box.com
|
|
||||||
<p>
|
|
||||||
Provides free storage for small amounts of data.
|
|
||||||
|
|
||||||
<h3>
|
<h3>
|
||||||
<a href="@{AddRsyncNetR}">
|
<a href="@{AddRsyncNetR}">
|
||||||
<span .glyphicon .glyphicon-plus-sign>
|
<span .glyphicon .glyphicon-plus-sign>
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
<div .col-sm-9>
|
|
||||||
<div .content-box>
|
|
||||||
<h2>
|
|
||||||
Adding a GitLab.com repository
|
|
||||||
<p>
|
|
||||||
<a href="http://gitlab.com/">
|
|
||||||
GitLab.com #
|
|
||||||
provides free public and private git repositories, and supports #
|
|
||||||
git-annex. While the amount of data that can be stored there is limited #
|
|
||||||
(<a href="https://about.gitlab.com/gitlab-com/">to 10 gb currently</a>), #
|
|
||||||
it's enough for smaller repositories, #
|
|
||||||
or as a transfer point between larger repositories.
|
|
||||||
<p>
|
|
||||||
$case status
|
|
||||||
$of UnusableServer msg
|
|
||||||
<div .alert .alert-danger>
|
|
||||||
<span .glyphicon .glyphicon-warning-sign>
|
|
||||||
\ #{msg}
|
|
||||||
$of ServerNeedsPubKey pubkey
|
|
||||||
<div .alert>
|
|
||||||
<span .glyphicon .glyphicon-warning-sign>
|
|
||||||
\ You need to configure GitLab to accept a SSH public key.
|
|
||||||
<p>
|
|
||||||
Open a tab to #
|
|
||||||
<a href="https://gitlab.com/profile/keys" target="_blank">
|
|
||||||
https://gitlab.com/profile/keys
|
|
||||||
and copy and paste this public key into it:
|
|
||||||
<pre>
|
|
||||||
#{pubkey}
|
|
||||||
<p>
|
|
||||||
Once you have added the key to GitLab, come back to this page #
|
|
||||||
to finish setting up the repository.
|
|
||||||
$of _
|
|
||||||
<p>
|
|
||||||
You can sign up for an account on #
|
|
||||||
<a href="http://gitlab.com/">
|
|
||||||
GitLab.com #
|
|
||||||
and create a git repository that you want to use with git-annex, #
|
|
||||||
or find an existing git-annex repository to share with.
|
|
||||||
<p>
|
|
||||||
Copy the GitLab repository's SSH clone url into the form below.
|
|
||||||
<form method="post" .form-horizontal enctype=#{enctype}>
|
|
||||||
<fieldset>
|
|
||||||
^{form}
|
|
||||||
^{webAppFormAuthToken}
|
|
||||||
<div .form-group>
|
|
||||||
<div .col-sm-10 .col-sm-offset-2>
|
|
||||||
<button .btn .btn-primary type=submit onclick="$('#setupmodal').modal('show');">
|
|
||||||
Use this gitlab.com repository
|
|
||||||
^{sshTestModal}
|
|
Loading…
Reference in a new issue