diff --git a/internal/api/firewall/destination_nat_rules.go b/internal/api/firewall/destination_nat_rules.go index 95a25f1..ab927b0 100644 --- a/internal/api/firewall/destination_nat_rules.go +++ b/internal/api/firewall/destination_nat_rules.go @@ -2,12 +2,13 @@ package firewall import ( "context" + "fmt" "nfsense.net/nfsense/internal/definitions" ) type GetDestinationNATRulesResult struct { - DestinationNATRules []definitions.DestinationNATRule + DestinationNATRules []definitions.DestinationNATRule `json:"destination_nat_rules"` } func (f *Firewall) GetDestinationNATRules(ctx context.Context, params struct{}) (GetDestinationNATRulesResult, error) { @@ -15,3 +16,65 @@ func (f *Firewall) GetDestinationNATRules(ctx context.Context, params struct{}) DestinationNATRules: f.ConfigManager.GetPendingConfig().Firewall.DestinationNATRules, }, nil } + +type CreateDestinationNATRuleParameters struct { + DestinationNATRule definitions.DestinationNATRule `json:"destination_nat_rule"` +} + +func (f *Firewall) CreateDestinationNATRule(ctx context.Context, params CreateDestinationNATRuleParameters) (struct{}, error) { + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.DestinationNATRules = append(conf.Firewall.DestinationNATRules, params.DestinationNATRule) + return struct{}{}, t.Commit() +} + +type UpdateDestinationNATRuleParameters struct { + Index uint64 `json:"index"` + DestinationNATRule definitions.DestinationNATRule `json:"destination_nat_rule"` +} + +func (f *Firewall) UpdateDestinationNATRule(ctx context.Context, params UpdateDestinationNATRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.DestinationNATRules) { + return struct{}{}, fmt.Errorf("DestinationNATRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.DestinationNATRules[params.Index] = params.DestinationNATRule + return struct{}{}, t.Commit() +} + +type MoveDestinationNATRuleParameters struct { + Index uint64 `json:"index"` + ToIndex uint64 `json:"to_index"` +} + +func (f *Firewall) MoveDestinationNATRule(ctx context.Context, params DeleteDestinationNATRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.DestinationNATRules) { + return struct{}{}, fmt.Errorf("DestinationNATRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.DestinationNATRules = append(conf.Firewall.DestinationNATRules[:params.Index], conf.Firewall.DestinationNATRules[params.Index+1:]...) + return struct{}{}, t.Commit() +} + +type DeleteDestinationNATRuleParameters struct { + Index uint64 `json:"index"` +} + +func (f *Firewall) DeleteDestinationNATRule(ctx context.Context, params DeleteDestinationNATRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.DestinationNATRules) { + return struct{}{}, fmt.Errorf("DestinationNATRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.DestinationNATRules = append(conf.Firewall.DestinationNATRules[:params.Index], conf.Firewall.DestinationNATRules[params.Index+1:]...) + return struct{}{}, t.Commit() +} diff --git a/internal/api/firewall/forward_rules.go b/internal/api/firewall/forward_rules.go index 4323f3b..f03b894 100644 --- a/internal/api/firewall/forward_rules.go +++ b/internal/api/firewall/forward_rules.go @@ -2,12 +2,13 @@ package firewall import ( "context" + "fmt" "nfsense.net/nfsense/internal/definitions" ) type GetForwardRulesResult struct { - ForwardRules []definitions.ForwardRule + ForwardRules []definitions.ForwardRule `json:"forward_rules"` } func (f *Firewall) GetForwardRules(ctx context.Context, params struct{}) (GetForwardRulesResult, error) { @@ -15,3 +16,65 @@ func (f *Firewall) GetForwardRules(ctx context.Context, params struct{}) (GetFor ForwardRules: f.ConfigManager.GetPendingConfig().Firewall.ForwardRules, }, nil } + +type CreateForwardRuleParameters struct { + ForwardRule definitions.ForwardRule `json:"forward_rule"` +} + +func (f *Firewall) CreateForwardRule(ctx context.Context, params CreateForwardRuleParameters) (struct{}, error) { + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.ForwardRules = append(conf.Firewall.ForwardRules, params.ForwardRule) + return struct{}{}, t.Commit() +} + +type UpdateForwardRuleParameters struct { + Index uint64 `json:"index"` + ForwardRule definitions.ForwardRule `json:"forward_rule"` +} + +func (f *Firewall) UpdateForwardRule(ctx context.Context, params UpdateForwardRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.ForwardRules) { + return struct{}{}, fmt.Errorf("ForwardRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.ForwardRules[params.Index] = params.ForwardRule + return struct{}{}, t.Commit() +} + +type MoveForwardRuleParameters struct { + Index uint64 `json:"index"` + ToIndex uint64 `json:"to_index"` +} + +func (f *Firewall) MoveForwardRule(ctx context.Context, params DeleteForwardRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.ForwardRules) { + return struct{}{}, fmt.Errorf("ForwardRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.ForwardRules = append(conf.Firewall.ForwardRules[:params.Index], conf.Firewall.ForwardRules[params.Index+1:]...) + return struct{}{}, t.Commit() +} + +type DeleteForwardRuleParameters struct { + Index uint64 `json:"index"` +} + +func (f *Firewall) DeleteForwardRule(ctx context.Context, params DeleteForwardRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.ForwardRules) { + return struct{}{}, fmt.Errorf("ForwardRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.ForwardRules = append(conf.Firewall.ForwardRules[:params.Index], conf.Firewall.ForwardRules[params.Index+1:]...) + return struct{}{}, t.Commit() +} diff --git a/internal/api/firewall/source_nat_rules.go b/internal/api/firewall/source_nat_rules.go index 6f36ed4..56331d2 100644 --- a/internal/api/firewall/source_nat_rules.go +++ b/internal/api/firewall/source_nat_rules.go @@ -2,12 +2,13 @@ package firewall import ( "context" + "fmt" "nfsense.net/nfsense/internal/definitions" ) type GetSourceNATRulesResult struct { - SourceNATRules []definitions.SourceNATRule + SourceNATRules []definitions.SourceNATRule `json:"source_nat_rules"` } func (f *Firewall) GetSourceNATRules(ctx context.Context, params struct{}) (GetSourceNATRulesResult, error) { @@ -15,3 +16,65 @@ func (f *Firewall) GetSourceNATRules(ctx context.Context, params struct{}) (GetS SourceNATRules: f.ConfigManager.GetPendingConfig().Firewall.SourceNATRules, }, nil } + +type CreateSourceNATRuleParameters struct { + SourceNATRule definitions.SourceNATRule `json:"source_nat_rule"` +} + +func (f *Firewall) CreateSourceNATRule(ctx context.Context, params CreateSourceNATRuleParameters) (struct{}, error) { + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.SourceNATRules = append(conf.Firewall.SourceNATRules, params.SourceNATRule) + return struct{}{}, t.Commit() +} + +type UpdateSourceNATRuleParameters struct { + Index uint64 `json:"index"` + SourceNATRule definitions.SourceNATRule `json:"source_nat_rule"` +} + +func (f *Firewall) UpdateSourceNATRule(ctx context.Context, params UpdateSourceNATRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.SourceNATRules) { + return struct{}{}, fmt.Errorf("SourceNATRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.SourceNATRules[params.Index] = params.SourceNATRule + return struct{}{}, t.Commit() +} + +type MoveSourceNATRuleParameters struct { + Index uint64 `json:"index"` + ToIndex uint64 `json:"to_index"` +} + +func (f *Firewall) MoveSourceNATRule(ctx context.Context, params DeleteSourceNATRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.SourceNATRules) { + return struct{}{}, fmt.Errorf("SourceNATRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.SourceNATRules = append(conf.Firewall.SourceNATRules[:params.Index], conf.Firewall.SourceNATRules[params.Index+1:]...) + return struct{}{}, t.Commit() +} + +type DeleteSourceNATRuleParameters struct { + Index uint64 `json:"index"` +} + +func (f *Firewall) DeleteSourceNATRule(ctx context.Context, params DeleteSourceNATRuleParameters) (struct{}, error) { + if int(params.Index) >= len(f.ConfigManager.GetPendingConfig().Firewall.SourceNATRules) { + return struct{}{}, fmt.Errorf("SourceNATRule does not Exist") + } + + t, conf := f.ConfigManager.StartTransaction() + defer t.Discard() + + conf.Firewall.SourceNATRules = append(conf.Firewall.SourceNATRules[:params.Index], conf.Firewall.SourceNATRules[params.Index+1:]...) + return struct{}{}, t.Commit() +}