github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/registry/impl_changepassword.go (about)

     1  /*
     2   * Copyright (c) 2020-present unTill Pro, Ltd.
     3   * @author Denis Gribanov
     4   */
     5  
     6  package registry
     7  
     8  import (
     9  	"time"
    10  
    11  	"github.com/voedger/voedger/pkg/istructs"
    12  	"github.com/voedger/voedger/pkg/istructsmem"
    13  )
    14  
    15  func provideChangePassword(cfgRegistry *istructsmem.AppConfigType) {
    16  	cfgRegistry.Resources.Add(istructsmem.NewCommandFunction(
    17  		qNameCmdChangePassword,
    18  		cmdChangePasswordExec,
    19  	))
    20  
    21  	cfgRegistry.FunctionRateLimits.AddAppLimit(qNameCmdChangePassword, istructs.RateLimit{
    22  		Period:                time.Minute,
    23  		MaxAllowedPerDuration: 1,
    24  	})
    25  }
    26  
    27  // sys/registry/pseudoWSID
    28  // null auth
    29  func cmdChangePasswordExec(args istructs.ExecCommandArgs) (err error) {
    30  	appName := args.ArgumentObject.AsString(field_AppName)
    31  	login := args.ArgumentObject.AsString(field_Login)
    32  	oldPwd := args.ArgumentUnloggedObject.AsString(field_OldPassword)
    33  	newPwd := args.ArgumentUnloggedObject.AsString(field_NewPassword)
    34  
    35  	cdocLogin, doesLoginExist, err := GetCDocLogin(login, args.State, args.WSID, appName)
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	if !doesLoginExist {
    41  		return errLoginDoesNotExist(login)
    42  	}
    43  
    44  	isPasswordOK, err := CheckPassword(cdocLogin, oldPwd)
    45  	if err != nil {
    46  		return err
    47  	}
    48  
    49  	if !isPasswordOK {
    50  		return errPasswordIsIncorrect
    51  	}
    52  
    53  	return ChangePasswordCDocLogin(cdocLogin, newPwd, args.Intents, args.State)
    54  }