mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 10:06:24 +05:00
SessionSv1.ProcessEvent with *resourceAuthorize support
This commit is contained in:
@@ -84,6 +84,8 @@ type SessionsOpts struct {
|
|||||||
ResourcesAllocate []*DynamicBoolOpt
|
ResourcesAllocate []*DynamicBoolOpt
|
||||||
ResourcesRelease []*DynamicBoolOpt
|
ResourcesRelease []*DynamicBoolOpt
|
||||||
ResourcesDerivedReply []*DynamicBoolOpt
|
ResourcesDerivedReply []*DynamicBoolOpt
|
||||||
|
ResourcesUsageID []*DynamicStringOpt
|
||||||
|
ResourcesUnits []*DynamicIntOpt
|
||||||
IPsAuthorize []*DynamicBoolOpt
|
IPsAuthorize []*DynamicBoolOpt
|
||||||
IPsAllocate []*DynamicBoolOpt
|
IPsAllocate []*DynamicBoolOpt
|
||||||
IPsRelease []*DynamicBoolOpt
|
IPsRelease []*DynamicBoolOpt
|
||||||
|
|||||||
@@ -867,23 +867,29 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//var partiallyExecuted bool // will be added to the final answer if true
|
||||||
|
if blkrErr, errBlkr := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(),
|
||||||
|
cch, sS.fltrS, sS.cfg.SessionSCfg().Opts.Authorize,
|
||||||
|
utils.OptsSesBlockerError, utils.MetaBlockerErrorCfg); errBlkr != nil {
|
||||||
|
return errBlkr
|
||||||
|
} else {
|
||||||
|
cch[utils.OptsSesBlockerError] = blkrErr
|
||||||
|
}
|
||||||
|
|
||||||
// same processing for each event
|
// same processing for each event
|
||||||
for runID, cgrEv := range cgrEvs {
|
for runID, cgrEv := range cgrEvs {
|
||||||
cchEv := make(map[string]any)
|
cchEv := make(map[string]any)
|
||||||
//var partiallyExecuted bool // will be added to the final answer if true
|
|
||||||
if blkrErr, errBlkr := engine.GetBoolOpts(ctx, cgrEv.Tenant, cgrEv.AsDataProvider(),
|
|
||||||
cchEv, sS.fltrS, sS.cfg.SessionSCfg().Opts.Authorize,
|
|
||||||
utils.OptsSesBlockerError, utils.MetaBlockerErrorCfg); errBlkr != nil {
|
|
||||||
return errBlkr
|
|
||||||
} else {
|
|
||||||
cchEv[utils.OptsSesBlockerError] = blkrErr
|
|
||||||
}
|
|
||||||
|
|
||||||
// IPs Enabled
|
// IPs Enabled
|
||||||
if ipS, errIPs := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
|
if ipS, errIPs := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
|
||||||
sS.fltrS, sS.cfg.SessionSCfg().Opts.IPs,
|
sS.fltrS, sS.cfg.SessionSCfg().Opts.IPs,
|
||||||
utils.MetaIPs); errIPs != nil {
|
utils.MetaIPs); errIPs != nil {
|
||||||
return errIPs
|
if cch[utils.OptsSesBlockerError].(bool) {
|
||||||
|
return errIPs
|
||||||
|
}
|
||||||
|
utils.Logger.Warning(
|
||||||
|
fmt.Sprintf("<%s> error: %s authorizing event: %+v with %s",
|
||||||
|
utils.SessionS, err.Error(), cgrEv, utils.IPs))
|
||||||
} else {
|
} else {
|
||||||
cchEv[utils.MetaIPs] = ipS
|
cchEv[utils.MetaIPs] = ipS
|
||||||
}
|
}
|
||||||
@@ -891,12 +897,21 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
|
|||||||
// AccountS Enabled
|
// AccountS Enabled
|
||||||
if acntS, errAcnts := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
|
if acntS, errAcnts := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
|
||||||
sS.fltrS, sS.cfg.SessionSCfg().Opts.Accounts,
|
sS.fltrS, sS.cfg.SessionSCfg().Opts.Accounts,
|
||||||
utils.MetaIPs); errAcnts != nil {
|
utils.MetaAccounts); errAcnts != nil {
|
||||||
return errAcnts
|
return errAcnts
|
||||||
} else {
|
} else {
|
||||||
cchEv[utils.MetaAccounts] = acntS
|
cchEv[utils.MetaAccounts] = acntS
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ResourceS Enabled
|
||||||
|
if rscS, errRscS := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
|
||||||
|
sS.fltrS, sS.cfg.SessionSCfg().Opts.Resources,
|
||||||
|
utils.MetaResources); errRscS != nil {
|
||||||
|
return errRscS
|
||||||
|
} else {
|
||||||
|
cchEv[utils.MetaResources] = rscS
|
||||||
|
}
|
||||||
|
|
||||||
// Auth the events
|
// Auth the events
|
||||||
if auth, errAuth := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(),
|
if auth, errAuth := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(),
|
||||||
cchEv, sS.fltrS, sS.cfg.SessionSCfg().Opts.IPsAuthorize,
|
cchEv, sS.fltrS, sS.cfg.SessionSCfg().Opts.IPsAuthorize,
|
||||||
@@ -926,6 +941,23 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
|
|||||||
apiRply.IPsAllocation[runID] = authIP
|
apiRply.IPsAllocation[runID] = authIP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ResourceS Authorization
|
||||||
|
if resAuthBool, errBool := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
|
||||||
|
sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesAuthorize,
|
||||||
|
utils.MetaResourcesAuthorizeCfg); errBool != nil {
|
||||||
|
return errBool
|
||||||
|
} else {
|
||||||
|
cchEv[utils.MetaResourcesAuthorizeCfg] = resAuthBool
|
||||||
|
}
|
||||||
|
if cchEv[utils.MetaResourcesAuthorizeCfg].(bool) ||
|
||||||
|
(cchEv[utils.MetaAuthorize].(bool) && cchEv[utils.MetaResources].(bool)) {
|
||||||
|
var resID string
|
||||||
|
if resID, err = sS.resourcesAuthorize(ctx, cgrEv); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
apiRply.ResourceAllocation[runID] = resID
|
||||||
|
}
|
||||||
|
|
||||||
// AccountS Authorization
|
// AccountS Authorization
|
||||||
if acntsAuthBool, errBool := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
|
if acntsAuthBool, errBool := engine.GetBoolOpts(ctx, apiArgs.Tenant, apiArgs.AsDataProvider(), cchEv,
|
||||||
sS.fltrS, sS.cfg.SessionSCfg().Opts.AccountsAuthorize,
|
sS.fltrS, sS.cfg.SessionSCfg().Opts.AccountsAuthorize,
|
||||||
@@ -943,6 +975,7 @@ func (sS *SessionS) BiRPCv1ProcessEvent(ctx *context.Context,
|
|||||||
maxDur, _ := acntCost.Abstracts.Duration()
|
maxDur, _ := acntCost.Abstracts.Duration()
|
||||||
apiRply.AccountSUsage[runID] = maxDur
|
apiRply.AccountSUsage[runID] = maxDur
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -956,8 +956,7 @@ func (sS *SessionS) processChargerS(ctx *context.Context, cgrEv *utils.CGREvent)
|
|||||||
// ipsAuthorize will authorize the event with the IPs subsystem
|
// ipsAuthorize will authorize the event with the IPs subsystem
|
||||||
func (sS *SessionS) ipsAuthorize(ctx *context.Context, cgrEv *utils.CGREvent) (rply *utils.AllocatedIP, err error) {
|
func (sS *SessionS) ipsAuthorize(ctx *context.Context, cgrEv *utils.CGREvent) (rply *utils.AllocatedIP, err error) {
|
||||||
if len(sS.cfg.SessionSCfg().IPsConns) == 0 {
|
if len(sS.cfg.SessionSCfg().IPsConns) == 0 {
|
||||||
err = errors.New("IPs is disabled")
|
return nil, utils.NewErrNotConnected(utils.IPs)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
var alcIP utils.AllocatedIP
|
var alcIP utils.AllocatedIP
|
||||||
if err = sS.connMgr.Call(ctx, sS.cfg.SessionSCfg().IPsConns,
|
if err = sS.connMgr.Call(ctx, sS.cfg.SessionSCfg().IPsConns,
|
||||||
@@ -970,6 +969,33 @@ func (sS *SessionS) ipsAuthorize(ctx *context.Context, cgrEv *utils.CGREvent) (r
|
|||||||
return &alcIP, nil
|
return &alcIP, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ipsAuthorize will authorize the event with the IPs subsystem
|
||||||
|
func (sS *SessionS) resourcesAuthorize(ctx *context.Context, cgrEv *utils.CGREvent) (resID string, err error) {
|
||||||
|
if len(sS.cfg.SessionSCfg().ResourceSConns) == 0 {
|
||||||
|
return utils.EmptyString, utils.NewErrNotConnected(utils.ResourceS)
|
||||||
|
}
|
||||||
|
var resUsageID string
|
||||||
|
if resUsageID, err = engine.GetStringOpts(ctx, cgrEv.Tenant, cgrEv.AsDataProvider(),
|
||||||
|
nil, sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesUsageID,
|
||||||
|
utils.OptsResourcesUsageID); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cgrEv.APIOpts[utils.OptsResourcesUsageID] = resUsageID
|
||||||
|
var resUnits int
|
||||||
|
if resUnits, err = engine.GetIntOpts(ctx, cgrEv.Tenant, cgrEv.AsDataProvider(),
|
||||||
|
nil, sS.fltrS, sS.cfg.SessionSCfg().Opts.ResourcesUnits,
|
||||||
|
utils.OptsResourcesUnits); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cgrEv.APIOpts[utils.OptsResourcesUnits] = resUnits
|
||||||
|
var resMessage string
|
||||||
|
if err = sS.connMgr.Call(ctx, sS.cfg.SessionSCfg().ResourceSConns,
|
||||||
|
utils.ResourceSv1AuthorizeResources,
|
||||||
|
cgrEv, &resMessage); err != nil {
|
||||||
|
}
|
||||||
|
return resMessage, nil
|
||||||
|
}
|
||||||
|
|
||||||
// accountsMaxAbstracts will query the AccountS cost for Event
|
// accountsMaxAbstracts will query the AccountS cost for Event
|
||||||
func (sS *SessionS) accountsMaxAbstracts(ctx *context.Context, cgrEv *utils.CGREvent) (rply *utils.EventCharges, err error) {
|
func (sS *SessionS) accountsMaxAbstracts(ctx *context.Context, cgrEv *utils.CGREvent) (rply *utils.EventCharges, err error) {
|
||||||
if len(sS.cfg.SessionSCfg().AccountSConns) == 0 {
|
if len(sS.cfg.SessionSCfg().AccountSConns) == 0 {
|
||||||
|
|||||||
@@ -2477,6 +2477,7 @@ const (
|
|||||||
MetaResourcesAllocateCfg = "*resourcesAllocate"
|
MetaResourcesAllocateCfg = "*resourcesAllocate"
|
||||||
MetaResourcesReleaseCfg = "*resourcesRelease"
|
MetaResourcesReleaseCfg = "*resourcesRelease"
|
||||||
MetaResourcesDerivedReplyCfg = "*resourcesDerivedReply"
|
MetaResourcesDerivedReplyCfg = "*resourcesDerivedReply"
|
||||||
|
MetaResourcesUsageID = "*resourcesUsageID"
|
||||||
MetaIPsAuthorizeCfg = "*ipsAuthorize"
|
MetaIPsAuthorizeCfg = "*ipsAuthorize"
|
||||||
MetaAccountsAuthorizeCfg = "*accountsAuthorize"
|
MetaAccountsAuthorizeCfg = "*accountsAuthorize"
|
||||||
MetaIPsAllocateCfg = "*ipsAllocate"
|
MetaIPsAllocateCfg = "*ipsAllocate"
|
||||||
@@ -2744,9 +2745,9 @@ const (
|
|||||||
OptsRatesIntervalStart = "*rtsIntervalStart"
|
OptsRatesIntervalStart = "*rtsIntervalStart"
|
||||||
|
|
||||||
// Resources
|
// Resources
|
||||||
OptsResourcesUnits = "*rsUnits"
|
OptsResourcesUnits = "*resUnits"
|
||||||
OptsResourcesUsageID = "*rsUsageID"
|
OptsResourcesUsageID = "*resUsageID"
|
||||||
OptsResourcesUsageTTL = "*rsUsageTTL"
|
OptsResourcesUsageTTL = "*resUsageTTL"
|
||||||
|
|
||||||
// IPs
|
// IPs
|
||||||
OptsIPsAllocationID = "*ipAllocationID"
|
OptsIPsAllocationID = "*ipAllocationID"
|
||||||
|
|||||||
Reference in New Issue
Block a user