Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
张磊
/
FileStorageBeego
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
a184c236
authored
2014-02-10 11:31:54 +0800
by
asta.xie
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
basic auth for plugin
1 parent
1b778509
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
75 additions
and
0 deletions
plugins/auth/basic.go
plugins/auth/basic.go
0 → 100644
View file @
a184c23
// basic auth for plugin
package
auth
// Example:
// func SecretAuth(username, password string) bool {
// if username == "astaxie" && password == "helloBeego" {
// return true
// }
// return false
// }
// authPlugin := auth.NewBasicAuthenticator(SecretAuth)
// beego.AddFilter("*","AfterStatic",authPlugin)
import
(
"encoding/base64"
"net/http"
"strings"
"github.com/astaxie/beego"
"github.com/astaxie/beego/context"
)
func
NewBasicAuthenticator
(
secrets
SecretProvider
,
Realm
string
)
beego
.
FilterFunc
{
return
func
(
ctx
*
context
.
Context
)
{
a
:=
&
BasicAuth
{
Secrets
:
secrets
,
Realm
:
Realm
}
if
username
:=
a
.
CheckAuth
(
ctx
.
Request
);
username
==
""
{
a
.
RequireAuth
(
ctx
.
ResponseWriter
,
ctx
.
Request
)
}
}
}
type
SecretProvider
func
(
user
,
pass
string
)
bool
type
BasicAuth
struct
{
Secrets
SecretProvider
Realm
string
}
/*
Checks the username/password combination from the request. Returns
either an empty string (authentication failed) or the name of the
authenticated user.
Supports MD5 and SHA1 password entries
*/
func
(
a
*
BasicAuth
)
CheckAuth
(
r
*
http
.
Request
)
string
{
s
:=
strings
.
SplitN
(
r
.
Header
.
Get
(
"Authorization"
),
" "
,
2
)
if
len
(
s
)
!=
2
||
s
[
0
]
!=
"Basic"
{
return
""
}
b
,
err
:=
base64
.
StdEncoding
.
DecodeString
(
s
[
1
])
if
err
!=
nil
{
return
""
}
pair
:=
strings
.
SplitN
(
string
(
b
),
":"
,
2
)
if
len
(
pair
)
!=
2
{
return
""
}
if
a
.
Secrets
(
pair
[
0
],
pair
[
1
])
{
return
pair
[
0
]
}
return
""
}
/*
http.Handler for BasicAuth which initiates the authentication process
(or requires reauthentication).
*/
func
(
a
*
BasicAuth
)
RequireAuth
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
w
.
Header
()
.
Set
(
"WWW-Authenticate"
,
`Basic realm="`
+
a
.
Realm
+
`"`
)
w
.
WriteHeader
(
401
)
w
.
Write
([]
byte
(
"401 Unauthorized
\n
"
))
}
Write
Preview
Styling with
Markdown
is supported
Attach a file
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 post a comment