Updated all dependencies one by one to go.mod - Backup and remove the vendor folder entirely and update most of the examples - next commit will contain the rest of the updated

Former-commit-id: 2791c50256c0f00d6e08a408e5cb009262c49588
This commit is contained in:
Gerasimos (Makis) Maropoulos 2019-07-15 07:49:04 +03:00
parent 86a18ff545
commit 137c41344d
27 changed files with 74 additions and 2156 deletions

View File

@ -10,7 +10,7 @@ go_import_path: github.com/kataras/iris
# global:
# - GOCACHE=off
install:
- go get ./... # for iris-contrib/httpexpect, kataras/golog
- go get ./...
script:
- go test -v -cover ./...
after_script:

View File

@ -912,7 +912,7 @@ func main() {
### Testing
Iris offers an incredible support for the [httpexpect](https://github.com/iris-contrib/httpexpect), a Testing Framework for web applications. However, you are able to use the standard Go's `net/http/httptest` package as well but in this example we will use the `kataras/iris/httptest`.
Iris offers an incredible support for the [httpexpect](https://github.com/gavv/httpexpect), a Testing Framework for web applications. However, you are able to use the standard Go's `net/http/httptest` package as well but in this example we will use the `kataras/iris/httptest`.
```go
package main

View File

@ -1,253 +0,0 @@
package main
import (
"bufio"
"os"
"os/exec"
"path/filepath"
"runtime"
"github.com/kataras/golog"
)
var debug = false
var logger = golog.Default
func init() {
if len(os.Args) > 1 && os.Args[1] == "debug" {
debug = true
}
if debug {
logger.SetLevel("debug")
}
}
var bundles = []bundle{
{
names: []string{"dotnet"},
installDir: "./platforms/dotnet",
installArguments: []string{"-NoPath", "-InstallDir", "$installDir", "-Channel", "Current", "-Version", "3.0.100-preview6-012264"},
},
{
names: []string{"node", "npm"},
installDir: "./platforms/node", // do no change that.
installArguments: []string{"$installDir", "12.4.0"},
},
{
names: []string{"git"},
installDir: "./platforms/git",
installArguments: []string{"-InstallDir", "$installDir"},
},
{
names: []string{"go"}, // get-only, at least for now.
installDir: "./platforms/go",
installArguments: []string{"-InstallDir", "$installDir"},
},
{
names: []string{"bombardier"},
installDir: "./platforms/bombardier",
},
}
func install(b bundle) error {
for _, name := range b.names {
switch name {
case "dotnet":
return installDotnet(b)
case "node", "nodejs", "npm":
return installNode(b)
case "git":
return installGit(b)
case "bombardier":
return installBombardier(b)
}
}
return nil
}
type bundle struct {
names []string
installDir string
installArguments []string
}
func (b bundle) parseArguments() []string {
for i, arg := range b.installArguments {
if arg[0] == '$' {
// let's not use reflection here.
switch arg[1:] {
case "name":
b.installArguments[i] = b.names[0]
case "installDir":
if runtime.GOOS == "windows" {
b.installDir = filepath.FromSlash(b.installDir)
}
b.installArguments[i] = b.installDir
default:
panic(arg + " not a bundle struct field")
}
}
}
return b.installArguments
}
type platform struct {
executable string
}
func (p *platform) text(args ...string) string {
cmd := exec.Command(p.executable, args...)
b, err := cmd.CombinedOutput()
if err != nil {
logger.Error(err)
return ""
}
return string(b)
}
func (p *platform) exec(args ...string) error {
cmd := exec.Command(p.executable, args...)
return cmd.Run()
}
func (p *platform) attach(logLevel string, args ...string) error {
cmd := exec.Command(p.executable, args...)
attachCmd(logLevel, cmd)
return cmd.Run()
}
func attachCmd(logLevel string, cmd *exec.Cmd) *exec.Cmd {
level := golog.ParseLevel(logLevel)
outputReader, err := cmd.StdoutPipe()
if err == nil {
outputScanner := bufio.NewScanner(outputReader)
go func() {
defer outputReader.Close()
for outputScanner.Scan() {
logger.Log(level, outputScanner.Text())
}
}()
errReader, err := cmd.StderrPipe()
if err == nil {
errScanner := bufio.NewScanner(errReader)
go func() {
defer errReader.Close()
for errScanner.Scan() {
logger.Log(level, errScanner.Text()) // don't print at error.
}
}()
}
}
return cmd
}
func resolveFilename(name string) string {
if runtime.GOOS == "windows" {
name += ".exe"
}
return name
}
func getPlatform(name string) (p *platform) {
for _, b := range bundles {
for _, bName := range b.names {
if bName == name {
// temporarily set the path env to the installation directories
// in order the exec.LookPath to check for programs there too.
pathEnv := os.Getenv("PATH")
if len(pathEnv) > 1 {
if pathEnv[len(pathEnv)-1] != ';' {
pathEnv += ";"
}
}
pathEnv += b.installDir + "/bin;"
pathEnv += b.installDir
os.Setenv("PATH", pathEnv)
executable, err := exec.LookPath(name)
if err != nil {
logger.Infof("%s executable couldn't be retrieved by PATH or PATHTEXT. Installation started...", name)
err = install(b)
if err != nil {
logger.Fatalf("unable to auto-install %s, please do it yourself: %v", name, err)
}
name = resolveFilename(name)
// first check for installDir/bin/+name before the installDir/+name to
// find the installed executable (we could return it from our scripts but we don't).
binExecutable := b.installDir + "/bin/" + name
if _, err = os.Stat(binExecutable); err == nil {
executable = binExecutable
} else {
executable = b.installDir + "/" + name
}
}
return &platform{
executable: executable,
}
}
}
}
logger.Fatalf("%s not found", name)
return nil
}
func main() {
dotnet := getPlatform("dotnet")
dotnetVersion := dotnet.text("--version")
logger.Info("Dotnet version: ", dotnetVersion)
node := getPlatform("node")
nodeVersion := node.text("--version")
logger.Info("Nodejs version: ", nodeVersion)
npm := getPlatform("npm")
npmVersion := npm.text("--version")
logger.Info("NPM version: ", npmVersion)
git := getPlatform("git")
gitVersion := git.text("--version")
logger.Info("Git version: ", gitVersion)
golang := getPlatform("go")
goVersion := golang.text("version")
logger.Info("Go version: ", goVersion)
bombardier := getPlatform("bombardier")
bombardierVersion := bombardier.text("--version")
logger.Info("Bombardier version: ", bombardierVersion)
}
func installBombardier(b bundle) error {
const (
repo = "github.com/codesenberg/bombardier"
latestVersion = "1.2.4"
)
dst := filepath.Join(os.Getenv("GOPATH"), "/src", repo)
os.RemoveAll(dst) // remove any copy that $GOPATH may have.
if err := getPlatform("git").exec("clone", "https://"+repo, dst); err != nil {
return err
}
executable := resolveFilename(b.names[0])
executableOutput := filepath.Join(b.installDir, executable)
return getPlatform("go").attach("info", "build", "-ldflags", "-X main.version="+latestVersion, "-o", executableOutput, dst)
}

View File

@ -1,15 +0,0 @@
// +build !windows
package main
import (
"os/exec"
)
func sh(script string, args ...string) error {
return (&platform{"bin/sh"}).attach("debug", append([]string{script}, args...)...)
}
func installDotnet(b bundle) error {
return sh("./scripts/dotnet-install.sh", b.parseArguments()...)
}

View File

@ -1,38 +0,0 @@
// +build windows
package main
import "errors"
var errUnableToInstall = errors.New("unable to install")
func powershell(script string, args ...string) error {
return (&platform{"powershell"}).attach("debug", append([]string{script}, args...)...)
}
func installDotnet(b bundle) error {
// Note: -Channel Preview is not available with the "latest" version, so we target a specific version;
// it's also required to do that because a lot of times the project .csproj settings are changing from version to version.
//
// Issue:
// cannot be loaded because running scripts is disabled on this system
// Solution with administrator privileges:
// Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted
//
// Issue: ./scripts/dotnet-install.ps1 : AuthorizationManager check failed.
// Solution (not work):
// Unblock-File + script
// Solution (requires manual action):
// Right click on the ./scripts/dotnet-install.ps1 and check the "unblock" property, save and exit the dialog.
//
// -ExecutionPolicy Bypass? (not tested)
return powershell("./scripts/dotnet-install.ps1", b.parseArguments()...)
}
func installNode(b bundle) error {
return powershell("./scripts/node-install.ps1", b.parseArguments()...)
}
func installGit(b bundle) error {
return powershell("./scripts/git-install.ps1", b.parseArguments()...)
}

View File

@ -1,638 +0,0 @@
#
# Copyright (c) .NET Foundation and contributors. All rights reserved.
# Licensed under the MIT license. See LICENSE file in the project root for full license information.
#
<#
.SYNOPSIS
Installs dotnet cli
.DESCRIPTION
Installs dotnet cli. If dotnet installation already exists in the given directory
it will update it only if the requested version differs from the one already installed.
.PARAMETER Channel
Default: LTS
Download from the Channel specified. Possible values:
- Current - most current release
- LTS - most current supported release
- 2-part version in a format A.B - represents a specific release
examples: 2.0, 1.0
- Branch name
examples: release/2.0.0, Master
Note: The version parameter overrides the channel parameter.
.PARAMETER Version
Default: latest
Represents a build version on specific channel. Possible values:
- latest - most latest build on specific channel
- coherent - most latest coherent build on specific channel
coherent applies only to SDK downloads
- 3-part version in a format A.B.C - represents specific version of build
examples: 2.0.0-preview2-006120, 1.1.0
.PARAMETER InstallDir
Default: %LocalAppData%\Microsoft\dotnet
Path to where to install dotnet. Note that binaries will be placed directly in a given directory.
.PARAMETER Architecture
Default: <auto> - this value represents currently running OS architecture
Architecture of dotnet binaries to be installed.
Possible values are: <auto>, amd64, x64, x86, arm64, arm
.PARAMETER SharedRuntime
This parameter is obsolete and may be removed in a future version of this script.
The recommended alternative is '-Runtime dotnet'.
Default: false
Installs just the shared runtime bits, not the entire SDK.
This is equivalent to specifying `-Runtime dotnet`.
.PARAMETER Runtime
Installs just a shared runtime, not the entire SDK.
Possible values:
- dotnet - the Microsoft.NETCore.App shared runtime
- aspnetcore - the Microsoft.AspNetCore.App shared runtime
.PARAMETER DryRun
If set it will not perform installation but instead display what command line to use to consistently install
currently requested version of dotnet cli. In example if you specify version 'latest' it will display a link
with specific version so that this command can be used deterministicly in a build script.
It also displays binaries location if you prefer to install or download it yourself.
.PARAMETER NoPath
By default this script will set environment variable PATH for the current process to the binaries folder inside installation folder.
If set it will display binaries location but not set any environment variable.
.PARAMETER Verbose
Displays diagnostics information.
.PARAMETER AzureFeed
Default: https://dotnetcli.azureedge.net/dotnet
This parameter typically is not changed by the user.
It allows changing the URL for the Azure feed used by this installer.
.PARAMETER UncachedFeed
This parameter typically is not changed by the user.
It allows changing the URL for the Uncached feed used by this installer.
.PARAMETER FeedCredential
Used as a query string to append to the Azure feed.
It allows changing the URL to use non-public blob storage accounts.
.PARAMETER ProxyAddress
If set, the installer will use the proxy when making web requests
.PARAMETER ProxyUseDefaultCredentials
Default: false
Use default credentials, when using proxy address.
.PARAMETER SkipNonVersionedFiles
Default: false
Skips installing non-versioned files if they already exist, such as dotnet.exe.
.PARAMETER NoCdn
Disable downloading from the Azure CDN, and use the uncached feed directly.
#>
[cmdletbinding()]
param(
[string]$Channel="LTS",
[string]$Version="Latest",
[string]$InstallDir="<auto>",
[string]$Architecture="<auto>",
[ValidateSet("dotnet", "aspnetcore", IgnoreCase = $false)]
[string]$Runtime,
[Obsolete("This parameter may be removed in a future version of this script. The recommended alternative is '-Runtime dotnet'.")]
[switch]$SharedRuntime,
[switch]$DryRun,
[switch]$NoPath,
[string]$AzureFeed="https://dotnetcli.azureedge.net/dotnet",
[string]$UncachedFeed="https://dotnetcli.blob.core.windows.net/dotnet",
[string]$FeedCredential,
[string]$ProxyAddress,
[switch]$ProxyUseDefaultCredentials,
[switch]$SkipNonVersionedFiles,
[switch]$NoCdn
)
Set-StrictMode -Version Latest
$ErrorActionPreference="Stop"
$ProgressPreference="SilentlyContinue"
if ($NoCdn) {
$AzureFeed = $UncachedFeed
}
$BinFolderRelativePath=""
if ($SharedRuntime -and (-not $Runtime)) {
$Runtime = "dotnet"
}
# example path with regex: shared/1.0.0-beta-12345/somepath
$VersionRegEx="/\d+\.\d+[^/]+/"
$OverrideNonVersionedFiles = !$SkipNonVersionedFiles
function Say($str) {
Write-Host "dotnet-install: $str"
}
function Say-Verbose($str) {
Write-Verbose "dotnet-install: $str"
}
function Say-Invocation($Invocation) {
$command = $Invocation.MyCommand;
$args = (($Invocation.BoundParameters.Keys | foreach { "-$_ `"$($Invocation.BoundParameters[$_])`"" }) -join " ")
Say-Verbose "$command $args"
}
function Invoke-With-Retry([ScriptBlock]$ScriptBlock, [int]$MaxAttempts = 3, [int]$SecondsBetweenAttempts = 1) {
$Attempts = 0
while ($true) {
try {
return $ScriptBlock.Invoke()
}
catch {
$Attempts++
if ($Attempts -lt $MaxAttempts) {
Start-Sleep $SecondsBetweenAttempts
}
else {
throw
}
}
}
}
function Get-Machine-Architecture() {
Say-Invocation $MyInvocation
# possible values: amd64, x64, x86, arm64, arm
return $ENV:PROCESSOR_ARCHITECTURE
}
function Get-CLIArchitecture-From-Architecture([string]$Architecture) {
Say-Invocation $MyInvocation
switch ($Architecture.ToLower()) {
{ $_ -eq "<auto>" } { return Get-CLIArchitecture-From-Architecture $(Get-Machine-Architecture) }
{ ($_ -eq "amd64") -or ($_ -eq "x64") } { return "x64" }
{ $_ -eq "x86" } { return "x86" }
{ $_ -eq "arm" } { return "arm" }
{ $_ -eq "arm64" } { return "arm64" }
default { throw "Architecture not supported. If you think this is a bug, report it at https://github.com/dotnet/cli/issues" }
}
}
# The version text returned from the feeds is a 1-line or 2-line string:
# For the SDK and the dotnet runtime (2 lines):
# Line 1: # commit_hash
# Line 2: # 4-part version
# For the aspnetcore runtime (1 line):
# Line 1: # 4-part version
function Get-Version-Info-From-Version-Text([string]$VersionText) {
Say-Invocation $MyInvocation
$Data = -split $VersionText
$VersionInfo = @{
CommitHash = $(if ($Data.Count -gt 1) { $Data[0] })
Version = $Data[-1] # last line is always the version number.
}
return $VersionInfo
}
function Load-Assembly([string] $Assembly) {
try {
Add-Type -Assembly $Assembly | Out-Null
}
catch {
# On Nano Server, Powershell Core Edition is used. Add-Type is unable to resolve base class assemblies because they are not GAC'd.
# Loading the base class assemblies is not unnecessary as the types will automatically get resolved.
}
}
function GetHTTPResponse([Uri] $Uri)
{
Invoke-With-Retry(
{
$HttpClient = $null
try {
# HttpClient is used vs Invoke-WebRequest in order to support Nano Server which doesn't support the Invoke-WebRequest cmdlet.
Load-Assembly -Assembly System.Net.Http
if(-not $ProxyAddress) {
try {
# Despite no proxy being explicitly specified, we may still be behind a default proxy
$DefaultProxy = [System.Net.WebRequest]::DefaultWebProxy;
if($DefaultProxy -and (-not $DefaultProxy.IsBypassed($Uri))) {
$ProxyAddress = $DefaultProxy.GetProxy($Uri).OriginalString
$ProxyUseDefaultCredentials = $true
}
} catch {
# Eat the exception and move forward as the above code is an attempt
# at resolving the DefaultProxy that may not have been a problem.
$ProxyAddress = $null
Say-Verbose("Exception ignored: $_.Exception.Message - moving forward...")
}
}
if($ProxyAddress) {
$HttpClientHandler = New-Object System.Net.Http.HttpClientHandler
$HttpClientHandler.Proxy = New-Object System.Net.WebProxy -Property @{Address=$ProxyAddress;UseDefaultCredentials=$ProxyUseDefaultCredentials}
$HttpClient = New-Object System.Net.Http.HttpClient -ArgumentList $HttpClientHandler
}
else {
$HttpClient = New-Object System.Net.Http.HttpClient
}
# Default timeout for HttpClient is 100s. For a 50 MB download this assumes 500 KB/s average, any less will time out
# 20 minutes allows it to work over much slower connections.
$HttpClient.Timeout = New-TimeSpan -Minutes 20
$Response = $HttpClient.GetAsync("${Uri}${FeedCredential}").Result
if (($Response -eq $null) -or (-not ($Response.IsSuccessStatusCode))) {
# The feed credential is potentially sensitive info. Do not log FeedCredential to console output.
$ErrorMsg = "Failed to download $Uri."
if ($Response -ne $null) {
$ErrorMsg += " $Response"
}
throw $ErrorMsg
}
return $Response
}
finally {
if ($HttpClient -ne $null) {
$HttpClient.Dispose()
}
}
})
}
function Get-Latest-Version-Info([string]$AzureFeed, [string]$Channel, [bool]$Coherent) {
Say-Invocation $MyInvocation
$VersionFileUrl = $null
if ($Runtime -eq "dotnet") {
$VersionFileUrl = "$UncachedFeed/Runtime/$Channel/latest.version"
}
elseif ($Runtime -eq "aspnetcore") {
$VersionFileUrl = "$UncachedFeed/aspnetcore/Runtime/$Channel/latest.version"
}
elseif (-not $Runtime) {
if ($Coherent) {
$VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.coherent.version"
}
else {
$VersionFileUrl = "$UncachedFeed/Sdk/$Channel/latest.version"
}
}
else {
throw "Invalid value for `$Runtime"
}
try {
$Response = GetHTTPResponse -Uri $VersionFileUrl
}
catch {
throw "Could not resolve version information."
}
$StringContent = $Response.Content.ReadAsStringAsync().Result
switch ($Response.Content.Headers.ContentType) {
{ ($_ -eq "application/octet-stream") } { $VersionText = $StringContent }
{ ($_ -eq "text/plain") } { $VersionText = $StringContent }
{ ($_ -eq "text/plain; charset=UTF-8") } { $VersionText = $StringContent }
default { throw "``$Response.Content.Headers.ContentType`` is an unknown .version file content type." }
}
$VersionInfo = Get-Version-Info-From-Version-Text $VersionText
return $VersionInfo
}
function Get-Specific-Version-From-Version([string]$AzureFeed, [string]$Channel, [string]$Version) {
Say-Invocation $MyInvocation
switch ($Version.ToLower()) {
{ $_ -eq "latest" } {
$LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $False
return $LatestVersionInfo.Version
}
{ $_ -eq "coherent" } {
$LatestVersionInfo = Get-Latest-Version-Info -AzureFeed $AzureFeed -Channel $Channel -Coherent $True
return $LatestVersionInfo.Version
}
default { return $Version }
}
}
function Get-Download-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
Say-Invocation $MyInvocation
if ($Runtime -eq "dotnet") {
$PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-runtime-$SpecificVersion-win-$CLIArchitecture.zip"
}
elseif ($Runtime -eq "aspnetcore") {
$PayloadURL = "$AzureFeed/aspnetcore/Runtime/$SpecificVersion/aspnetcore-runtime-$SpecificVersion-win-$CLIArchitecture.zip"
}
elseif (-not $Runtime) {
$PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-sdk-$SpecificVersion-win-$CLIArchitecture.zip"
}
else {
throw "Invalid value for `$Runtime"
}
Say-Verbose "Constructed primary named payload URL: $PayloadURL"
return $PayloadURL
}
function Get-LegacyDownload-Link([string]$AzureFeed, [string]$SpecificVersion, [string]$CLIArchitecture) {
Say-Invocation $MyInvocation
if (-not $Runtime) {
$PayloadURL = "$AzureFeed/Sdk/$SpecificVersion/dotnet-dev-win-$CLIArchitecture.$SpecificVersion.zip"
}
elseif ($Runtime -eq "dotnet") {
$PayloadURL = "$AzureFeed/Runtime/$SpecificVersion/dotnet-win-$CLIArchitecture.$SpecificVersion.zip"
}
else {
return $null
}
Say-Verbose "Constructed legacy named payload URL: $PayloadURL"
return $PayloadURL
}
function Get-User-Share-Path() {
Say-Invocation $MyInvocation
$InstallRoot = $env:DOTNET_INSTALL_DIR
if (!$InstallRoot) {
$InstallRoot = "$env:LocalAppData\Microsoft\dotnet"
}
return $InstallRoot
}
function Resolve-Installation-Path([string]$InstallDir) {
Say-Invocation $MyInvocation
if ($InstallDir -eq "<auto>") {
return Get-User-Share-Path
}
return $InstallDir
}
function Get-Version-Info-From-Version-File([string]$InstallRoot, [string]$RelativePathToVersionFile) {
Say-Invocation $MyInvocation
$VersionFile = Join-Path -Path $InstallRoot -ChildPath $RelativePathToVersionFile
Say-Verbose "Local version file: $VersionFile"
if (Test-Path $VersionFile) {
$VersionText = cat $VersionFile
Say-Verbose "Local version file text: $VersionText"
return Get-Version-Info-From-Version-Text $VersionText
}
Say-Verbose "Local version file not found."
return $null
}
function Is-Dotnet-Package-Installed([string]$InstallRoot, [string]$RelativePathToPackage, [string]$SpecificVersion) {
Say-Invocation $MyInvocation
$DotnetPackagePath = Join-Path -Path $InstallRoot -ChildPath $RelativePathToPackage | Join-Path -ChildPath $SpecificVersion
Say-Verbose "Is-Dotnet-Package-Installed: Path to a package: $DotnetPackagePath"
return Test-Path $DotnetPackagePath -PathType Container
}
function Get-Absolute-Path([string]$RelativeOrAbsolutePath) {
# Too much spam
# Say-Invocation $MyInvocation
return $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($RelativeOrAbsolutePath)
}
function Get-Path-Prefix-With-Version($path) {
$match = [regex]::match($path, $VersionRegEx)
if ($match.Success) {
return $entry.FullName.Substring(0, $match.Index + $match.Length)
}
return $null
}
function Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package([System.IO.Compression.ZipArchive]$Zip, [string]$OutPath) {
Say-Invocation $MyInvocation
$ret = @()
foreach ($entry in $Zip.Entries) {
$dir = Get-Path-Prefix-With-Version $entry.FullName
if ($dir -ne $null) {
$path = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $dir)
if (-Not (Test-Path $path -PathType Container)) {
$ret += $dir
}
}
}
$ret = $ret | Sort-Object | Get-Unique
$values = ($ret | foreach { "$_" }) -join ";"
Say-Verbose "Directories to unpack: $values"
return $ret
}
# Example zip content and extraction algorithm:
# Rule: files if extracted are always being extracted to the same relative path locally
# .\
# a.exe # file does not exist locally, extract
# b.dll # file exists locally, override only if $OverrideFiles set
# aaa\ # same rules as for files
# ...
# abc\1.0.0\ # directory contains version and exists locally
# ... # do not extract content under versioned part
# abc\asd\ # same rules as for files
# ...
# def\ghi\1.0.1\ # directory contains version and does not exist locally
# ... # extract content
function Extract-Dotnet-Package([string]$ZipPath, [string]$OutPath) {
Say-Invocation $MyInvocation
Load-Assembly -Assembly System.IO.Compression.FileSystem
Set-Variable -Name Zip
try {
$Zip = [System.IO.Compression.ZipFile]::OpenRead($ZipPath)
$DirectoriesToUnpack = Get-List-Of-Directories-And-Versions-To-Unpack-From-Dotnet-Package -Zip $Zip -OutPath $OutPath
foreach ($entry in $Zip.Entries) {
$PathWithVersion = Get-Path-Prefix-With-Version $entry.FullName
if (($PathWithVersion -eq $null) -Or ($DirectoriesToUnpack -contains $PathWithVersion)) {
$DestinationPath = Get-Absolute-Path $(Join-Path -Path $OutPath -ChildPath $entry.FullName)
$DestinationDir = Split-Path -Parent $DestinationPath
$OverrideFiles=$OverrideNonVersionedFiles -Or (-Not (Test-Path $DestinationPath))
if ((-Not $DestinationPath.EndsWith("\")) -And $OverrideFiles) {
New-Item -ItemType Directory -Force -Path $DestinationDir | Out-Null
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $DestinationPath, $OverrideNonVersionedFiles)
}
}
}
}
finally {
if ($Zip -ne $null) {
$Zip.Dispose()
}
}
}
function DownloadFile($Source, [string]$OutPath) {
if ($Source -notlike "http*") {
# Using System.IO.Path.GetFullPath to get the current directory
# does not work in this context - $pwd gives the current directory
if (![System.IO.Path]::IsPathRooted($Source)) {
$Source = $(Join-Path -Path $pwd -ChildPath $Source)
}
$Source = Get-Absolute-Path $Source
Say "Copying file from $Source to $OutPath"
Copy-Item $Source $OutPath
return
}
$Stream = $null
try {
$Response = GetHTTPResponse -Uri $Source
$Stream = $Response.Content.ReadAsStreamAsync().Result
$File = [System.IO.File]::Create($OutPath)
$Stream.CopyTo($File)
$File.Close()
}
finally {
if ($Stream -ne $null) {
$Stream.Dispose()
}
}
}
function Prepend-Sdk-InstallRoot-To-Path([string]$InstallRoot, [string]$BinFolderRelativePath) {
$BinPath = Get-Absolute-Path $(Join-Path -Path $InstallRoot -ChildPath $BinFolderRelativePath)
if (-Not $NoPath) {
$SuffixedBinPath = "$BinPath;"
if (-Not $env:path.Contains($SuffixedBinPath)) {
Say "Adding to current process PATH: `"$BinPath`". Note: This change will not be visible if PowerShell was run as a child process."
$env:path = $SuffixedBinPath + $env:path
} else {
Say-Verbose "Current process PATH already contains `"$BinPath`""
}
}
else {
Say "Binaries of dotnet can be found in $BinPath"
}
}
$CLIArchitecture = Get-CLIArchitecture-From-Architecture $Architecture
$SpecificVersion = Get-Specific-Version-From-Version -AzureFeed $AzureFeed -Channel $Channel -Version $Version
$DownloadLink = Get-Download-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
$LegacyDownloadLink = Get-LegacyDownload-Link -AzureFeed $AzureFeed -SpecificVersion $SpecificVersion -CLIArchitecture $CLIArchitecture
$InstallRoot = Resolve-Installation-Path $InstallDir
Say-Verbose "InstallRoot: $InstallRoot"
$ScriptName = $MyInvocation.MyCommand.Name
if ($DryRun) {
Say "Payload URLs:"
Say "Primary named payload URL: $DownloadLink"
if ($LegacyDownloadLink) {
Say "Legacy named payload URL: $LegacyDownloadLink"
}
$RepeatableCommand = ".\$ScriptName -Version `"$SpecificVersion`" -InstallDir `"$InstallRoot`" -Architecture `"$CLIArchitecture`""
if ($Runtime -eq "dotnet") {
$RepeatableCommand+=" -Runtime `"dotnet`""
}
elseif ($Runtime -eq "aspnetcore") {
$RepeatableCommand+=" -Runtime `"aspnetcore`""
}
foreach ($key in $MyInvocation.BoundParameters.Keys) {
if (-not (@("Architecture","Channel","DryRun","InstallDir","Runtime","SharedRuntime","Version") -contains $key)) {
$RepeatableCommand+=" -$key `"$($MyInvocation.BoundParameters[$key])`""
}
}
Say "Repeatable invocation: $RepeatableCommand"
exit 0
}
if ($Runtime -eq "dotnet") {
$assetName = ".NET Core Runtime"
$dotnetPackageRelativePath = "shared\Microsoft.NETCore.App"
}
elseif ($Runtime -eq "aspnetcore") {
$assetName = "ASP.NET Core Runtime"
$dotnetPackageRelativePath = "shared\Microsoft.AspNetCore.App"
}
elseif (-not $Runtime) {
$assetName = ".NET Core SDK"
$dotnetPackageRelativePath = "sdk"
}
else {
throw "Invalid value for `$Runtime"
}
# Check if the SDK version is already installed.
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
if ($isAssetInstalled) {
Say "$assetName version $SpecificVersion is already installed."
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
exit 0
}
New-Item -ItemType Directory -Force -Path $InstallRoot | Out-Null
$installDrive = $((Get-Item $InstallRoot).PSDrive.Name);
$diskInfo = Get-PSDrive -Name $installDrive
if ($diskInfo.Free / 1MB -le 100) {
Say "There is not enough disk space on drive ${installDrive}:"
exit 0
}
$ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
Say-Verbose "Zip path: $ZipPath"
$DownloadFailed = $false
Say "Downloading link: $DownloadLink"
try {
DownloadFile -Source $DownloadLink -OutPath $ZipPath
}
catch {
Say "Cannot download: $DownloadLink"
if ($LegacyDownloadLink) {
$DownloadLink = $LegacyDownloadLink
$ZipPath = [System.IO.Path]::combine([System.IO.Path]::GetTempPath(), [System.IO.Path]::GetRandomFileName())
Say-Verbose "Legacy zip path: $ZipPath"
Say "Downloading legacy link: $DownloadLink"
try {
DownloadFile -Source $DownloadLink -OutPath $ZipPath
}
catch {
Say "Cannot download: $DownloadLink"
$DownloadFailed = $true
}
}
else {
$DownloadFailed = $true
}
}
if ($DownloadFailed) {
throw "Could not find/download: `"$assetName`" with version = $SpecificVersion`nRefer to: https://aka.ms/dotnet-os-lifecycle for information on .NET Core support"
}
Say "Extracting zip from $DownloadLink"
Extract-Dotnet-Package -ZipPath $ZipPath -OutPath $InstallRoot
# Check if the SDK version is now installed; if not, fail the installation.
$isAssetInstalled = Is-Dotnet-Package-Installed -InstallRoot $InstallRoot -RelativePathToPackage $dotnetPackageRelativePath -SpecificVersion $SpecificVersion
if (!$isAssetInstalled) {
throw "`"$assetName`" with version = $SpecificVersion failed to install with an unknown error."
}
Remove-Item $ZipPath
Prepend-Sdk-InstallRoot-To-Path -InstallRoot $InstallRoot -BinFolderRelativePath $BinFolderRelativePath
Say "Installation finished"
exit 0

File diff suppressed because it is too large Load Diff

View File

@ -1,40 +0,0 @@
# borrowed: https://github.com/PowerShell/vscode-powershell/blob/develop/scripts/Install-VSCode.ps1
# edited to support a custom install directory and fix an issue with ssl and
# simplify the script - we don't need update only a temp installation.
param([string]$InstallDir="$env:TEMP")
If(!(test-path $InstallDir))
{
New-Item -ItemType Directory -Force -Path $InstallDir
}
$filename=-join($InstallDir, "\", "git-installer.exe")
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
foreach ($asset in (Invoke-RestMethod https://api.github.com/repos/git-for-windows/git/releases/latest).assets) {
if ($asset.name -match 'Git-\d*\.\d*\.\d*-64-bit\.exe') {
$dlurl = $asset.browser_download_url
$newver = $asset.name
}
}
try {
$ProgressPreference = 'SilentlyContinue'
Write-Host "`nDownloading latest stable git..." -ForegroundColor Yellow
Remove-Item -Force $filename -ErrorAction SilentlyContinue
Invoke-WebRequest -Uri $dlurl -OutFile $filename
Write-Host "`nInstalling git..." -ForegroundColor Yellow
Start-Process -Wait $filename -ArgumentList /VERYSILENT, /DIR="$InstallDir", \FORCECLOSEAPPLICATIONS
# or SILENT
Write-Host "`nInstallation complete!`n`n" -ForegroundColor Green
}
finally {
$ProgressPreference = 'Continue'
}
$s = get-process ssh-agent -ErrorAction SilentlyContinue
if ($s) {$true}

View File

@ -1,51 +0,0 @@
[cmdletbinding()]
$Install_Dir=$args[0]
$VERSION=$args[1]
$Install_Dir=[System.IO.Path]::GetFullPath($Install_Dir)
If(!(test-path $Install_Dir))
{
New-Item -ItemType Directory -Force -Path $Install_Dir
}
function Say($str) {
Write-Host "node-install: $str"
}
$url = "https://nodejs.org/dist/v$VERSION/node-v$VERSION-x64.msi"
# i.e https://nodejs.org/dist/v10.16.0/node-v10.16.0-x64.msi
# Say "----------------------------"
# Say " downloading node "
# Say "----------------------------"
# Say "url : $url"
$filename = "node.msi"
$node_msi = "$Install_Dir\$filename"
$start_time = Get-Date
$wc = New-Object System.Net.WebClient
$wc.DownloadFile($url, $node_msi)
# Say "Download of $filename finished at: $((Get-Date).Subtract($start_time).Seconds) second(s)"
# Say "---------------------------"
# Say " installing node "
# Say "---------------------------"
# Say $node_msi
# $Install_Dir = $Install_Dir.replace("\","/")
# Say "installation directory: $Install_Dir"
# $params = '/i', "$node_msi",
# 'INSTALLDIR="$Install_Dir"',
# '/qn',
# '/norestart'
# # '/log $Install_Dir\install.log'
# $p = Start-Process 'msiexec.exe' -ArgumentList $params -PassThru -Wait
# Start-Process 'msiexec.exe' -ArgumentList '/i', "$node_msi", "INSTALLDIR=$Install_Dir", '/norestart' -Wait -PassThru
Start-Process -Wait 'msiexec.exe' -ArgumentList '/i', $node_msi, "INSTALLDIR=$Install_Dir", '/passive'

View File

@ -1,7 +0,0 @@
INSTALL_DIR=$1
VERSION=$2
cd $INSTALL_DIR
curl http://nodejs.org/dist/node-$VERSION.tar.gz | tar xz --strip-components=1
./configure --prefix=$INSTALL_DIR
make install
curl https://www.npmjs.org/install.sh | sh

View File

@ -3,7 +3,7 @@ package main
import (
"testing"
"github.com/iris-contrib/httpexpect"
"github.com/gavv/httpexpect"
"github.com/kataras/iris/httptest"
)

View File

@ -3,7 +3,7 @@ package main
import (
"testing"
"github.com/iris-contrib/httpexpect"
"github.com/gavv/httpexpect"
"github.com/kataras/iris/httptest"
)

View File

@ -8,7 +8,7 @@ import (
prometheusMiddleware "github.com/iris-contrib/middleware/prometheus"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func main() {
@ -31,7 +31,7 @@ func main() {
ctx.Writef("Slept for %d milliseconds", sleep)
})
app.Get("/metrics", iris.FromStd(prometheus.Handler()))
app.Get("/metrics", iris.FromStd(promhttp.Handler()))
// http://localhost:8080/
// http://localhost:8080/anotfound

View File

@ -89,9 +89,10 @@ func TestEmbeddingGzipFilesIntoApp(t *testing.T) {
if expected, got := response.Raw().StatusCode, httptest.StatusOK; expected != got {
t.Fatalf("[%d] of '%s': expected %d status code but got %d", i, url, expected, got)
}
rawBody := response.Body().Raw()
func() {
reader, err := gzip.NewReader(bytes.NewBuffer(response.Content))
reader, err := gzip.NewReader(strings.NewReader(rawBody))
defer reader.Close()
if err != nil {
t.Fatalf("[%d] of '%s': %v", i, url, err)

View File

@ -0,0 +1,7 @@
module github.com/kataras/iris/_examples/http-listening/http3-quic
go 1.12
require (
github.com/prometheus/client_golang v1.0.0
)

View File

@ -8,7 +8,10 @@ import (
/*
$ go get -u github.com/lucas-clemente/quic-go/...
# or if you're using GO MODULES:
$ go get github.com/lucas-clemente/quic-go@master
*/
func main() {
app := iris.New()

2
cache/cache_test.go vendored
View File

@ -14,7 +14,7 @@ import (
"github.com/kataras/iris/context"
"github.com/kataras/iris/core/errors"
"github.com/iris-contrib/httpexpect"
"github.com/gavv/httpexpect"
"github.com/kataras/iris/httptest"
)

View File

@ -12,7 +12,7 @@ import (
"strings"
"testing"
"github.com/iris-contrib/httpexpect"
"github.com/gavv/httpexpect"
)
const (

View File

@ -1,6 +1,8 @@
package router
import (
"os"
"path/filepath"
"runtime"
"strings"
@ -18,23 +20,21 @@ func getCaller() (string, int) {
var pcs [32]uintptr
n := runtime.Callers(1, pcs[:])
frames := runtime.CallersFrames(pcs[:n])
wd, _ := os.Getwd()
for {
frame, more := frames.Next()
file := frame.File
splitAfterPart := "/src/"
if (!strings.Contains(file, "github.com/kataras/iris") ||
strings.Contains(file, "github.com/kataras/iris/_examples") ||
strings.Contains(file, "github.com/iris-contrib/examples") ||
(strings.Contains(file, "github.com/kataras/iris/core/router") && !strings.Contains(file, "deprecated.go"))) &&
if (!strings.Contains(file, "/kataras/iris") ||
strings.Contains(file, "/kataras/iris/_examples") ||
strings.Contains(file, "/iris-contrib/examples") ||
(strings.Contains(file, "/kataras/iris/core/router") && !strings.Contains(file, "deprecated.go"))) &&
!strings.HasSuffix(frame.Func.Name(), ".getCaller") && !strings.Contains(file, "/go/src/testing") {
// remove the $GOPATH.
n := strings.Index(file, splitAfterPart)
if n != -1 {
file = file[n+len(splitAfterPart):]
if relFile, err := filepath.Rel(wd, file); err == nil {
file = "./" + relFile
}
return file, frame.Line
}

View File

@ -15,7 +15,7 @@ func ExampleParty_StaticWeb() {
fmt.Print(err)
// Output: StaticWeb is DEPRECATED and it will be removed eventually.
// Source: github.com/kataras/iris/core/router/deprecated_example_test.go:9
// Source: ./deprecated_example_test.go:9
// Use .HandleDir("/static", "./assets") instead.
}
@ -30,7 +30,7 @@ func ExampleParty_StaticHandler() {
fmt.Print(err)
// Output: StaticHandler is DEPRECATED and it will be removed eventually.
// Source: github.com/kataras/iris/core/router/deprecated_example_test.go:24
// Source: ./deprecated_example_test.go:24
// Use iris.FileServer("./assets", iris.DirOptions{ShowList: false, Gzip: true}) instead.
}
@ -46,7 +46,7 @@ func ExampleParty_StaticEmbedded() {
fmt.Print(err)
// Output: StaticEmbedded is DEPRECATED and it will be removed eventually.
// It is also miss the AssetInfo bindata function, which is required now.
// Source: github.com/kataras/iris/core/router/deprecated_example_test.go:39
// Source: ./deprecated_example_test.go:39
// Use .HandleDir("/static", "./assets", iris.DirOptions{Asset: Asset, AssetInfo: AssetInfo, AssetNames: AssetNames}) instead.
}
@ -62,6 +62,6 @@ func ExampleParty_StaticEmbeddedGzip() {
fmt.Print(err)
// Output: StaticEmbeddedGzip is DEPRECATED and it will be removed eventually.
// It is also miss the AssetInfo bindata function, which is required now.
// Source: github.com/kataras/iris/core/router/deprecated_example_test.go:55
// Source: ./deprecated_example_test.go:55
// Use .HandleDir("/static", "./assets", iris.DirOptions{Gzip: true, Asset: Asset, AssetInfo: AssetInfo, AssetNames: AssetNames}) instead.
}

26
go.mod
View File

@ -3,27 +3,27 @@ module github.com/kataras/iris
go 1.12
require (
github.com/hashicorp/go-version v1.2.0 // indirect
github.com/BurntSushi/toml v0.3.1
github.com/Joker/jade v1.0.0
github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398
github.com/aymerick/raymond v2.0.2+incompatible
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385
github.com/fatih/structs v1.1.0
github.com/flosch/pongo2 v0.0.0-20190505152737-8914e1cf9164 // vendor removed.
github.com/iris-contrib/blackfriday v2.0.0+incompatible
github.com/iris-contrib/formBinder v0.0.0-20190104093907-fbd5963f41e1
github.com/iris-contrib/go.uuid v2.0.0+incompatible
github.com/json-iterator/go v1.1.6 // vendor removed.
github.com/kataras/golog v0.0.0-20180321173939-03be10146386
github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0
github.com/json-iterator/go v1.1.6
github.com/kataras/neffos v0.0.7
github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d // indirect
github.com/microcosm-cc/bluemonday v1.0.2
github.com/ryanuber/columnize v2.1.0+incompatible
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 // indirect
golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed // indirect
golang.org/x/text v0.3.2 // indirect
golang.org/x/tools v0.0.0-20190602112858-2de7f9bf822c // indirect
gopkg.in/yaml.v2 v2.2.2
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385
github.com/Joker/jade v1.0.1-0.20190614124447-d475f43051e7 // indirect
github.com/kataras/golog v0.0.0-20190624001437-99c81de45f40
github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4
github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible // indirect
github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible
github.com/mediocregopher/radix/v3 v3.3.0
github.com/etcd-io/bbolt v1.3.3 // indirect
github.com/dgraph-io/badger v1.6.0 // indirect
github.com/gavv/httpexpect v2.0.0+incompatible
)

View File

@ -7,7 +7,7 @@ import (
"github.com/kataras/iris"
"github.com/iris-contrib/httpexpect"
"github.com/gavv/httpexpect"
)
type (

View File

@ -14,6 +14,13 @@ import (
"github.com/kataras/golog"
)
/*
Badger has been updated to 1.6.0 - 2019-07-01
which contains a lot of breaking changes
that are adapted correctly here.
2019-07-14
*/
// DefaultFileMode used as the default database's "fileMode"
// for creating the sessions directory path, opening and write the session file.
var (
@ -52,9 +59,7 @@ func New(directoryPath string) (*Database, error) {
return nil, err
}
opts := badger.DefaultOptions
opts.Dir = directoryPath
opts.ValueDir = directoryPath
opts := badger.DefaultOptions(directoryPath)
service, err := badger.Open(opts)
@ -78,7 +83,7 @@ func NewFromDB(service *badger.DB) *Database {
// if the return value is LifeTime{} then the session manager sets the life time based on the expiration duration lives in configuration.
func (db *Database) Acquire(sid string, expires time.Duration) sessions.LifeTime {
txn := db.Service.NewTransaction(true)
defer txn.Commit(nil)
defer txn.Commit()
bsid := makePrefix(sid)
item, err := txn.Get(bsid)
@ -91,7 +96,8 @@ func (db *Database) Acquire(sid string, expires time.Duration) sessions.LifeTime
if err != nil {
if err == badger.ErrKeyNotFound {
// create it and set the expiration, we don't care about the value there.
err = txn.SetWithTTL(bsid, bsid, expires)
err = txn.SetEntry(badger.NewEntry(bsid, bsid).WithTTL(expires))
}
}
@ -129,7 +135,7 @@ func (db *Database) Set(sid string, lifetime sessions.LifeTime, key string, valu
err = db.Service.Update(func(txn *badger.Txn) error {
dur := lifetime.DurationUntilExpiration()
return txn.SetWithTTL(makeKey(sid, key), valueBytes, dur)
return txn.SetEntry(badger.NewEntry(makeKey(sid, key), valueBytes).WithTTL(dur))
})
if err != nil {
@ -145,18 +151,9 @@ func (db *Database) Get(sid string, key string) (value interface{}) {
return err
}
// return item.Value(func(valueBytes []byte) {
// if err := sessions.DefaultTranscoder.Unmarshal(valueBytes, &value); err != nil {
// golog.Error(err)
// }
// })
valueBytes, err := item.Value()
if err != nil {
return err
}
return sessions.DefaultTranscoder.Unmarshal(valueBytes, &value)
return item.Value(func(valueBytes []byte) error {
return sessions.DefaultTranscoder.Unmarshal(valueBytes, &value)
})
})
if err != nil && err != badger.ErrKeyNotFound {
@ -192,13 +189,11 @@ func (db *Database) Visit(sid string, cb func(key string, value interface{})) {
// continue
// }
valueBytes, err := item.Value()
if err != nil {
golog.Error(err)
continue
}
err := item.Value(func(valueBytes []byte) error {
return sessions.DefaultTranscoder.Unmarshal(valueBytes, &value)
})
if err = sessions.DefaultTranscoder.Unmarshal(valueBytes, &value); err != nil {
if err != nil {
golog.Error(err)
continue
}
@ -236,9 +231,9 @@ func (db *Database) Delete(sid string, key string) (deleted bool) {
err := txn.Delete(makeKey(sid, key))
if err != nil {
golog.Error(err)
return false
}
txn.Commit(nil)
return err == nil
return txn.Commit() == nil
}
// Clear removes all session key values but it keeps the session entry.
@ -246,7 +241,7 @@ func (db *Database) Clear(sid string) {
prefix := makePrefix(sid)
txn := db.Service.NewTransaction(true)
defer txn.Commit(nil)
defer txn.Commit()
iter := txn.NewIterator(iterOptionsNoValues)
defer iter.Close()
@ -264,7 +259,7 @@ func (db *Database) Release(sid string) {
// and remove the $sid.
txn := db.Service.NewTransaction(true)
txn.Delete([]byte(sid))
txn.Commit(nil)
txn.Commit()
}
// Close shutdowns the badger connection.

View File

@ -33,7 +33,7 @@ type Config struct {
Database string
// MaxActive. Defaults to 10.
MaxActive int
// Timeout for connect, write and read, defautls to 30 seconds, 0 means no timeout.
// Timeout for connect, write and read, defaults to 30 seconds, 0 means no timeout.
Timeout time.Duration
// Prefix "myprefix-for-this-website". Defaults to "".
Prefix string

View File

@ -1 +0,0 @@
Gerasimos Maropoulos <kataras2006@hotmail.com>

View File

@ -1,27 +0,0 @@
Copyright (c) 2018-2019 Gerasimos Maropoulos. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Iris nor the names of its
contributor, Gerasimos Maropoulos, may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -36,7 +36,6 @@ func Deprecated(handler context.Handler, options DeprecationOptions) context.Han
}
return func(ctx context.Context) {
handler(ctx)
ctx.Header("X-API-Warn", options.WarnMessage)
if !options.DeprecationDate.IsZero() {
@ -46,5 +45,7 @@ func Deprecated(handler context.Handler, options DeprecationOptions) context.Han
if options.DeprecationInfo != "" {
ctx.Header("X-API-Deprecation-Info", options.DeprecationInfo)
}
handler(ctx)
}
}