Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-unixfs
Commits
b499c90d
Commit
b499c90d
authored
Oct 24, 2014
by
Matt Bell
Committed by
Juan Batiz-Benet
Nov 14, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commands/http: Moved HTTP RPC handler into commands/http
parent
e82532c7
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
72 deletions
+0
-72
server/http/http.go
server/http/http.go
+0
-72
No files found.
server/http/http.go
View file @
b499c90d
...
...
@@ -12,25 +12,19 @@ import (
manet
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr/net"
mh
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multihash"
cmds
"github.com/jbenet/go-ipfs/commands"
core
"github.com/jbenet/go-ipfs/core"
"github.com/jbenet/go-ipfs/core/commands"
)
type
objectHandler
struct
{
ipfs
}
type
apiHandler
struct
{}
// Serve starts the http server
func
Serve
(
address
ma
.
Multiaddr
,
node
*
core
.
IpfsNode
)
error
{
r
:=
mux
.
NewRouter
()
objectHandler
:=
&
objectHandler
{
&
ipfsHandler
{
node
}}
apiHandler
:=
&
apiHandler
{}
r
.
PathPrefix
(
"/api/v0/"
)
.
Handler
(
apiHandler
)
.
Methods
(
"GET"
,
"POST"
)
r
.
HandleFunc
(
"/ipfs/"
,
objectHandler
.
postHandler
)
.
Methods
(
"POST"
)
r
.
PathPrefix
(
"/ipfs/"
)
.
Handler
(
objectHandler
)
.
Methods
(
"GET"
)
...
...
@@ -84,69 +78,3 @@ func (i *objectHandler) postHandler(w http.ResponseWriter, r *http.Request) {
w
.
WriteHeader
(
http
.
StatusCreated
)
w
.
Write
([]
byte
(
mh
.
Multihash
(
k
)
.
B58String
()))
}
func
(
i
*
apiHandler
)
ServeHTTP
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
path
:=
strings
.
Split
(
r
.
URL
.
Path
,
"/"
)[
3
:
]
opts
:=
getOptions
(
r
)
// TODO: get args
// ensure the requested command exists, otherwise 404
_
,
err
:=
commands
.
Root
.
Get
(
path
)
if
err
!=
nil
{
w
.
WriteHeader
(
http
.
StatusNotFound
)
w
.
Write
([]
byte
(
"404 page not found"
))
return
}
// build the Request and call the command
req
:=
cmds
.
NewRequest
(
path
,
opts
,
nil
,
nil
)
res
:=
commands
.
Root
.
Call
(
req
)
// set the Content-Type based on res output
if
_
,
ok
:=
res
.
Value
()
.
(
io
.
Reader
);
ok
{
// TODO: set based on actual Content-Type of file
w
.
Header
()
.
Set
(
"Content-Type"
,
"application/octet-stream"
)
}
else
{
// TODO: get proper MIME type for encoding from multicodec lib
enc
,
_
:=
req
.
Option
(
cmds
.
EncShort
)
w
.
Header
()
.
Set
(
"Content-Type"
,
"application/"
+
enc
.
(
string
))
}
// if response contains an error, write an HTTP error status code
if
e
:=
res
.
Error
();
e
!=
nil
{
if
e
.
Code
==
cmds
.
ErrClient
{
w
.
WriteHeader
(
http
.
StatusBadRequest
)
}
else
{
w
.
WriteHeader
(
http
.
StatusInternalServerError
)
}
}
_
,
err
=
io
.
Copy
(
w
,
res
)
if
err
!=
nil
{
w
.
WriteHeader
(
http
.
StatusInternalServerError
)
w
.
Header
()
.
Set
(
"Content-Type"
,
"text/plain"
)
w
.
Write
([]
byte
(
err
.
Error
()))
}
}
// getOptions returns the command options in the given HTTP request
// (from the querystring and request body)
func
getOptions
(
r
*
http
.
Request
)
map
[
string
]
interface
{}
{
opts
:=
make
(
map
[
string
]
interface
{})
query
:=
r
.
URL
.
Query
()
for
k
,
v
:=
range
query
{
opts
[
k
]
=
v
[
0
]
}
// TODO: get more options from request body (formdata, json, etc)
_
,
short
:=
opts
[
cmds
.
EncShort
]
_
,
long
:=
opts
[
cmds
.
EncLong
]
if
!
short
&&
!
long
{
opts
[
cmds
.
EncShort
]
=
cmds
.
JSON
}
return
opts
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment