forked from mystiq/dex
Merge pull request #349 from ericchiang/remove_unused_code
*: remove unused code
This commit is contained in:
commit
a35b4257cd
6 changed files with 1 additions and 371 deletions
|
@ -2,13 +2,9 @@ package http
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/coreos/dex/pkg/log"
|
"github.com/coreos/dex/pkg/log"
|
||||||
)
|
)
|
||||||
|
@ -28,73 +24,6 @@ func WriteError(w http.ResponseWriter, code int, msg string) {
|
||||||
w.Write(b)
|
w.Write(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func cacheControlMaxAge(hdr string) (time.Duration, bool, error) {
|
|
||||||
for _, field := range strings.Split(hdr, ",") {
|
|
||||||
parts := strings.SplitN(strings.TrimSpace(field), "=", 2)
|
|
||||||
k := strings.ToLower(strings.TrimSpace(parts[0]))
|
|
||||||
if k != "max-age" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(parts) == 1 {
|
|
||||||
return 0, false, errors.New("max-age has no value")
|
|
||||||
}
|
|
||||||
|
|
||||||
v := strings.TrimSpace(parts[1])
|
|
||||||
if v == "" {
|
|
||||||
return 0, false, errors.New("max-age has empty value")
|
|
||||||
}
|
|
||||||
|
|
||||||
age, err := strconv.Atoi(v)
|
|
||||||
if err != nil {
|
|
||||||
return 0, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if age <= 0 {
|
|
||||||
return 0, false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return time.Duration(age) * time.Second, true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0, false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func expires(date, expires string) (time.Duration, bool, error) {
|
|
||||||
if date == "" || expires == "" {
|
|
||||||
return 0, false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
te, err := time.Parse(time.RFC1123, expires)
|
|
||||||
if err != nil {
|
|
||||||
return 0, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
td, err := time.Parse(time.RFC1123, date)
|
|
||||||
if err != nil {
|
|
||||||
return 0, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
ttl := te.Sub(td)
|
|
||||||
|
|
||||||
// headers indicate data already expired, caller should not
|
|
||||||
// have to care about this case
|
|
||||||
if ttl <= 0 {
|
|
||||||
return 0, false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return ttl, true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Cacheable(hdr http.Header) (time.Duration, bool, error) {
|
|
||||||
ttl, ok, err := cacheControlMaxAge(hdr.Get("Cache-Control"))
|
|
||||||
if err != nil || ok {
|
|
||||||
return ttl, ok, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return expires(hdr.Get("Date"), hdr.Get("Expires"))
|
|
||||||
}
|
|
||||||
|
|
||||||
// MergeQuery appends additional query values to an existing URL.
|
// MergeQuery appends additional query values to an existing URL.
|
||||||
func MergeQuery(u url.URL, q url.Values) url.URL {
|
func MergeQuery(u url.URL, q url.Values) url.URL {
|
||||||
uv := u.Query()
|
uv := u.Query()
|
||||||
|
@ -116,15 +45,3 @@ func NewResourceLocation(reqURL *url.URL, id string) string {
|
||||||
u.Fragment = ""
|
u.Fragment = ""
|
||||||
return u.String()
|
return u.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// CopyRequest returns a clone of the provided *http.Request.
|
|
||||||
// The returned object is a shallow copy of the struct and a
|
|
||||||
// deep copy of its Header field.
|
|
||||||
func CopyRequest(r *http.Request) *http.Request {
|
|
||||||
r2 := *r
|
|
||||||
r2.Header = make(http.Header)
|
|
||||||
for k, s := range r.Header {
|
|
||||||
r2.Header[k] = s
|
|
||||||
}
|
|
||||||
return &r2
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,60 +1,11 @@
|
||||||
package http
|
package http
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
|
||||||
"net/url"
|
"net/url"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCacheControlMaxAgeSuccess(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
hdr string
|
|
||||||
wantAge time.Duration
|
|
||||||
wantOK bool
|
|
||||||
}{
|
|
||||||
{"max-age=12", 12 * time.Second, true},
|
|
||||||
{"max-age=-12", 0, false},
|
|
||||||
{"max-age=0", 0, false},
|
|
||||||
{"public, max-age=12", 12 * time.Second, true},
|
|
||||||
{"public, max-age=40192, must-revalidate", 40192 * time.Second, true},
|
|
||||||
{"public, not-max-age=12, must-revalidate", time.Duration(0), false},
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, tt := range tests {
|
|
||||||
maxAge, ok, err := cacheControlMaxAge(tt.hdr)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("case %d: err=%v", i, err)
|
|
||||||
}
|
|
||||||
if tt.wantAge != maxAge {
|
|
||||||
t.Errorf("case %d: want=%d got=%d", i, tt.wantAge, maxAge)
|
|
||||||
}
|
|
||||||
if tt.wantOK != ok {
|
|
||||||
t.Errorf("case %d: incorrect ok value: want=%t got=%t", i, tt.wantOK, ok)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCacheControlMaxAgeFail(t *testing.T) {
|
|
||||||
tests := []string{
|
|
||||||
"max-age=aasdf",
|
|
||||||
"max-age=",
|
|
||||||
"max-age",
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, tt := range tests {
|
|
||||||
_, ok, err := cacheControlMaxAge(tt)
|
|
||||||
if ok {
|
|
||||||
t.Errorf("case %d: want ok=false, got true", i)
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
t.Errorf("case %d: want non-nil err", i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestMergeQuery(t *testing.T) {
|
func TestMergeQuery(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
u string
|
u string
|
||||||
|
@ -134,176 +85,6 @@ func TestMergeQuery(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestExpiresPass(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
date string
|
|
||||||
exp string
|
|
||||||
wantTTL time.Duration
|
|
||||||
wantOK bool
|
|
||||||
}{
|
|
||||||
// Expires and Date properly set
|
|
||||||
{
|
|
||||||
date: "Thu, 01 Dec 1983 22:00:00 GMT",
|
|
||||||
exp: "Fri, 02 Dec 1983 01:00:00 GMT",
|
|
||||||
wantTTL: 10800 * time.Second,
|
|
||||||
wantOK: true,
|
|
||||||
},
|
|
||||||
// empty headers
|
|
||||||
{
|
|
||||||
date: "",
|
|
||||||
exp: "",
|
|
||||||
wantOK: false,
|
|
||||||
},
|
|
||||||
// lack of Expirs short-ciruits Date parsing
|
|
||||||
{
|
|
||||||
date: "foo",
|
|
||||||
exp: "",
|
|
||||||
wantOK: false,
|
|
||||||
},
|
|
||||||
// lack of Date short-ciruits Expires parsing
|
|
||||||
{
|
|
||||||
date: "",
|
|
||||||
exp: "foo",
|
|
||||||
wantOK: false,
|
|
||||||
},
|
|
||||||
// no Date
|
|
||||||
{
|
|
||||||
exp: "Thu, 01 Dec 1983 22:00:00 GMT",
|
|
||||||
wantTTL: 0,
|
|
||||||
wantOK: false,
|
|
||||||
},
|
|
||||||
// no Expires
|
|
||||||
{
|
|
||||||
date: "Thu, 01 Dec 1983 22:00:00 GMT",
|
|
||||||
wantTTL: 0,
|
|
||||||
wantOK: false,
|
|
||||||
},
|
|
||||||
// Expires < Date
|
|
||||||
{
|
|
||||||
date: "Fri, 02 Dec 1983 01:00:00 GMT",
|
|
||||||
exp: "Thu, 01 Dec 1983 22:00:00 GMT",
|
|
||||||
wantTTL: 0,
|
|
||||||
wantOK: false,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, tt := range tests {
|
|
||||||
ttl, ok, err := expires(tt.date, tt.exp)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("case %d: err=%v", i, err)
|
|
||||||
}
|
|
||||||
if tt.wantTTL != ttl {
|
|
||||||
t.Errorf("case %d: want=%d got=%d", i, tt.wantTTL, ttl)
|
|
||||||
}
|
|
||||||
if tt.wantOK != ok {
|
|
||||||
t.Errorf("case %d: incorrect ok value: want=%t got=%t", i, tt.wantOK, ok)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestExpiresFail(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
date string
|
|
||||||
exp string
|
|
||||||
}{
|
|
||||||
// malformed Date header
|
|
||||||
{
|
|
||||||
date: "foo",
|
|
||||||
exp: "Fri, 02 Dec 1983 01:00:00 GMT",
|
|
||||||
},
|
|
||||||
// malformed exp header
|
|
||||||
{
|
|
||||||
date: "Fri, 02 Dec 1983 01:00:00 GMT",
|
|
||||||
exp: "bar",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, tt := range tests {
|
|
||||||
_, _, err := expires(tt.date, tt.exp)
|
|
||||||
if err == nil {
|
|
||||||
t.Errorf("case %d: expected non-nil error", i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCacheablePass(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
headers http.Header
|
|
||||||
wantTTL time.Duration
|
|
||||||
wantOK bool
|
|
||||||
}{
|
|
||||||
// valid Cache-Control
|
|
||||||
{
|
|
||||||
headers: http.Header{
|
|
||||||
"Cache-Control": []string{"max-age=100"},
|
|
||||||
},
|
|
||||||
wantTTL: 100 * time.Second,
|
|
||||||
wantOK: true,
|
|
||||||
},
|
|
||||||
// valid Date/Expires
|
|
||||||
{
|
|
||||||
headers: http.Header{
|
|
||||||
"Date": []string{"Thu, 01 Dec 1983 22:00:00 GMT"},
|
|
||||||
"Expires": []string{"Fri, 02 Dec 1983 01:00:00 GMT"},
|
|
||||||
},
|
|
||||||
wantTTL: 10800 * time.Second,
|
|
||||||
wantOK: true,
|
|
||||||
},
|
|
||||||
// Cache-Control supersedes Date/Expires
|
|
||||||
{
|
|
||||||
headers: http.Header{
|
|
||||||
"Cache-Control": []string{"max-age=100"},
|
|
||||||
"Date": []string{"Thu, 01 Dec 1983 22:00:00 GMT"},
|
|
||||||
"Expires": []string{"Fri, 02 Dec 1983 01:00:00 GMT"},
|
|
||||||
},
|
|
||||||
wantTTL: 100 * time.Second,
|
|
||||||
wantOK: true,
|
|
||||||
},
|
|
||||||
// no caching headers
|
|
||||||
{
|
|
||||||
headers: http.Header{},
|
|
||||||
wantOK: false,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, tt := range tests {
|
|
||||||
ttl, ok, err := Cacheable(tt.headers)
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("case %d: err=%v", i, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if tt.wantTTL != ttl {
|
|
||||||
t.Errorf("case %d: want=%d got=%d", i, tt.wantTTL, ttl)
|
|
||||||
}
|
|
||||||
if tt.wantOK != ok {
|
|
||||||
t.Errorf("case %d: incorrect ok value: want=%t got=%t", i, tt.wantOK, ok)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCacheableFail(t *testing.T) {
|
|
||||||
tests := []http.Header{
|
|
||||||
// invalid Cache-Control short-circuits
|
|
||||||
http.Header{
|
|
||||||
"Cache-Control": []string{"max-age"},
|
|
||||||
"Date": []string{"Thu, 01 Dec 1983 22:00:00 GMT"},
|
|
||||||
"Expires": []string{"Fri, 02 Dec 1983 01:00:00 GMT"},
|
|
||||||
},
|
|
||||||
// no Cache-Control, invalid Expires
|
|
||||||
http.Header{
|
|
||||||
"Date": []string{"Thu, 01 Dec 1983 22:00:00 GMT"},
|
|
||||||
"Expires": []string{"boo"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, tt := range tests {
|
|
||||||
_, _, err := Cacheable(tt)
|
|
||||||
if err == nil {
|
|
||||||
t.Errorf("case %d: want non-nil err", i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNewResourceLocation(t *testing.T) {
|
func TestNewResourceLocation(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
ru *url.URL
|
ru *url.URL
|
||||||
|
@ -366,15 +147,3 @@ func TestNewResourceLocation(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCopyRequest(t *testing.T) {
|
|
||||||
r1, err := http.NewRequest("GET", "http://example.com", strings.NewReader("foo"))
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Unexpected error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
r2 := CopyRequest(r1)
|
|
||||||
if !reflect.DeepEqual(r1, r2) {
|
|
||||||
t.Fatalf("Result of CopyRequest incorrect: %#v != %#v", r1, r2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
package net
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/url"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// URLEqual checks two urls for equality using only the host and path portions.
|
|
||||||
func URLEqual(url1, url2 string) bool {
|
|
||||||
u1, err := url.Parse(url1)
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
u2, err := url.Parse(url2)
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return strings.ToLower(u1.Host+u1.Path) == strings.ToLower(u2.Host+u2.Path)
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
package net
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestURLEqual(t *testing.T) {
|
|
||||||
tests := []struct {
|
|
||||||
a string
|
|
||||||
b string
|
|
||||||
equal bool
|
|
||||||
}{
|
|
||||||
{"https://accounts.example.com", "accounts.example.com", true},
|
|
||||||
{"accounts.example.com", "accounts.example.com", true},
|
|
||||||
{"accounts.example.com/FOO", "accounts.example.com/foo", true},
|
|
||||||
{"https://accounts.example.com", "https://accounts.example.com", true},
|
|
||||||
{"https://example.com/path1", "https://example.com/path2", false},
|
|
||||||
{"https://example.com/path", "https://example.com/path", true},
|
|
||||||
{"https://example.com/path?asdf=123", "example.com/path?foo=bar", true},
|
|
||||||
{"foo.com", "bar.com", false},
|
|
||||||
{"foo.com/foo", "foo.com/bar", false},
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, tt := range tests {
|
|
||||||
equal := URLEqual(tt.a, tt.b)
|
|
||||||
if tt.equal != equal {
|
|
||||||
t.Errorf("case %d: want=%t got=%t", i, tt.equal, equal)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -149,12 +149,6 @@ func (h *SendResetPasswordEmailHandler) errPage(w http.ResponseWriter, msg strin
|
||||||
execTemplateWithStatus(w, h.tpl, data, status)
|
execTemplateWithStatus(w, h.tpl, data, status)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *SendResetPasswordEmailHandler) internalError(w http.ResponseWriter, err error) {
|
|
||||||
log.Errorf("Internal Error during sending password reset email: %v", err)
|
|
||||||
h.errPage(w, "There was a problem processing your request.", http.StatusInternalServerError,
|
|
||||||
&sendResetPasswordEmailData{})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *SendResetPasswordEmailHandler) exchangeKeyForClientAndRedirect(key string) (string, url.URL, error) {
|
func (h *SendResetPasswordEmailHandler) exchangeKeyForClientAndRedirect(key string) (string, url.URL, error) {
|
||||||
id, err := h.sm.ExchangeKey(key)
|
id, err := h.sm.ExchangeKey(key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
2
test
2
test
|
@ -18,7 +18,7 @@ if [ ! -d $GOPATH/pkg ]; then
|
||||||
echo "WARNING: No cached builds detected. Please run the ./build script to speed up future tests."
|
echo "WARNING: No cached builds detected. Please run the ./build script to speed up future tests."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
TESTABLE="connector db integration pkg/crypto pkg/flag pkg/http pkg/net pkg/time pkg/html functional/repo server session session/manager user user/api user/manager user/email email admin"
|
TESTABLE="connector db integration pkg/crypto pkg/flag pkg/http pkg/time pkg/html functional/repo server session session/manager user user/api user/manager user/email email admin"
|
||||||
FORMATTABLE="$TESTABLE cmd/dexctl cmd/dex-worker cmd/dex-overlord examples/app functional pkg/log"
|
FORMATTABLE="$TESTABLE cmd/dexctl cmd/dex-worker cmd/dex-overlord examples/app functional pkg/log"
|
||||||
|
|
||||||
# user has not provided PKG override
|
# user has not provided PKG override
|
||||||
|
|
Loading…
Reference in a new issue