代码拉取完成,页面将自动刷新
/*
* Copyright © 2015-2018 Aeneas Rekkas <[email protected]>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @author Aeneas Rekkas <[email protected]>
* @copyright 2015-2018 Aeneas Rekkas <[email protected]>
* @license Apache-2.0
*
*/
package fosite
import (
"net/url"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestIsLocalhost(t *testing.T) {
for k, c := range []struct {
expect bool
rawurl string
}{
{expect: false, rawurl: "https://foo.bar"},
{expect: true, rawurl: "https://localhost"},
{expect: true, rawurl: "https://localhost:1234"},
{expect: true, rawurl: "https://127.0.0.1:1234"},
{expect: true, rawurl: "https://127.0.0.1"},
{expect: true, rawurl: "https://test.localhost:1234"},
{expect: true, rawurl: "https://test.localhost"},
} {
u, _ := url.Parse(c.rawurl)
assert.Equal(t, c.expect, IsLocalhost(u), "case %d", k)
}
}
// Test for
// * https://tools.ietf.org/html/rfc6749#section-3.1.2
// The endpoint URI MAY include an
// "application/x-www-form-urlencoded" formatted (per Appendix B) query
// component ([RFC3986] Section 3.4), which MUST be retained when adding
// additional query parameters.
func TestGetRedirectURI(t *testing.T) {
for k, c := range []struct {
in string
isError bool
expected string
}{
{in: "", isError: false, expected: ""},
{in: "https://google.com/", isError: false, expected: "https://google.com/"},
{in: "https://google.com/?foo=bar%20foo+baz", isError: false, expected: "https://google.com/?foo=bar foo baz"},
} {
values := url.Values{}
values.Set("redirect_uri", c.in)
res, err := GetRedirectURIFromRequestValues(values)
assert.Equal(t, c.isError, err != nil, "%s", err)
if err == nil {
assert.Equal(t, c.expected, res)
}
t.Logf("Passed test case %d", k)
}
}
// rfc6749 10.6.
// Authorization Code Redirection URI Manipulation
// The authorization server MUST require public clients and SHOULD require confidential clients
// to register their redirection URIs. If a redirection URI is provided
// in the request, the authorization server MUST validate it against the
// registered value.
//
// rfc6819 4.4.1.7.
// Threat: Authorization "code" Leakage through Counterfeit Client
// The authorization server may also enforce the usage and validation
// of pre-registered redirect URIs (see Section 5.2.3.5).
func TestDoesClientWhiteListRedirect(t *testing.T) {
for k, c := range []struct {
client Client
url string
isError bool
expected string
}{
{
client: &DefaultClient{RedirectURIs: []string{""}},
url: "https://foo.com/cb",
isError: true,
},
{
client: &DefaultClient{RedirectURIs: []string{"wta://auth"}},
url: "wta://auth",
expected: "wta://auth",
isError: false,
},
{
client: &DefaultClient{RedirectURIs: []string{"wta:///auth"}},
url: "wta:///auth",
expected: "wta:///auth",
isError: false,
},
{
client: &DefaultClient{RedirectURIs: []string{"wta://foo/auth"}},
url: "wta://foo/auth",
expected: "wta://foo/auth",
isError: false,
},
{
client: &DefaultClient{RedirectURIs: []string{"https://bar.com/cb"}},
url: "https://foo.com/cb",
isError: true,
},
{
client: &DefaultClient{RedirectURIs: []string{"https://bar.com/cb"}},
url: "",
isError: false,
expected: "https://bar.com/cb",
},
{
client: &DefaultClient{RedirectURIs: []string{""}},
url: "",
isError: true,
},
{
client: &DefaultClient{RedirectURIs: []string{"https://bar.com/cb"}},
url: "https://bar.com/cb",
isError: false,
expected: "https://bar.com/cb",
},
{
client: &DefaultClient{RedirectURIs: []string{"https://bar.Com/cb"}},
url: "https://bar.com/cb",
isError: false,
expected: "https://bar.com/cb",
},
{
client: &DefaultClient{RedirectURIs: []string{"https://bar.com/cb"}},
url: "https://bar.Com/cb",
isError: false,
expected: "https://bar.Com/cb",
},
{
client: &DefaultClient{RedirectURIs: []string{"https://bar.com/cb"}},
url: "https://bar.com/cb123",
isError: true,
},
{
client: &DefaultClient{RedirectURIs: []string{"http://[::1]"}},
url: "http://[::1]:1024",
isError: false,
expected: "http://[::1]:1024",
},
{
client: &DefaultClient{RedirectURIs: []string{"http://[::1]"}},
url: "http://[::1]:1024/cb",
isError: true,
},
{
client: &DefaultClient{RedirectURIs: []string{"http://[::1]/cb"}},
url: "http://[::1]:1024/cb",
isError: false,
expected: "http://[::1]:1024/cb",
},
{
client: &DefaultClient{RedirectURIs: []string{"http://[::1]"}},
url: "http://foo.bar/bar",
isError: true,
},
{
client: &DefaultClient{RedirectURIs: []string{"http://127.0.0.1"}},
url: "http://127.0.0.1:1024",
isError: false,
expected: "http://127.0.0.1:1024",
},
{
client: &DefaultClient{RedirectURIs: []string{"http://127.0.0.1/cb"}},
url: "http://127.0.0.1:64000/cb",
isError: false,
expected: "http://127.0.0.1:64000/cb",
},
{
client: &DefaultClient{RedirectURIs: []string{"http://127.0.0.1"}},
url: "http://127.0.0.1:64000/cb",
isError: true,
},
{
client: &DefaultClient{RedirectURIs: []string{"http://127.0.0.1"}},
url: "http://127.0.0.1",
isError: false,
expected: "http://127.0.0.1",
},
{
client: &DefaultClient{RedirectURIs: []string{"http://127.0.0.1/Cb"}},
url: "http://127.0.0.1:8080/Cb",
isError: false,
expected: "http://127.0.0.1:8080/Cb",
},
{
client: &DefaultClient{RedirectURIs: []string{"http://127.0.0.1"}},
url: "http://foo.bar/bar",
isError: true,
},
{
client: &DefaultClient{RedirectURIs: []string{"http://127.0.0.1"}},
url: ":/invalid.uri)bar",
isError: true,
},
} {
redir, err := MatchRedirectURIWithClientRedirectURIs(c.url, c.client)
assert.Equal(t, c.isError, err != nil, "%d: %s", k, err)
if err == nil {
require.NotNil(t, redir, "%d", k)
assert.Equal(t, c.expected, redir.String(), "%d", k)
}
t.Logf("Passed test case %d", k)
}
}
func TestIsRedirectURISecure(t *testing.T) {
for d, c := range []struct {
u string
err bool
}{
{u: "http://google.com", err: true},
{u: "https://google.com", err: false},
{u: "http://localhost", err: false},
{u: "http://test.localhost", err: false},
{u: "http://127.0.0.1/", err: false},
{u: "http://testlocalhost", err: true},
{u: "wta://auth", err: false},
} {
uu, err := url.Parse(c.u)
require.NoError(t, err)
assert.Equal(t, !c.err, IsRedirectURISecure(uu), "case %d", d)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。