import GHC.Generics
type P2PHttpAPI
- = "git-annex" :> "v3" :> "key" :> CaptureKey
- :> GetAPI '[DataLengthHeader]
- :<|> "git-annex" :> "v2" :> "key" :> CaptureKey
- :> GetAPI '[DataLengthHeader]
- :<|> "git-annex" :> "v1" :> "key" :> CaptureKey
- :> GetAPI '[DataLengthHeader]
- :<|> "git-annex" :> "v0" :> "key" :> CaptureKey
- :> GetAPI '[]
+ = "git-annex" :> "v3" :> "key" :> CaptureKey :> GetAPI
+ :<|> "git-annex" :> "v2" :> "key" :> CaptureKey :> GetAPI
+ :<|> "git-annex" :> "v1" :> "key" :> CaptureKey :> GetAPI
+ :<|> "git-annex" :> "v0" :> "key" :> CaptureKey :> GetAPI
:<|> "git-annex" :> "v3" :> "checkpresent" :> CheckPresentAPI
:<|> "git-annex" :> "v2" :> "checkpresent" :> CheckPresentAPI
:<|> "git-annex" :> "v1" :> "checkpresent" :> CheckPresentAPI
:<|> "git-annex" :> "v2" :> "keeplocked" :> KeepLockedAPI
:<|> "git-annex" :> "v1" :> "keeplocked" :> KeepLockedAPI
:<|> "git-annex" :> "v0" :> "keeplocked" :> KeepLockedAPI
- :<|> "git-annex" :> "key" :> CaptureKey :> GetAPI '[]
+ :<|> "git-annex" :> "key" :> CaptureKey :> GetGenericAPI
p2pHttpAPI :: Proxy P2PHttpAPI
p2pHttpAPI = Proxy
= serveGet
:<|> serveGet
:<|> serveGet
- :<|> serveGet0
+ :<|> serveGet
:<|> serveCheckPresent
:<|> serveCheckPresent
:<|> serveCheckPresent
:<|> serveKeepLocked
:<|> serveKeepLocked
:<|> serveKeepLocked
- :<|> serveGet0
+ :<|> serveGetGeneric
+
+type GetGenericAPI = StreamGet NoFraming OctetStream (SourceIO B.ByteString)
-type GetAPI headers
+serveGetGeneric :: B64Key -> Handler (S.SourceT IO B.ByteString)
+serveGetGeneric = undefined
+
+type GetAPI
= ClientUUID Optional
:> ServerUUID Optional
:> BypassUUIDs
:> AssociatedFileParam
:> OffsetParam
:> StreamGet NoFraming OctetStream
- (Headers headers (SourceIO B.ByteString))
+ (Headers '[DataLengthHeader] (SourceIO B.ByteString))
serveGet
:: B64Key
-> Handler (Headers '[DataLengthHeader] (S.SourceT IO B.ByteString))
serveGet = undefined
-serveGet0
- :: B64Key
- -> Maybe (B64UUID ClientSide)
- -> Maybe (B64UUID ServerSide)
- -> [B64UUID Bypass]
- -> Maybe B64FilePath
- -> Maybe Offset
- -> Handler (Headers '[] (S.SourceT IO B.ByteString))
-serveGet0 = undefined
-
clientGet
:: P2P.ProtocolVersion
-> B64Key
-> Maybe B64FilePath
-> Maybe Offset
-> ClientM (Headers '[DataLengthHeader] (S.SourceT IO B.ByteString))
-clientGet (P2P.ProtocolVersion ver) k cu su bypass af o = case ver of
- 3 -> v3 k cu su bypass af o
- 2 -> v2 k cu su bypass af o
- 1 -> error "XXX" -- TODO v1
- 0 -> error "XXX" -- TODO v0
+clientGet (P2P.ProtocolVersion ver) = case ver of
+ 3 -> v3
+ 2 -> v2
+ 1 -> v1
+ 0 -> v0
_ -> error "unsupported protocol version"
where
- _ :<|> v3 :<|> v2 :<|> v1 :<|> v0 :<|> _ = client p2pHttpAPI
+ v3 :<|> v2 :<|> v1 :<|> v0 :<|> _ = client p2pHttpAPI
type CheckPresentAPI
= KeyParam
other clients than git-annex easily download the content of keys from the
http server.
-This behaves almost the same as `GET /git-annex/v0/key/$key`, although its
-behavior may change in later versions.
-
When the key is not present on the server, this returns a 404 Not Found.
### GET /git-annex/v3/key/$key
### GET /git-annex/v0/key/$key
-Same as v3, except there is no X-git-annex-data-length header.
+Same as v3, except the X-git-annex-data-length header is not used.
Additional checking client-side will be required to validate the data.
### POST /git-annex/v3/checkpresent