mirror of
https://github.com/j3ssie/osmedeus.git
synced 2026-08-30 11:49:44 +02:00
Major features: - Add run registry for tracking active runs with PID management - Add API-based run cancellation with process termination - Add event trigger input vars syntax for multi-variable extraction - Add filter_functions with utility function support in triggers - Add event envelope injection for full event context in workflows - Add write coordinator for batched database operations API improvements: - Add logout endpoint and diffs endpoints for assets/vulnerabilities - Add step-results listing endpoint - Update schedule model with target, workspace, params fields - Change run_id to run_uuid across API responses Performance: - Add compiled JS program caching for 60-80% faster loop conditions - Add parallel shard rendering for 20-40% faster workflow startup - Add memory-mapped I/O for large file line counting - Add efficient output buffer combining in runners - Add mtime-based cache invalidation for workflow loader Other changes: - Rename trigger field from trigger to triggers in workflow YAML - Disable pongo2 HTML autoescape for shell command templates - Update JWT expiration default to 1440 minutes (1 day) - Change CORS default to reflect-origin for credentials support - Add source_type field to events (run, eval, api) - Skip copying core Unix tools to external-binaries
98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
package template
|
|
|
|
import (
|
|
"github.com/j3ssie/osmedeus/v5/internal/core"
|
|
)
|
|
|
|
// BuildContext builds a template context from an execution context
|
|
func BuildContext(execCtx *core.ExecutionContext) map[string]interface{} {
|
|
ctx := make(map[string]interface{})
|
|
|
|
// Add built-in constants
|
|
ctx["DefaultUA"] = core.DefaultUA
|
|
ctx["Version"] = core.VERSION
|
|
|
|
// Add all variables from execution context
|
|
for k, v := range execCtx.GetVariables() {
|
|
ctx[k] = v
|
|
}
|
|
|
|
// Add standard variables
|
|
ctx["workflow"] = execCtx.WorkflowName
|
|
ctx["run_uuid"] = execCtx.RunUUID
|
|
ctx["target"] = execCtx.Target
|
|
ctx["workspace"] = execCtx.WorkspacePath
|
|
ctx["base_folder"] = execCtx.BaseFolder
|
|
|
|
return ctx
|
|
}
|
|
|
|
// MergeContext merges multiple contexts, later contexts override earlier ones
|
|
func MergeContext(contexts ...map[string]interface{}) map[string]interface{} {
|
|
result := make(map[string]interface{})
|
|
for _, ctx := range contexts {
|
|
for k, v := range ctx {
|
|
result[k] = v
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
// ContextFromParams builds a context from parameter key-value pairs
|
|
func ContextFromParams(params map[string]string) map[string]interface{} {
|
|
ctx := make(map[string]interface{}, len(params))
|
|
for k, v := range params {
|
|
ctx[k] = v
|
|
}
|
|
return ctx
|
|
}
|
|
|
|
// ContextBuilder provides a fluent interface for building contexts
|
|
type ContextBuilder struct {
|
|
ctx map[string]interface{}
|
|
}
|
|
|
|
// NewContextBuilder creates a new context builder
|
|
func NewContextBuilder() *ContextBuilder {
|
|
return &ContextBuilder{
|
|
ctx: make(map[string]interface{}),
|
|
}
|
|
}
|
|
|
|
// Set sets a value in the context
|
|
func (b *ContextBuilder) Set(key string, value interface{}) *ContextBuilder {
|
|
b.ctx[key] = value
|
|
return b
|
|
}
|
|
|
|
// SetAll sets multiple values from a map
|
|
func (b *ContextBuilder) SetAll(values map[string]interface{}) *ContextBuilder {
|
|
for k, v := range values {
|
|
b.ctx[k] = v
|
|
}
|
|
return b
|
|
}
|
|
|
|
// SetParams sets values from string parameters
|
|
func (b *ContextBuilder) SetParams(params map[string]string) *ContextBuilder {
|
|
for k, v := range params {
|
|
b.ctx[k] = v
|
|
}
|
|
return b
|
|
}
|
|
|
|
// SetFromExecution sets values from an execution context
|
|
func (b *ContextBuilder) SetFromExecution(execCtx *core.ExecutionContext) *ContextBuilder {
|
|
return b.SetAll(BuildContext(execCtx))
|
|
}
|
|
|
|
// Build returns the built context
|
|
func (b *ContextBuilder) Build() map[string]interface{} {
|
|
// Return a copy to prevent modifications
|
|
result := make(map[string]interface{}, len(b.ctx))
|
|
for k, v := range b.ctx {
|
|
result[k] = v
|
|
}
|
|
return result
|
|
}
|