clean-up before bed

This commit is contained in:
Jimmy Zelinskie
2013-06-23 06:21:59 -04:00
parent ccc8897ca8
commit 51acd12101
7 changed files with 99 additions and 100 deletions
+8 -35
View File
@@ -10,38 +10,36 @@ import (
"log"
"net/http"
"path"
"github.com/pushrax/chihaya/config"
)
func (s *Server) serveAnnounce(w http.ResponseWriter, r *http.Request) {
passkey, _ := path.Split(r.URL.Path)
user, err := validatePasskey(passkey, s.storage)
if err != nil {
fail(err, w, r)
fail(err, w)
return
}
pq, err := parseQuery(r.URL.RawQuery)
if err != nil {
fail(errors.New("Error parsing query"), w, r)
fail(errors.New("Error parsing query"), w)
return
}
ip, err := pq.determineIP(r)
if err != nil {
fail(err, w, r)
fail(err, w)
return
}
err = validateParsedQuery(pq)
err = pq.validate()
if err != nil {
fail(errors.New("Malformed request"), w, r)
fail(errors.New("Malformed request"), w)
return
}
if !whitelisted(pq.params["peerId"], s.conf) {
fail(errors.New("Your client is not approved"), w, r)
if !s.conf.Whitelisted(pq.params["peerId"]) {
fail(errors.New("Your client is not approved"), w)
return
}
@@ -50,7 +48,7 @@ func (s *Server) serveAnnounce(w http.ResponseWriter, r *http.Request) {
log.Panicf("server: %s", err)
}
if !exists {
fail(errors.New("This torrent does not exist"), w, r)
fail(errors.New("This torrent does not exist"), w)
return
}
@@ -68,34 +66,9 @@ func (s *Server) serveAnnounce(w http.ResponseWriter, r *http.Request) {
left,
),
w,
r,
)
return
}
// TODO continue
}
func whitelisted(peerId string, conf *config.Config) bool {
var (
widLen int
matched bool
)
for _, whitelistedId := range conf.Whitelist {
widLen = len(whitelistedId)
if widLen <= len(peerId) {
matched = true
for i := 0; i < widLen; i++ {
if peerId[i] != whitelistedId[i] {
matched = false
break
}
}
if matched {
return true
}
}
}
return false
}
+1 -1
View File
@@ -96,7 +96,7 @@ func parseQuery(query string) (*parsedQuery, error) {
return pq, nil
}
func validateParsedQuery(pq *parsedQuery) error {
func (pq *parsedQuery) validate() error {
infohash, ok := pq.params["info_hash"]
if infohash == "" {
return errors.New("infohash does not exist")
+7 -3
View File
@@ -1,3 +1,7 @@
// Copyright 2013 The Chihaya Authors. All rights reserved.
// Use of this source code is governed by the BSD 2-Clause license,
// which can be found in the LICENSE file.
package server
import (
@@ -14,15 +18,15 @@ import (
func (s *Server) serveScrape(w http.ResponseWriter, r *http.Request) {
passkey, _ := path.Split(r.URL.Path)
user, err := validatePasskey(passkey, s.storage)
_, err := validatePasskey(passkey, s.storage)
if err != nil {
fail(err, w, r)
fail(err, w)
return
}
pq, err := parseQuery(r.URL.RawQuery)
if err != nil {
fail(errors.New("Error parsing query"), w, r)
fail(errors.New("Error parsing query"), w)
return
}
+11 -4
View File
@@ -8,6 +8,7 @@ import (
"errors"
"fmt"
"io"
"log"
"net"
"net/http"
"path"
@@ -46,7 +47,8 @@ func New(conf *config.Config) (*Server, error) {
conf: conf,
storage: store,
Server: http.Server{
Addr: conf.Addr,
Addr: conf.Addr,
ReadTimeout: conf.ReadTimeout.Duration,
},
}
s.Server.Handler = s
@@ -90,6 +92,11 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
defer atomic.AddInt64(&s.deltaRequests, 1)
defer finalizeResponse(w, r)
if r.URL.Path == "/stats" {
s.serveStats(w, r)
return
}
_, action := path.Split(r.URL.Path)
switch action {
case "announce":
@@ -99,7 +106,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
s.serveScrape(w, r)
return
default:
fail(errors.New("Unknown action"), w, r)
fail(errors.New("Unknown action"), w)
return
}
}
@@ -111,7 +118,7 @@ func finalizeResponse(w http.ResponseWriter, r *http.Request) {
w.(http.Flusher).Flush()
}
func fail(err error, w http.ResponseWriter, r *http.Request) {
func fail(err error, w http.ResponseWriter) {
errmsg := err.Error()
message := fmt.Sprintf(
"%s%s%s%s%s",
@@ -132,7 +139,7 @@ func validatePasskey(dir string, s storage.Storage) (*storage.User, error) {
user, exists, err := s.FindUser(passkey)
if err != nil {
return nil, err
log.Panicf("server: %s", err)
}
if !exists {
return nil, errors.New("Passkey not found")