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 }