diff --git a/docs/source/samples/json/GEN002.ini b/docs/source/samples/conf/GEN002.ini similarity index 100% rename from docs/source/samples/json/GEN002.ini rename to docs/source/samples/conf/GEN002.ini diff --git a/docs/source/samples/json/GEN003.ini b/docs/source/samples/conf/GEN003.ini similarity index 93% rename from docs/source/samples/json/GEN003.ini rename to docs/source/samples/conf/GEN003.ini index 07de6e7..d28e018 100644 --- a/docs/source/samples/json/GEN003.ini +++ b/docs/source/samples/conf/GEN003.ini @@ -1,5 +1,5 @@ -[MartiLQ] +[martiLQ] tags = sample,docs publisher = meerkat@merebox.com @@ -16,5 +16,5 @@ theme = Documentation author = Hive title = {{documentName}} state = active -expires = 0:0:7 +expires = m:0:0:7 urlPrefix = https://github.com/meerkat-manor/marti/blob/draft_specifications/docs/source/ diff --git a/docs/source/samples/json/GEN005.ini b/docs/source/samples/conf/GEN005.ini similarity index 100% rename from docs/source/samples/json/GEN005.ini rename to docs/source/samples/conf/GEN005.ini diff --git a/docs/source/samples/json/martilq_02.ini b/docs/source/samples/conf/martilq_02.ini similarity index 100% rename from docs/source/samples/json/martilq_02.ini rename to docs/source/samples/conf/martilq_02.ini diff --git a/docs/source/samples/json/sample_bsb.ini b/docs/source/samples/conf/sample_bsb.ini similarity index 100% rename from docs/source/samples/json/sample_bsb.ini rename to docs/source/samples/conf/sample_bsb.ini diff --git a/docs/source/samples/json/sample_docs.ini b/docs/source/samples/conf/sample_docs.ini similarity index 97% rename from docs/source/samples/json/sample_docs.ini rename to docs/source/samples/conf/sample_docs.ini index 1a846c1..645f077 100644 --- a/docs/source/samples/json/sample_docs.ini +++ b/docs/source/samples/conf/sample_docs.ini @@ -24,7 +24,7 @@ theme = Sample author = Meerkat title = {{documentName}} state = expired -expires = m:0:6:0 +expires = m:0:0:7 encoding = UTF-8 version = 1.0 urlPrefix = diff --git a/docs/source/samples/powershell/Invoke-SampleGenerateDocs.ps1 b/docs/source/samples/powershell/Invoke-SampleGenerateDocs.ps1 index f53af02..b7ed332 100644 --- a/docs/source/samples/powershell/Invoke-SampleGenerateDocs.ps1 +++ b/docs/source/samples/powershell/Invoke-SampleGenerateDocs.ps1 @@ -1,11 +1,13 @@ . .\source\powershell\MartiLQ.ps1 +. .\source\powershell\MartiLQConfiguration.ps1 try { $describe = "Generate martiLQ definition for DOCS folder " Write-Host $describe - $oMarti = New-MartiChildItem -SourceFolder "./docs/source" -UrlPath "/docs" -Filter "*.md" -LogPath "./docs/source/samples/powershell/test/Logs" -ExtendAttributes:$true + $x = Import-Configuration -ConfigPath "docs\source\samples\conf\sample_docs.ini" + $oMarti = New-MartiChildItem -SourceFolder "./docs/source" -UrlPath "/docs" -Filter "*.md" -LogPath "./docs/source/samples/powershell/test/Logs" -ExtendAttributes:$true $oMarti.description = $describe $jsonFile = "./docs/source/samples/powershell/test/martilq_docs.json" @@ -13,7 +15,6 @@ try { Set-Content -Path $jsonFile -Value $x Write-Host "martiLQ definition written to '$jsonFile' " - } catch { throw diff --git a/samples.md b/samples.md index 3288a8d..b7b53ba 100644 --- a/samples.md +++ b/samples.md @@ -68,13 +68,13 @@ $env:MARTILQ_PROJECT_PATH=Get-Location Set-Location -Path (Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "source\golang\client\src") -PassThru $mfile = Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "test/golang/results/test_proc_docs.json" -$cfile = Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "docs/source/samples/json/sample_docs.ini" +$cfile = Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "docs/source/samples/conf/sample_docs.ini" $spath = Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "docs/source/" go run . -- -t MAKE -m $mfile -c $cfile -s $spath --title "DOCS Sample" --description "Directory example for DOCS" --filter "w*" --update $mfile = Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "test/golang/results/test_proc_bsb.json" -$cfile = Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "docs/source/samples/json/GEN005.ini" +$cfile = Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "docs/source/samples/conf/GEN005.ini" $spath = Join-Path -Path $env:MARTILQ_PROJECT_PATH -ChildPath "docs/source/samples/python/test/http/" go run . -- -t MAKE -m $mfile -c $cfile -s $spath --title "GEN005" --description "Directory example for BSB" --update diff --git a/source/golang/server/src/main.go b/source/golang/server/src/main.go index 76777b4..8ae3c50 100644 --- a/source/golang/server/src/main.go +++ b/source/golang/server/src/main.go @@ -9,7 +9,7 @@ import ( "io/ioutil" "os" "encoding/json" - + "errors" "html/template" "github.com/russross/blackfriday" @@ -25,9 +25,10 @@ func main() { dataDirectory := flag.String("data", "", "Data directory content") templateDirectory := flag.String("template", "", "Template directory content") trace := flag.Bool("trace", false, "Produce trace logs") + flag.Parse() - if *trace == true { + if *trace { log.Printf("static folder: %s\n", *staticDirectory) log.Printf("data folder: %s\n", *dataDirectory) log.Printf("docs folder: %s\n", *docsDirectory) @@ -39,7 +40,7 @@ func main() { if (*dataDirectory != "") { safePath = filepath.FromSlash(filepath.Join(*dataDirectory, strings.Replace(safePath, "data/", "", 1))) } - if *trace == true { + if *trace { log.Printf("resolved data folder: %s\n", safePath) } http.ServeFile(res, req, safePath) @@ -50,7 +51,7 @@ func main() { if (*templateDirectory != "") { safePath = filepath.FromSlash(filepath.Join(*templateDirectory, strings.Replace(safePath, "template/", "", 1))) } - if *trace == true { + if *trace { log.Printf("resolved template folder: %s\n", safePath) } http.ServeFile(res, req, safePath) @@ -92,34 +93,6 @@ func main() { }) - http.HandleFunc("/docsx/", func( res http.ResponseWriter, req *http.Request ) { - localPath := "" - if (*docsDirectory == "") { - temp := "../../.." - docsDirectory = &temp - localPath = ValidatePath(filepath.FromSlash(*docsDirectory+req.URL.Path)) - } else { - localPath = ValidatePath(filepath.FromSlash(*docsDirectory+strings.Replace(req.URL.Path, "docs/", "", 1))) - } - if *trace == true { - log.Printf("resolved docs folder: \"%s\"", localPath) - } - f, err := os.Open(localPath) - if err != nil { - log.Printf("fetch docs error: \"%s\" with %s", localPath, err) - http.NotFound(res, req) - } else { - s, err := f.Stat() - if err != nil || s.IsDir() { - log.Printf("fetch docs stat error: \"%s\"", localPath) - http.NotFound(res, req) - //http.ServeFile(res, req, filepath.FromSlash(*staticDirectory + "/404.html")) - } else { - http.ServeFile(res, req, localPath) - } - } - }) - http.HandleFunc("/api/", apiHandler) http.HandleFunc("/api/view", apiHandlerView) diff --git a/source/powershell/MartiLQ.ps1 b/source/powershell/MartiLQ.ps1 index b759cc9..5d5ca5b 100644 --- a/source/powershell/MartiLQ.ps1 +++ b/source/powershell/MartiLQ.ps1 @@ -7,6 +7,9 @@ function New-MartiDefinition { + Param( + [String] $ConfigPath = $null + ) $oSoftware = [PSCustomObject]@{ extension = "software" @@ -22,7 +25,12 @@ function New-MartiDefinition } - $oConfig = Get-DefaultConfiguration + if ($null -eq $ConfigPath -or $ConfigPath -eq "") { + $oConfig = Get-Configuration + } else { + $oConfig = Import-Configuration -ConfigPath $ConfigPath + } + if ( $nulll -eq $oConfig.publisher -or $oConfig.publisher -eq "") { $publisher = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name } else { @@ -54,8 +62,8 @@ function New-MartiDefinition license = $oConfig.license state = $oConfig.state batch = $oConfig.batch - describedBy = "" - landingPage = "" + describedBy = $oConfig.describedBy + landingPage = $oConfig.landingPage theme =$oConfig.theme resources = $lresource diff --git a/source/powershell/MartiLQConfiguration.ps1 b/source/powershell/MartiLQConfiguration.ps1 index 353d04c..a3e7848 100644 --- a/source/powershell/MartiLQConfiguration.ps1 +++ b/source/powershell/MartiLQConfiguration.ps1 @@ -4,6 +4,16 @@ $script:SoftwareVersion = "0.0.1" $global:default_metaFile = "##martilq##.json" +$global:martiLQ_configuration = $null + +function Get-Configuration { + + if ($null -eq $global:martiLQ_configuration) { + return Get-DefaultConfiguration + } else { + return $global:martiLQ_configuration + } +} function Get-DefaultConfiguration { @@ -57,6 +67,125 @@ function Get-DefaultConfiguration { return $oConfiguration } -function Get-Title { +function Import-Configuration { + Param( + [String] $ConfigPath = $null + ) + + $oConfig = Get-DefaultConfiguration + $iConfig = $null + + if ($null -eq $ConfigPath -or $ConfigPath -eq "") { + + if (Test-Path "martilq.ini") { + $ConfigPath = "martilq.ini" + } else { + $homeDir = $env:USERPROFILE + if (Test-Path (Join-Path -Path $homeDir -ChildPath ".martilq/martilq.ini")) { + $ConfigPath = Join-Path -Path $homeDir -ChildPath ".martilq/martilq.ini" + } + } + if ($null -ne $ConfigPath -and $ConfigPath -ne "") { + Write-Log -LogEntry "Using configuration path '$ConfigPath'" + $iConfig = Get-IniFile -Path $ConfigPath + } else { + Write-Log -LogEntry "Using default configuration settings" + } + } else { + if (Test-Path $ConfigPath) { + Write-Log -LogEntry "Using configuration path '$ConfigPath'" + $iConfig = Get-IniFile -Path $ConfigPath + } else { + Write-Log -LogEntry "Could not find configuration path '$ConfigPath' so using default configuration" + } + } + + # Now do mapping of values + if ($null -ne $iConfig) { + + if ($null -ne $iConfig.General) { + + $oConfig.logPath = Set-ConfigurationValue $oConfig.logPath -Value $iConfig.General.logPath + $oConfig.dateFormat = Set-ConfigurationValue $oConfig.dateFormat -Value $iConfig.General.dateFormat + $oConfig.dateTimeFormat = Set-ConfigurationValue $oConfig.dateTimeFormat -Value $iConfig.General.dateTimeFormat + $oConfig.dataPath = Set-ConfigurationValue $oConfig.dataPath -Value $iConfig.General.dataPath + $oConfig.tempPath = Set-ConfigurationValue $oConfig.tempPath -Value $iConfig.General.tempPath + + } + + if ($null -ne $iConfig.martiLQ) { + if ($null -ne $iConfig.martiLQ.tags -and $iConfig.martiLQ.tags -ne "" -and $iConfig.martiLQ.tags.Length -gt 0 ) { + $oConfig.tags = $iConfig.martiLQ.tags.Split(",") + } + + $oConfig.publisher = Set-ConfigurationValue $oConfig.publisher -Value $iConfig.martiLQ.publisher + $oConfig.contactPoint = Set-ConfigurationValue $oConfig.contactPoint -Value $iConfig.martiLQ.contactPoint + $oConfig.accessLevel = Set-ConfigurationValue $oConfig.accessLevel -Value $iConfig.martiLQ.accessLevel + $oConfig.rights = Set-ConfigurationValue $oConfig.rights -Value $iConfig.martiLQ.rights + $oConfig.license = Set-ConfigurationValue $oConfig.license -Value $iConfig.martiLQ.license + $oConfig.batch = Set-ConfigurationValue $oConfig.batch -Value $iConfig.martiLQ.batch + $oConfig.theme = Set-ConfigurationValue $oConfig.theme -Value $iConfig.martiLQ.theme + + } + + if ($null -ne $iConfig.Resources) { + $oConfig.author = Set-ConfigurationValue $oConfig.author -Value $iConfig.Resources.author + $oConfig.title = Set-ConfigurationValue $oConfig.title -Value $iConfig.Resources.title + $oConfig.state = Set-ConfigurationValue $oConfig.state -Value $iConfig.Resources.state + $oConfig.expires = Set-ConfigurationValue $oConfig.expires -Value $iConfig.Resources.expires + $oConfig.urlPrefix = Set-ConfigurationValue $oConfig.urlPrefix -Value $iConfig.Resources.urlPrefix + + $oConfig.compression = Set-ConfigurationValue $oConfig.compression -Value $iConfig.Resources.compression + $oConfig.encryption = Set-ConfigurationValue $oConfig.encryption -Value $iConfig.Resources.encryption + $oConfig.describedBy = Set-ConfigurationValue $oConfig.describedBy -Value $iConfig.Resources.describedBy + $oConfig.landingPage = Set-ConfigurationValue $oConfig.landingPage -Value $iConfig.Resources.landingPage + + } + + + if ($null -ne $iConfig.Hash) { + $oConfig.hashAlgorithm = Set-ConfigurationValue $oConfig.hashAlgorithm -Value $iConfig.Hash.hashAlgorithm + } + + } + + $global:martiLQ_configuration = $oConfig + return $oConfig +} + +Function Set-ConfigurationValue { + Param( + [Parameter(Mandatory=$true)][AllowEmptyString()][String]$OriginalValue, + [Parameter(Mandatory=$true)][AllowEmptyString()][String]$Value + ) + + if ($null -ne $Value -and $Value -ne "") { + return $Value + } else { + return $OriginalValue + } } + +Function Get-IniFile { +Param( + [Parameter(mandatory=$true)][string]$Path +) + + $oIni = @{} + + Get-Content $Path | ForEach-Object { + $_.Trim() } | Where-Object { + $_ -notmatch '^(;|$)' + } | ForEach-Object { + if ($_ -match '^\[.*\]$') { + $section = $_ -replace '\[|\]' + $oIni[$section] = @{} + } else { + $key, $value = $_ -split '\s*=\s*', 2 + $oIni[$section][$key] = $value + } + } + + return $oIni +} \ No newline at end of file diff --git a/source/powershell/MartiLQResource.ps1 b/source/powershell/MartiLQResource.ps1 index 03ee3b2..c3e4c45 100644 --- a/source/powershell/MartiLQResource.ps1 +++ b/source/powershell/MartiLQResource.ps1 @@ -63,7 +63,7 @@ Param( Write-Log "" if ($null -eq $Configuration) { - $Configuration = Get-DefaultConfiguration + $Configuration = Get-Configuration } if (Test-Path -Path $SourcePath -PathType Leaf) { @@ -172,6 +172,7 @@ Param( [switch] $Recurse, [switch] $ExtendAttributes, [switch] $ExcludeHash, + [String] $ConfigPath, [String] $LogPath ) @@ -187,7 +188,16 @@ Param( Write-Log "Parameter: ExcludeHash Value: $ExcludeHash " Write-Log "" - $oMarti, $oConfig = New-MartiDefinition + $oMarti, $oConfig = New-MartiDefinition -ConfigPath $ConfigPath + if ($null -ne $LogPath -and $LogPath -ne "") { + $oConfig.logPath = $LogPath + } + if ($null -ne $urlPath -and $urlPath -ne "") { + $oConfig.urlPrefix = $urlPath + } else { + $urlPath = $oConfig.urlPrefix + } + $lresource = $oMarti.resources $SourceFullName = (Get-Item -Path $SourceFolder).FullName @@ -700,8 +710,9 @@ function Compare-MartiResource { function Set-DefaultExpiryDate{ Param( + [Parameter(Mandatory)][PSCustomObject] $Configuration, [Parameter(Mandatory)][Datetime] $DocumentDate, - [Parameter(Mandatory)][PSCustomObject] $Configuration + [Parameter][Datetime] $RunDate ) @@ -709,13 +720,21 @@ function Set-DefaultExpiryDate{ $expires = $DocumentDate.AddYears(10) } else { $factors = $oConfig.expires.Split(":") - if ($factors[0] -ne "m") { - $expires = $DocumentDate.AddYears(10) - } else { - $expires = $DocumentDate.AddYears($factors[1]) - $expires = $expires.AddMonths($factors[2]) - $expires = $expires.AddDays($factors[3]) + if ($factors[0] -eq "m") { + $expires = $DocumentDate + } elseif ($factors[0] -eq "r") { + if ($null -eq $RunDate) { + $expires = Get-Date + } else { + $expires = $RunDate + } + } + else { + $expires = Get-Date } + $expires = $expires.AddYears($factors[1]) + $expires = $expires.AddMonths($factors[2]) + $expires = $expires.AddDays($factors[3]) } return $expires diff --git a/test/python/test_MartiLQ1.py b/test/python/test_MartiLQ1.py index 35a8702..aaf2608 100644 --- a/test/python/test_MartiLQ1.py +++ b/test/python/test_MartiLQ1.py @@ -38,7 +38,7 @@ print("Definition description is: {}".format(oMarti["description"])) mlq.CloseLog() -configPath = "./docs/source/samples/json/GEN005.ini" +configPath = "./docs/source/samples/conf/GEN005.ini" sourcePath = "./docs/source/*" saveFile = "./test/python/results/test_proc_docs.json" ProcessFilePath(ConfigPath=configPath, SourcePath=sourcePath, Filter="", Recursive=True, UrlPrefix="https://localhost/", DefinitionPath=saveFile)