github.com/cloudwego/hertz@v0.9.3/pkg/app/middlewares/server/basic_auth/basic_auth_test.go (about)

     1  /*
     2   * Copyright 2022 CloudWeGo Authors
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   * The MIT License (MIT)
    16   *
    17   * Copyright (c) 2014 Manuel Martínez-Almeida
    18   *
    19   * Permission is hereby granted, free of charge, to any person obtaining a copy
    20   * of this software and associated documentation files (the "Software"), to deal
    21   * in the Software without restriction, including without limitation the rights
    22   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    23   * copies of the Software, and to permit persons to whom the Software is
    24   * furnished to do so, subject to the following conditions:
    25   *
    26   * The above copyright notice and this permission notice shall be included in
    27   * all copies or substantial portions of the Software.
    28   *
    29   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    30   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    31   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    32   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    33   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    34   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    35   * THE SOFTWARE.
    36  
    37   * This file may have been modified by CloudWeGo authors. All CloudWeGo
    38   * Modifications are Copyright 2022 CloudWeGo Authors
    39   */
    40  
    41  package basic_auth
    42  
    43  import (
    44  	"context"
    45  	"encoding/base64"
    46  	"testing"
    47  
    48  	"github.com/cloudwego/hertz/internal/bytesconv"
    49  	"github.com/cloudwego/hertz/pkg/app"
    50  	"github.com/cloudwego/hertz/pkg/common/test/assert"
    51  )
    52  
    53  func TestPairs(t *testing.T) {
    54  	t1 := Accounts{"test1": "value1"}
    55  	t2 := Accounts{"test2": "value2"}
    56  	p1 := constructPairs(t1)
    57  	p2 := constructPairs(t2)
    58  
    59  	u1, ok1 := p1.findValue("Basic dGVzdDE6dmFsdWUx")
    60  	u2, ok2 := p2.findValue("Basic dGVzdDI6dmFsdWUy")
    61  	_, ok3 := p1.findValue("bad header")
    62  	_, ok4 := p2.findValue("bad header")
    63  	assert.True(t, ok1)
    64  	assert.DeepEqual(t, "test1", u1)
    65  	assert.True(t, ok2)
    66  	assert.DeepEqual(t, "test2", u2)
    67  	assert.False(t, ok3)
    68  	assert.False(t, ok4)
    69  }
    70  
    71  func TestBasicAuth(t *testing.T) {
    72  	userName1 := "user1"
    73  	password1 := "value1"
    74  	userName2 := "user2"
    75  	password2 := "value2"
    76  
    77  	c1 := app.RequestContext{}
    78  	encodeStr := "Basic " + base64.StdEncoding.EncodeToString(bytesconv.S2b(userName1+":"+password1))
    79  	c1.Request.Header.Add("Authorization", encodeStr)
    80  
    81  	t1 := Accounts{userName1: password1}
    82  	handler := BasicAuth(t1)
    83  	handler(context.TODO(), &c1)
    84  
    85  	user, ok := c1.Get("user")
    86  	assert.DeepEqual(t, userName1, user)
    87  	assert.True(t, ok)
    88  
    89  	c2 := app.RequestContext{}
    90  	encodeStr = "Basic " + base64.StdEncoding.EncodeToString(bytesconv.S2b(userName2+":"+password2))
    91  	c2.Request.Header.Add("Authorization", encodeStr)
    92  
    93  	handler(context.TODO(), &c2)
    94  
    95  	user, ok = c2.Get("user")
    96  	assert.Nil(t, user)
    97  	assert.False(t, ok)
    98  }