pulsar/auth/basic.go (54 lines of code) (raw):
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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.
package auth
import (
"crypto/tls"
"encoding/base64"
"errors"
"net/http"
)
type basicAuthProvider struct {
rt http.RoundTripper
commandAuthToken []byte
httpAuthToken string
}
func NewAuthenticationBasic(username, password string) (Provider, error) {
if username == "" {
return nil, errors.New("username cannot be empty")
}
if password == "" {
return nil, errors.New("password cannot be empty")
}
commandAuthToken := []byte(username + ":" + password)
return &basicAuthProvider{
commandAuthToken: commandAuthToken,
httpAuthToken: "Basic " + base64.StdEncoding.EncodeToString(commandAuthToken),
}, nil
}
func NewAuthenticationBasicWithParams(params map[string]string) (Provider, error) {
return NewAuthenticationBasic(params["username"], params["password"])
}
func (b *basicAuthProvider) Init() error {
return nil
}
func (b *basicAuthProvider) Name() string {
return "basic"
}
func (b *basicAuthProvider) GetTLSCertificate() (*tls.Certificate, error) {
return nil, nil
}
func (b *basicAuthProvider) GetData() ([]byte, error) {
return b.commandAuthToken, nil
}
func (b *basicAuthProvider) Close() error {
return nil
}
func (b *basicAuthProvider) RoundTrip(req *http.Request) (*http.Response, error) {
req.Header.Add("Authorization", b.httpAuthToken)
return b.rt.RoundTrip(req)
}
func (b *basicAuthProvider) Transport() http.RoundTripper {
return b.rt
}
func (b *basicAuthProvider) WithTransport(tr http.RoundTripper) error {
b.rt = tr
return nil
}