Move LoginHandler into LoginServer which others embed (#3431)
* Move LoginHandler into LoginServer which others embed * Add unit tests for loginServermaster
parent
2d6f8153fa
commit
6b4e6bcebf
@ -0,0 +1,41 @@ |
||||
/* |
||||
* Minio Cloud Storage, (C) 2016 Minio, Inc. |
||||
* |
||||
* 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. |
||||
*/ |
||||
|
||||
package cmd |
||||
|
||||
import "time" |
||||
|
||||
type loginServer struct { |
||||
} |
||||
|
||||
// LoginHandler - Handles JWT based RPC logic.
|
||||
func (b loginServer) LoginHandler(args *RPCLoginArgs, reply *RPCLoginReply) error { |
||||
jwt, err := newJWT(defaultInterNodeJWTExpiry, serverConfig.GetCredential()) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
if err = jwt.Authenticate(args.Username, args.Password); err != nil { |
||||
return err |
||||
} |
||||
token, err := jwt.GenerateToken(args.Username) |
||||
if err != nil { |
||||
return err |
||||
} |
||||
reply.Token = token |
||||
reply.Timestamp = time.Now().UTC() |
||||
reply.ServerVersion = Version |
||||
return nil |
||||
} |
@ -0,0 +1,67 @@ |
||||
/* |
||||
* Minio Cloud Storage, (C) 2016 Minio, Inc. |
||||
* |
||||
* 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. |
||||
*/ |
||||
|
||||
package cmd |
||||
|
||||
import "testing" |
||||
|
||||
func TestLoginHandler(t *testing.T) { |
||||
rootPath, err := newTestConfig("us-east-1") |
||||
if err != nil { |
||||
t.Fatalf("Failed to create test config - %v", err) |
||||
} |
||||
defer removeAll(rootPath) |
||||
creds := serverConfig.GetCredential() |
||||
ls := loginServer{} |
||||
testCases := []struct { |
||||
args RPCLoginArgs |
||||
expectedErr error |
||||
}{ |
||||
// Valid username and password
|
||||
{ |
||||
args: RPCLoginArgs{Username: creds.AccessKeyID, Password: creds.SecretAccessKey}, |
||||
expectedErr: nil, |
||||
}, |
||||
// Invalid username length
|
||||
{ |
||||
args: RPCLoginArgs{Username: "aaa", Password: "minio123"}, |
||||
expectedErr: errInvalidAccessKeyLength, |
||||
}, |
||||
// Invalid password length
|
||||
{ |
||||
args: RPCLoginArgs{Username: "minio", Password: "aaa"}, |
||||
expectedErr: errInvalidSecretKeyLength, |
||||
}, |
||||
// Invalid username
|
||||
{ |
||||
args: RPCLoginArgs{Username: "aaaaa", Password: creds.SecretAccessKey}, |
||||
expectedErr: errInvalidAccessKeyID, |
||||
}, |
||||
// Invalid password
|
||||
{ |
||||
args: RPCLoginArgs{Username: creds.AccessKeyID, Password: "aaaaaaaa"}, |
||||
expectedErr: errAuthentication, |
||||
}, |
||||
} |
||||
for i, test := range testCases { |
||||
reply := RPCLoginReply{} |
||||
err := ls.LoginHandler(&test.args, &reply) |
||||
if err != test.expectedErr { |
||||
t.Errorf("Test %d: Expected error %v but received %v", |
||||
i+1, test.expectedErr, err) |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue