Files
osmedeus/internal/template/context.go
T
j3ssie f5840272c5 feat: add run cancellation, event enhancements, and performance optimizations
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
2026-01-24 01:11:33 +08:00

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
}