mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
Merge pull request #2849 from guo-sj/update_user
Add AWS IAM update user API and its test case
This commit is contained in:
commit
8732cc24c8
|
@ -4,10 +4,6 @@ import (
|
||||||
"crypto/sha1"
|
"crypto/sha1"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/chrislusf/seaweedfs/weed/glog"
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/pb/iam_pb"
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/s3api/s3_constants"
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/s3api/s3err"
|
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
@ -16,6 +12,11 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/chrislusf/seaweedfs/weed/glog"
|
||||||
|
"github.com/chrislusf/seaweedfs/weed/pb/iam_pb"
|
||||||
|
"github.com/chrislusf/seaweedfs/weed/s3api/s3_constants"
|
||||||
|
"github.com/chrislusf/seaweedfs/weed/s3api/s3err"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/service/iam"
|
"github.com/aws/aws-sdk-go/service/iam"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -155,6 +156,22 @@ func (iama *IamApiServer) GetUser(s3cfg *iam_pb.S3ApiConfiguration, userName str
|
||||||
return resp, fmt.Errorf(iam.ErrCodeNoSuchEntityException)
|
return resp, fmt.Errorf(iam.ErrCodeNoSuchEntityException)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (iama *IamApiServer) UpdateUser(s3cfg *iam_pb.S3ApiConfiguration, values url.Values) (resp UpdateUserResponse, err error) {
|
||||||
|
userName := values.Get("UserName")
|
||||||
|
newUserName := values.Get("NewUserName")
|
||||||
|
if newUserName != "" {
|
||||||
|
for _, ident := range s3cfg.Identities {
|
||||||
|
if userName == ident.Name {
|
||||||
|
ident.Name = newUserName
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
return resp, fmt.Errorf(iam.ErrCodeNoSuchEntityException)
|
||||||
|
}
|
||||||
|
|
||||||
func GetPolicyDocument(policy *string) (policyDocument PolicyDocument, err error) {
|
func GetPolicyDocument(policy *string) (policyDocument PolicyDocument, err error) {
|
||||||
if err = json.Unmarshal([]byte(*policy), &policyDocument); err != nil {
|
if err = json.Unmarshal([]byte(*policy), &policyDocument); err != nil {
|
||||||
return PolicyDocument{}, err
|
return PolicyDocument{}, err
|
||||||
|
@ -396,6 +413,13 @@ func (iama *IamApiServer) DoActions(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
changed = false
|
changed = false
|
||||||
|
case "UpdateUser":
|
||||||
|
response, err = iama.UpdateUser(s3cfg, values)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("UpdateUser: %+v", err)
|
||||||
|
s3err.WriteErrorResponse(w, r, s3err.ErrInvalidRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
case "DeleteUser":
|
case "DeleteUser":
|
||||||
userName := values.Get("UserName")
|
userName := values.Get("UserName")
|
||||||
response, err = iama.DeleteUser(s3cfg, userName)
|
response, err = iama.DeleteUser(s3cfg, userName)
|
||||||
|
|
|
@ -66,6 +66,11 @@ type GetUserResponse struct {
|
||||||
} `xml:"GetUserResult"`
|
} `xml:"GetUserResult"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UpdateUserResponse struct {
|
||||||
|
CommonResponse
|
||||||
|
XMLName xml.Name `xml:"https://iam.amazonaws.com/doc/2010-05-08/ UpdateUserResponse"`
|
||||||
|
}
|
||||||
|
|
||||||
type CreateAccessKeyResponse struct {
|
type CreateAccessKeyResponse struct {
|
||||||
CommonResponse
|
CommonResponse
|
||||||
XMLName xml.Name `xml:"https://iam.amazonaws.com/doc/2010-05-08/ CreateAccessKeyResponse"`
|
XMLName xml.Name `xml:"https://iam.amazonaws.com/doc/2010-05-08/ CreateAccessKeyResponse"`
|
||||||
|
|
|
@ -2,6 +2,10 @@ package iamapi
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
"github.com/aws/aws-sdk-go/service/iam"
|
"github.com/aws/aws-sdk-go/service/iam"
|
||||||
|
@ -9,9 +13,6 @@ import (
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/jinzhu/copier"
|
"github.com/jinzhu/copier"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"net/http"
|
|
||||||
"net/http/httptest"
|
|
||||||
"testing"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var GetS3ApiConfiguration func(s3cfg *iam_pb.S3ApiConfiguration) (err error)
|
var GetS3ApiConfiguration func(s3cfg *iam_pb.S3ApiConfiguration) (err error)
|
||||||
|
@ -161,8 +162,20 @@ func TestGetUserPolicy(t *testing.T) {
|
||||||
assert.Equal(t, http.StatusOK, response.Code)
|
assert.Equal(t, http.StatusOK, response.Code)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDeleteUser(t *testing.T) {
|
func TestUpdateUser(t *testing.T) {
|
||||||
userName := aws.String("Test")
|
userName := aws.String("Test")
|
||||||
|
newUserName := aws.String("Test-New")
|
||||||
|
params := &iam.UpdateUserInput{NewUserName: newUserName, UserName: userName}
|
||||||
|
req, _ := iam.New(session.New()).UpdateUserRequest(params)
|
||||||
|
_ = req.Build()
|
||||||
|
out := UpdateUserResponse{}
|
||||||
|
response, err := executeRequest(req.HTTPRequest, out)
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
assert.Equal(t, http.StatusOK, response.Code)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestDeleteUser(t *testing.T) {
|
||||||
|
userName := aws.String("Test-New")
|
||||||
params := &iam.DeleteUserInput{UserName: userName}
|
params := &iam.DeleteUserInput{UserName: userName}
|
||||||
req, _ := iam.New(session.New()).DeleteUserRequest(params)
|
req, _ := iam.New(session.New()).DeleteUserRequest(params)
|
||||||
_ = req.Build()
|
_ = req.Build()
|
||||||
|
|
Loading…
Reference in a new issue