diff --git a/cred/manager.go b/cred/manager.go index d39da668..3e897510 100644 --- a/cred/manager.go +++ b/cred/manager.go @@ -23,6 +23,8 @@ func GetCredManager(passwordType string) CredManager { return NewPlainCredManager() } else if passwordType == "salt" { return NewSha256SaltCredManager() + } else if passwordType == "md5-salt" { + return NewMd5UserSaltCredManager() } return nil diff --git a/cred/md5-user-salt.go b/cred/md5-user-salt.go new file mode 100644 index 00000000..121bb2e4 --- /dev/null +++ b/cred/md5-user-salt.go @@ -0,0 +1,44 @@ +// Copyright 2021 The casbin Authors. All Rights Reserved. +// +// 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 cred + +import ( + "crypto/md5" + "encoding/hex" +) + +type Md5UserSaltCredManager struct{} + +func getMd5(data []byte) []byte { + hash := md5.Sum(data) + return hash[:] +} + +func getMd5HexDigest(s string) string { + b := getMd5([]byte(s)) + res := hex.EncodeToString(b) + return res +} + +func NewMd5UserSaltCredManager() *Sha256SaltCredManager { + cm := &Sha256SaltCredManager{} + return cm +} + +func (cm *Md5UserSaltCredManager) GetSealedPassword(password string, userSalt string, organizationSalt string) string { + hash := getMd5HexDigest(password) + res := getMd5HexDigest(hash + userSalt) + return res +} diff --git a/web/src/OrganizationEditPage.js b/web/src/OrganizationEditPage.js index b22d20ff..2a2e8575 100644 --- a/web/src/OrganizationEditPage.js +++ b/web/src/OrganizationEditPage.js @@ -152,7 +152,7 @@ class OrganizationEditPage extends React.Component {