forked from loafle/openapi-generator-original
[windows] Fixed missing output (#19715)
* fixed missing output * bug fix * add new sample * build samples again * delete sample * move the sample and add to github workflow * remove model not needed for this test * handle specs with no models
This commit is contained in:
@@ -142,6 +142,8 @@ jobs:
|
||||
path: modules/openapi-generator-cli/target
|
||||
- name: Delete samples that are entirely generated
|
||||
run: |
|
||||
rm -rf samples/client/petstore/csharp/generichost/latest/Tags
|
||||
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/AllOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/AnyOf
|
||||
rm -rf samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare
|
||||
|
||||
@@ -3,12 +3,14 @@ name: Samples C# .Net 8 Clients
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- samples/client/petstore/csharp/generichost/latest/**
|
||||
- samples/client/petstore/csharp/generichost/net8/**
|
||||
- samples/client/petstore/csharp/httpclient/net8/**
|
||||
- samples/client/petstore/csharp/restsharp/net8/**
|
||||
- samples/client/petstore/csharp/unityWebRequest/net8/**
|
||||
pull_request:
|
||||
paths:
|
||||
- samples/client/petstore/csharp/generichost/latest/**
|
||||
- samples/client/petstore/csharp/generichost/net8/**
|
||||
- samples/client/petstore/csharp/httpclient/net8/**
|
||||
- samples/client/petstore/csharp/restsharp/net8/**
|
||||
@@ -21,6 +23,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
sample:
|
||||
- samples/client/petstore/csharp/generichost/latest/Tags
|
||||
- samples/client/petstore/csharp/generichost/net8/AllOf
|
||||
- samples/client/petstore/csharp/generichost/net8/AnyOf
|
||||
- samples/client/petstore/csharp/generichost/net8/AnyOfNoCompare
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# for csharp generichost
|
||||
generatorName: csharp
|
||||
outputDir: samples/client/petstore/csharp/generichost/latest/Tags
|
||||
inputSpec: modules/openapi-generator/src/test/resources/3_0/csharp/tags.json
|
||||
library: generichost
|
||||
templateDir: modules/openapi-generator/src/main/resources/csharp
|
||||
additionalProperties:
|
||||
packageGuid: '{321C8C3F-0156-40C1-AE42-D59761FB9B6C}'
|
||||
modelPropertySorting: alphabetical
|
||||
operationParameterSorting: alphabetical
|
||||
+57
-8
@@ -1456,7 +1456,7 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the file name of the Api Test
|
||||
* Return the file name of the Api
|
||||
*
|
||||
* @param name the file name of the Api
|
||||
* @return the file name of the Api
|
||||
@@ -5678,6 +5678,8 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
}
|
||||
|
||||
private final Map<String, Integer> seenOperationIds = new HashMap<String, Integer>();
|
||||
|
||||
/**
|
||||
* Add operation to group
|
||||
*
|
||||
@@ -5698,13 +5700,18 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
}
|
||||
// check for operationId uniqueness
|
||||
String uniqueName = co.operationId;
|
||||
int counter = 0;
|
||||
int counter = seenOperationIds.getOrDefault(uniqueName, 0);
|
||||
while(seenOperationIds.containsKey(uniqueName)) {
|
||||
uniqueName = co.operationId + "_" + counter;
|
||||
counter++;
|
||||
}
|
||||
for (CodegenOperation op : opList) {
|
||||
if (uniqueName.equals(op.operationId)) {
|
||||
uniqueName = co.operationId + "_" + counter;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
seenOperationIds.put(co.operationId, counter);
|
||||
if (!co.operationId.equals(uniqueName)) {
|
||||
LOGGER.warn("generated unique operationId `{}`", uniqueName);
|
||||
}
|
||||
@@ -6080,30 +6087,68 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a value that is unique, suffixed with _index to make it unique
|
||||
* Ensures generated files are unique when compared case-insensitive
|
||||
* Not all operating systems support case-sensitive paths
|
||||
*/
|
||||
private String uniqueCaseInsensitiveString(String value, Map<String, String> seenValues) {
|
||||
if (seenValues.keySet().contains(value)) {
|
||||
return seenValues.get(value);
|
||||
}
|
||||
|
||||
Optional<Entry<String,String>> foundEntry = seenValues.entrySet().stream().filter(v -> v.getValue().toLowerCase(Locale.ROOT).equals(value.toLowerCase(Locale.ROOT))).findAny();
|
||||
if (foundEntry.isPresent()) {
|
||||
int counter = 0;
|
||||
String uniqueValue = value + "_" + counter;
|
||||
|
||||
while (seenValues.values().stream().map(v -> v.toLowerCase(Locale.ROOT)).collect(Collectors.toList()).contains(uniqueValue.toLowerCase(Locale.ROOT))) {
|
||||
counter++;
|
||||
uniqueValue = value + "_" + counter;
|
||||
}
|
||||
|
||||
seenValues.put(value, uniqueValue);
|
||||
return uniqueValue;
|
||||
}
|
||||
|
||||
seenValues.put(value, value);
|
||||
return value;
|
||||
}
|
||||
|
||||
private final Map<String, String> seenApiFilenames = new HashMap<String, String>();
|
||||
|
||||
@Override
|
||||
public String apiFilename(String templateName, String tag) {
|
||||
String uniqueTag = uniqueCaseInsensitiveString(tag, seenApiFilenames);
|
||||
String suffix = apiTemplateFiles().get(templateName);
|
||||
return apiFileFolder() + File.separator + toApiFilename(tag) + suffix;
|
||||
return apiFileFolder() + File.separator + toApiFilename(uniqueTag) + suffix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String apiFilename(String templateName, String tag, String outputDir) {
|
||||
String uniqueTag = uniqueCaseInsensitiveString(tag, seenApiFilenames);
|
||||
String suffix = apiTemplateFiles().get(templateName);
|
||||
return outputDir + File.separator + toApiFilename(tag) + suffix;
|
||||
return outputDir + File.separator + toApiFilename(uniqueTag) + suffix;
|
||||
}
|
||||
|
||||
private final Map<String, String> seenModelFilenames = new HashMap<String, String>();
|
||||
|
||||
@Override
|
||||
public String modelFilename(String templateName, String modelName) {
|
||||
String uniqueModelName = uniqueCaseInsensitiveString(modelName, seenModelFilenames);
|
||||
String suffix = modelTemplateFiles().get(templateName);
|
||||
return modelFileFolder() + File.separator + toModelFilename(modelName) + suffix;
|
||||
return modelFileFolder() + File.separator + toModelFilename(uniqueModelName) + suffix;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String modelFilename(String templateName, String modelName, String outputDir) {
|
||||
String uniqueModelName = uniqueCaseInsensitiveString(modelName, seenModelFilenames);
|
||||
String suffix = modelTemplateFiles().get(templateName);
|
||||
return outputDir + File.separator + toModelFilename(modelName) + suffix;
|
||||
return outputDir + File.separator + toModelFilename(uniqueModelName) + suffix;
|
||||
}
|
||||
|
||||
private final Map<String, String> seenApiDocFilenames = new HashMap<String, String>();
|
||||
|
||||
/**
|
||||
* Return the full path and API documentation file
|
||||
*
|
||||
@@ -6113,11 +6158,14 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
*/
|
||||
@Override
|
||||
public String apiDocFilename(String templateName, String tag) {
|
||||
String uniqueTag = uniqueCaseInsensitiveString(tag, seenApiDocFilenames);
|
||||
String docExtension = getDocExtension();
|
||||
String suffix = docExtension != null ? docExtension : apiDocTemplateFiles().get(templateName);
|
||||
return apiDocFileFolder() + File.separator + toApiDocFilename(tag) + suffix;
|
||||
return apiDocFileFolder() + File.separator + toApiDocFilename(uniqueTag) + suffix;
|
||||
}
|
||||
|
||||
private final Map<String, String> seenApiTestFilenames = new HashMap<String, String>();
|
||||
|
||||
/**
|
||||
* Return the full path and API test file
|
||||
*
|
||||
@@ -6127,8 +6175,9 @@ public class DefaultCodegen implements CodegenConfig {
|
||||
*/
|
||||
@Override
|
||||
public String apiTestFilename(String templateName, String tag) {
|
||||
String uniqueTag = uniqueCaseInsensitiveString(tag, seenApiTestFilenames);
|
||||
String suffix = apiTestTemplateFiles().get(templateName);
|
||||
return apiTestFileFolder() + File.separator + toApiTestFilename(tag) + suffix;
|
||||
return apiTestFileFolder() + File.separator + toApiTestFilename(uniqueTag) + suffix;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1441,6 +1441,8 @@ public class DefaultGenerator implements Generator {
|
||||
return processTemplateToFile(templateData, templateName, outputFilename, shouldGenerate, skippedByOption, this.config.getOutputDir());
|
||||
}
|
||||
|
||||
private final Set<String> seenFiles = new HashSet<>();
|
||||
|
||||
private File processTemplateToFile(Map<String, Object> templateData, String templateName, String outputFilename, boolean shouldGenerate, String skippedByOption, String intendedOutputDir) throws IOException {
|
||||
String adjustedOutputFilename = outputFilename.replaceAll("//", "/").replace('/', File.separatorChar);
|
||||
File target = new File(adjustedOutputFilename);
|
||||
@@ -1451,6 +1453,11 @@ public class DefaultGenerator implements Generator {
|
||||
if (!absoluteTarget.startsWith(outDir)) {
|
||||
throw new RuntimeException(String.format(Locale.ROOT, "Target files must be generated within the output directory; absoluteTarget=%s outDir=%s", absoluteTarget, outDir));
|
||||
}
|
||||
|
||||
if (seenFiles.stream().filter(f -> f.toLowerCase(Locale.ROOT).equals(absoluteTarget.toString().toLowerCase(Locale.ROOT))).findAny().isPresent()) {
|
||||
LOGGER.warn("Duplicate file path detected. Not all operating systems can handle case sensitive file paths. path={}", absoluteTarget.toString());
|
||||
}
|
||||
seenFiles.add(absoluteTarget.toString());
|
||||
return this.templateProcessor.write(templateData, templateName, target);
|
||||
} else {
|
||||
this.templateProcessor.skip(target.toPath(), String.format(Locale.ROOT, "Skipped by %s options supplied by user.", skippedByOption));
|
||||
|
||||
Vendored
+4
@@ -12,7 +12,11 @@ using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Text.RegularExpressions;{{#useCompareNetObjects}}
|
||||
using KellermanSoftware.CompareNetObjects;{{/useCompareNetObjects}}
|
||||
{{#models}}
|
||||
{{#-first}}
|
||||
using {{packageName}}.{{modelPackage}};
|
||||
{{/-first}}
|
||||
{{/models}}
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
{{>Assembly}}namespace {{packageName}}.{{clientPackage}}
|
||||
|
||||
modules/openapi-generator/src/main/resources/csharp/libraries/generichost/HostConfiguration.mustache
Vendored
+4
@@ -11,7 +11,11 @@ using System.Text.Json.Serialization;
|
||||
using System.Net.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using {{packageName}}.{{apiPackage}};
|
||||
{{#models}}
|
||||
{{#-first}}
|
||||
using {{packageName}}.{{modelPackage}};
|
||||
{{/-first}}
|
||||
{{/models}}
|
||||
|
||||
namespace {{packageName}}.{{clientPackage}}
|
||||
{
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"info": {
|
||||
"title": "Files.com API",
|
||||
"contact": {
|
||||
"name": "Files.com Customer Success Team",
|
||||
"email": "support@files.com"
|
||||
},
|
||||
"version": "0.0.1"
|
||||
},
|
||||
"swagger": "2.0",
|
||||
"produces": [
|
||||
"application/json",
|
||||
"application/msgpack",
|
||||
"application/xml"
|
||||
],
|
||||
"securityDefinitions": {
|
||||
"api_key": {
|
||||
"type": "apiKey",
|
||||
"description": "API Key - supports user-based or site-wide API keys",
|
||||
"name": "XFilesAPIKey",
|
||||
"in": "header"
|
||||
}
|
||||
},
|
||||
"host": "app.files.com",
|
||||
"basePath": "/api/rest/v1",
|
||||
"tags": [
|
||||
{
|
||||
"name": "api_key",
|
||||
"description": "Operations about api_keys"
|
||||
},
|
||||
{
|
||||
"name": "API Keys",
|
||||
"description": "Operations about API Keys"
|
||||
},
|
||||
{
|
||||
"name": "a_p_i_k_e_y_s",
|
||||
"description": "Operations about API keys"
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"/api_keys/{id}": {
|
||||
"get": {
|
||||
"summary": "Show API Key",
|
||||
"description": "Show API Key",
|
||||
"produces": [
|
||||
"application/json"
|
||||
],
|
||||
"parameters": [
|
||||
{
|
||||
"in": "path",
|
||||
"name": "id",
|
||||
"description": "Api Key ID.",
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"required": true,
|
||||
"x-ms-summary": "Api Key ID."
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"400": {
|
||||
"description": "Bad Request",
|
||||
"x-ms-summary": "Bad Request"
|
||||
}
|
||||
},
|
||||
"tags": [
|
||||
"api_keys",
|
||||
"API Keys",
|
||||
"a_p_i_k_e_y_s"
|
||||
],
|
||||
"operationId": "GetApiKeysId",
|
||||
"x-authentication": [
|
||||
"self_managed"
|
||||
],
|
||||
"x-category": [
|
||||
"developers"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
,
|
||||
"definitions": {}
|
||||
}
|
||||
@@ -0,0 +1,362 @@
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Ww][Ii][Nn]32/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
[Ll]ogs/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
|
||||
# ASP.NET Scaffolding
|
||||
ScaffoldingReadMe.txt
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Coverlet is a free, cross platform Code Coverage Tool
|
||||
coverage*.json
|
||||
coverage*.xml
|
||||
coverage*.info
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
||||
# Fody - auto-generated XML schema
|
||||
FodyWeavers.xsd
|
||||
@@ -0,0 +1,23 @@
|
||||
# OpenAPI Generator Ignore
|
||||
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
|
||||
|
||||
# Use this file to prevent files from being overwritten by the generator.
|
||||
# The patterns follow closely to .gitignore or .dockerignore.
|
||||
|
||||
# As an example, the C# client generator defines ApiClient.cs.
|
||||
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
|
||||
#ApiClient.cs
|
||||
|
||||
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
|
||||
#foo/*/qux
|
||||
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
|
||||
|
||||
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
|
||||
#foo/**/qux
|
||||
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
|
||||
|
||||
# You can also negate patterns with an exclamation (!).
|
||||
# For example, you can ignore all files in a docs folder with the file extension .md:
|
||||
#docs/*.md
|
||||
# Then explicitly reverse the ignore rule for a single file:
|
||||
#!docs/README.md
|
||||
@@ -0,0 +1,41 @@
|
||||
.gitignore
|
||||
Org.OpenAPITools.sln
|
||||
README.md
|
||||
api/openapi.yaml
|
||||
appveyor.yml
|
||||
docs/apis/APIKEYSApi.md
|
||||
docs/apis/APIKeys0Api.md
|
||||
docs/apis/ApiKeys1Api.md
|
||||
docs/scripts/git_push.ps1
|
||||
docs/scripts/git_push.sh
|
||||
src/Org.OpenAPITools.Test/Api/DependencyInjectionTests.cs
|
||||
src/Org.OpenAPITools.Test/Org.OpenAPITools.Test.csproj
|
||||
src/Org.OpenAPITools.Test/README.md
|
||||
src/Org.OpenAPITools/Api/APIKEYSApi.cs
|
||||
src/Org.OpenAPITools/Api/APIKeys0Api.cs
|
||||
src/Org.OpenAPITools/Api/ApiKeys1Api.cs
|
||||
src/Org.OpenAPITools/Api/IApi.cs
|
||||
src/Org.OpenAPITools/Client/ApiException.cs
|
||||
src/Org.OpenAPITools/Client/ApiFactory.cs
|
||||
src/Org.OpenAPITools/Client/ApiKeyToken.cs
|
||||
src/Org.OpenAPITools/Client/ApiResponseEventArgs.cs
|
||||
src/Org.OpenAPITools/Client/ApiResponse`1.cs
|
||||
src/Org.OpenAPITools/Client/ClientUtils.cs
|
||||
src/Org.OpenAPITools/Client/CookieContainer.cs
|
||||
src/Org.OpenAPITools/Client/DateOnlyJsonConverter.cs
|
||||
src/Org.OpenAPITools/Client/DateOnlyNullableJsonConverter.cs
|
||||
src/Org.OpenAPITools/Client/DateTimeJsonConverter.cs
|
||||
src/Org.OpenAPITools/Client/DateTimeNullableJsonConverter.cs
|
||||
src/Org.OpenAPITools/Client/ExceptionEventArgs.cs
|
||||
src/Org.OpenAPITools/Client/HostConfiguration.cs
|
||||
src/Org.OpenAPITools/Client/JsonSerializerOptionsProvider.cs
|
||||
src/Org.OpenAPITools/Client/Option.cs
|
||||
src/Org.OpenAPITools/Client/RateLimitProvider`1.cs
|
||||
src/Org.OpenAPITools/Client/TokenBase.cs
|
||||
src/Org.OpenAPITools/Client/TokenContainer`1.cs
|
||||
src/Org.OpenAPITools/Client/TokenProvider`1.cs
|
||||
src/Org.OpenAPITools/Extensions/IHostBuilderExtensions.cs
|
||||
src/Org.OpenAPITools/Extensions/IHttpClientBuilderExtensions.cs
|
||||
src/Org.OpenAPITools/Extensions/IServiceCollectionExtensions.cs
|
||||
src/Org.OpenAPITools/Org.OpenAPITools.csproj
|
||||
src/Org.OpenAPITools/README.md
|
||||
@@ -0,0 +1 @@
|
||||
7.9.0-SNAPSHOT
|
||||
@@ -0,0 +1,27 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2012
|
||||
VisualStudioVersion = 12.0.0.0
|
||||
MinimumVisualStudioVersion = 10.0.0.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools", "src\Org.OpenAPITools\Org.OpenAPITools.csproj", "{321C8C3F-0156-40C1-AE42-D59761FB9B6C}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Org.OpenAPITools.Test", "src\Org.OpenAPITools.Test\Org.OpenAPITools.Test.csproj", "{19F1DEBC-DE5E-4517-8062-F000CD499087}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{321C8C3F-0156-40C1-AE42-D59761FB9B6C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1 @@
|
||||
# Created with Openapi Generator
|
||||
@@ -0,0 +1,55 @@
|
||||
openapi: 3.0.1
|
||||
info:
|
||||
contact:
|
||||
email: support@files.com
|
||||
name: Files.com Customer Success Team
|
||||
title: Files.com API
|
||||
version: 0.0.1
|
||||
servers:
|
||||
- url: //app.files.com/api/rest/v1
|
||||
tags:
|
||||
- description: Operations about api_keys
|
||||
name: api_key
|
||||
- description: Operations about API Keys
|
||||
name: API Keys
|
||||
- description: Operations about API keys
|
||||
name: a_p_i_k_e_y_s
|
||||
paths:
|
||||
/api_keys/{id}:
|
||||
get:
|
||||
description: Show API Key
|
||||
operationId: GetApiKeysId
|
||||
parameters:
|
||||
- description: Api Key ID.
|
||||
in: path
|
||||
name: id
|
||||
required: true
|
||||
schema:
|
||||
format: int32
|
||||
type: integer
|
||||
x-ms-summary: Api Key ID.
|
||||
x-ms-summary: Api Key ID.
|
||||
responses:
|
||||
"400":
|
||||
content: {}
|
||||
description: Bad Request
|
||||
x-ms-summary: Bad Request
|
||||
summary: Show API Key
|
||||
tags:
|
||||
- api_keys
|
||||
- API Keys
|
||||
- a_p_i_k_e_y_s
|
||||
x-authentication:
|
||||
- self_managed
|
||||
x-category:
|
||||
- developers
|
||||
components:
|
||||
schemas: {}
|
||||
securitySchemes:
|
||||
api_key:
|
||||
description: API Key - supports user-based or site-wide API keys
|
||||
in: header
|
||||
name: XFilesAPIKey
|
||||
type: apiKey
|
||||
x-original-swagger-version: "2.0"
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
# auto-generated by OpenAPI Generator (https://github.com/OpenAPITools/openapi-generator)
|
||||
#
|
||||
image: Visual Studio 2019
|
||||
clone_depth: 1
|
||||
build_script:
|
||||
- dotnet build -c Release
|
||||
- dotnet test -c Release
|
||||
after_build:
|
||||
- dotnet pack .\src\Org.OpenAPITools\Org.OpenAPITools.csproj -o ../../output -c Release --no-build
|
||||
@@ -0,0 +1,95 @@
|
||||
# Org.OpenAPITools.Api.APIKEYSApi
|
||||
|
||||
All URIs are relative to *http://app.files.com/api/rest/v1*
|
||||
|
||||
| Method | HTTP request | Description |
|
||||
|--------|--------------|-------------|
|
||||
| [**GetApiKeysId_1**](APIKEYSApi.md#getapikeysid_1) | **GET** /api_keys/{id} | Show API Key |
|
||||
|
||||
<a id="getapikeysid_1"></a>
|
||||
# **GetApiKeysId_1**
|
||||
> void GetApiKeysId_1 (int id)
|
||||
|
||||
Show API Key
|
||||
|
||||
Show API Key
|
||||
|
||||
### Example
|
||||
```csharp
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using Org.OpenAPITools.Api;
|
||||
using Org.OpenAPITools.Client;
|
||||
using Org.OpenAPITools.Model;
|
||||
|
||||
namespace Example
|
||||
{
|
||||
public class GetApiKeysId_1Example
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
Configuration config = new Configuration();
|
||||
config.BasePath = "http://app.files.com/api/rest/v1";
|
||||
var apiInstance = new APIKEYSApi(config);
|
||||
var id = 56; // int | Api Key ID.
|
||||
|
||||
try
|
||||
{
|
||||
// Show API Key
|
||||
apiInstance.GetApiKeysId_1(id);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
Debug.Print("Exception when calling APIKEYSApi.GetApiKeysId_1: " + e.Message);
|
||||
Debug.Print("Status Code: " + e.ErrorCode);
|
||||
Debug.Print(e.StackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Using the GetApiKeysId_1WithHttpInfo variant
|
||||
This returns an ApiResponse object which contains the response data, status code and headers.
|
||||
|
||||
```csharp
|
||||
try
|
||||
{
|
||||
// Show API Key
|
||||
apiInstance.GetApiKeysId_1WithHttpInfo(id);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
Debug.Print("Exception when calling APIKEYSApi.GetApiKeysId_1WithHttpInfo: " + e.Message);
|
||||
Debug.Print("Status Code: " + e.ErrorCode);
|
||||
Debug.Print(e.StackTrace);
|
||||
}
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
| Name | Type | Description | Notes |
|
||||
|------|------|-------------|-------|
|
||||
| **id** | **int** | Api Key ID. | |
|
||||
|
||||
### Return type
|
||||
|
||||
void (empty response body)
|
||||
|
||||
### Authorization
|
||||
|
||||
No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Accept**: Not defined
|
||||
|
||||
|
||||
### HTTP response details
|
||||
| Status code | Description | Response headers |
|
||||
|-------------|-------------|------------------|
|
||||
| **400** | Bad Request | - |
|
||||
|
||||
[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md)
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
# Org.OpenAPITools.Api.APIKeysApi
|
||||
|
||||
All URIs are relative to *http://app.files.com/api/rest/v1*
|
||||
|
||||
| Method | HTTP request | Description |
|
||||
|--------|--------------|-------------|
|
||||
| [**GetApiKeysId_0**](APIKeysApi.md#getapikeysid_0) | **GET** /api_keys/{id} | Show API Key |
|
||||
|
||||
<a id="getapikeysid_0"></a>
|
||||
# **GetApiKeysId_0**
|
||||
> void GetApiKeysId_0 (int id)
|
||||
|
||||
Show API Key
|
||||
|
||||
Show API Key
|
||||
|
||||
### Example
|
||||
```csharp
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using Org.OpenAPITools.Api;
|
||||
using Org.OpenAPITools.Client;
|
||||
using Org.OpenAPITools.Model;
|
||||
|
||||
namespace Example
|
||||
{
|
||||
public class GetApiKeysId_0Example
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
Configuration config = new Configuration();
|
||||
config.BasePath = "http://app.files.com/api/rest/v1";
|
||||
var apiInstance = new APIKeysApi(config);
|
||||
var id = 56; // int | Api Key ID.
|
||||
|
||||
try
|
||||
{
|
||||
// Show API Key
|
||||
apiInstance.GetApiKeysId_0(id);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
Debug.Print("Exception when calling APIKeysApi.GetApiKeysId_0: " + e.Message);
|
||||
Debug.Print("Status Code: " + e.ErrorCode);
|
||||
Debug.Print(e.StackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Using the GetApiKeysId_0WithHttpInfo variant
|
||||
This returns an ApiResponse object which contains the response data, status code and headers.
|
||||
|
||||
```csharp
|
||||
try
|
||||
{
|
||||
// Show API Key
|
||||
apiInstance.GetApiKeysId_0WithHttpInfo(id);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
Debug.Print("Exception when calling APIKeysApi.GetApiKeysId_0WithHttpInfo: " + e.Message);
|
||||
Debug.Print("Status Code: " + e.ErrorCode);
|
||||
Debug.Print(e.StackTrace);
|
||||
}
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
| Name | Type | Description | Notes |
|
||||
|------|------|-------------|-------|
|
||||
| **id** | **int** | Api Key ID. | |
|
||||
|
||||
### Return type
|
||||
|
||||
void (empty response body)
|
||||
|
||||
### Authorization
|
||||
|
||||
No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Accept**: Not defined
|
||||
|
||||
|
||||
### HTTP response details
|
||||
| Status code | Description | Response headers |
|
||||
|-------------|-------------|------------------|
|
||||
| **400** | Bad Request | - |
|
||||
|
||||
[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md)
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
# Org.OpenAPITools.Api.ApiKeysApi
|
||||
|
||||
All URIs are relative to *http://app.files.com/api/rest/v1*
|
||||
|
||||
| Method | HTTP request | Description |
|
||||
|--------|--------------|-------------|
|
||||
| [**GetApiKeysId**](ApiKeysApi.md#getapikeysid) | **GET** /api_keys/{id} | Show API Key |
|
||||
|
||||
<a id="getapikeysid"></a>
|
||||
# **GetApiKeysId**
|
||||
> void GetApiKeysId (int id)
|
||||
|
||||
Show API Key
|
||||
|
||||
Show API Key
|
||||
|
||||
### Example
|
||||
```csharp
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using Org.OpenAPITools.Api;
|
||||
using Org.OpenAPITools.Client;
|
||||
using Org.OpenAPITools.Model;
|
||||
|
||||
namespace Example
|
||||
{
|
||||
public class GetApiKeysIdExample
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
Configuration config = new Configuration();
|
||||
config.BasePath = "http://app.files.com/api/rest/v1";
|
||||
var apiInstance = new ApiKeysApi(config);
|
||||
var id = 56; // int | Api Key ID.
|
||||
|
||||
try
|
||||
{
|
||||
// Show API Key
|
||||
apiInstance.GetApiKeysId(id);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
Debug.Print("Exception when calling ApiKeysApi.GetApiKeysId: " + e.Message);
|
||||
Debug.Print("Status Code: " + e.ErrorCode);
|
||||
Debug.Print(e.StackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Using the GetApiKeysIdWithHttpInfo variant
|
||||
This returns an ApiResponse object which contains the response data, status code and headers.
|
||||
|
||||
```csharp
|
||||
try
|
||||
{
|
||||
// Show API Key
|
||||
apiInstance.GetApiKeysIdWithHttpInfo(id);
|
||||
}
|
||||
catch (ApiException e)
|
||||
{
|
||||
Debug.Print("Exception when calling ApiKeysApi.GetApiKeysIdWithHttpInfo: " + e.Message);
|
||||
Debug.Print("Status Code: " + e.ErrorCode);
|
||||
Debug.Print(e.StackTrace);
|
||||
}
|
||||
```
|
||||
|
||||
### Parameters
|
||||
|
||||
| Name | Type | Description | Notes |
|
||||
|------|------|-------------|-------|
|
||||
| **id** | **int** | Api Key ID. | |
|
||||
|
||||
### Return type
|
||||
|
||||
void (empty response body)
|
||||
|
||||
### Authorization
|
||||
|
||||
No authorization required
|
||||
|
||||
### HTTP request headers
|
||||
|
||||
- **Content-Type**: Not defined
|
||||
- **Accept**: Not defined
|
||||
|
||||
|
||||
### HTTP response details
|
||||
| Status code | Description | Response headers |
|
||||
|-------------|-------------|------------------|
|
||||
| **400** | Bad Request | - |
|
||||
|
||||
[[Back to top]](#) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../README.md#documentation-for-models) [[Back to README]](../../README.md)
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
param(
|
||||
[Parameter()][Alias("g")][String]$GitHost = "github.com",
|
||||
[Parameter()][Alias("u")][String]$GitUserId = "GIT_USER_ID",
|
||||
[Parameter()][Alias("r")][String]$GitRepoId = "GIT_REPO_ID",
|
||||
[Parameter()][Alias("m")][string]$Message = "Minor update",
|
||||
[Parameter()][Alias("h")][switch]$Help
|
||||
)
|
||||
|
||||
function Publish-ToGitHost{
|
||||
if ([string]::IsNullOrWhiteSpace($Message) -or $Message -eq "Minor update"){
|
||||
# it seems unlikely that we would want our git commit message to be the default, so lets prompt the user
|
||||
$Message = Read-Host -Prompt "Please provide a commit message or press enter"
|
||||
$Message = if([string]::IsNullOrWhiteSpace($Message)) { "no message provided" } else { $Message }
|
||||
}
|
||||
|
||||
git init
|
||||
git add .
|
||||
git commit -am "${Message}"
|
||||
$branchName=$(git rev-parse --abbrev-ref HEAD)
|
||||
$gitRemote=$(git remote)
|
||||
|
||||
if([string]::IsNullOrWhiteSpace($gitRemote)){
|
||||
git remote add origin https://${GitHost}/${GitUserId}/${GitRepoId}.git
|
||||
}
|
||||
|
||||
Write-Output "Pulling from https://${GitHost}/${GitUserId}/${GitRepoId}.git"
|
||||
git pull origin $branchName --ff-only
|
||||
|
||||
if ($LastExitCode -ne 0){
|
||||
if (${GitHost} -eq "github.com"){
|
||||
Write-Output "The ${GitRepoId} repository may not exist yet. Creating it now with the GitHub CLI."
|
||||
gh auth login --hostname github.com --web
|
||||
gh repo create $GitRepoId --private
|
||||
# sleep 2 seconds to ensure git finishes creation of the repo
|
||||
Start-Sleep -Seconds 2
|
||||
}
|
||||
else{
|
||||
throw "There was an issue pulling the origin branch. The remote repository may not exist yet."
|
||||
}
|
||||
}
|
||||
|
||||
Write-Output "Pushing to https://${GitHost}/${GitUserId}/${GitRepoId}.git"
|
||||
git push origin $branchName
|
||||
}
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
Set-StrictMode -Version 3.0
|
||||
|
||||
if ($Help){
|
||||
Write-Output "
|
||||
This script will initialize a git repository, then add and commit all files.
|
||||
The local repository will then be pushed to your preferred git provider.
|
||||
If the remote repository does not exist yet and you are using GitHub,
|
||||
the repository will be created for you provided you have the GitHub CLI installed.
|
||||
|
||||
Parameters:
|
||||
-g | -GitHost -> ex: github.com
|
||||
-m | -Message -> the git commit message
|
||||
-r | -GitRepoId -> the name of the repository
|
||||
-u | -GitUserId -> your user id
|
||||
"
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
$rootPath=Resolve-Path -Path $PSScriptRoot/../..
|
||||
|
||||
Push-Location $rootPath
|
||||
|
||||
try {
|
||||
Publish-ToGitHost $GitHost $GitUserId $GitRepoId $Message
|
||||
}
|
||||
finally{
|
||||
Pop-Location
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
#!/bin/sh
|
||||
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
|
||||
#
|
||||
# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
|
||||
|
||||
git_user_id=${1:-GIT_USER_ID}
|
||||
git_repo_id=${2:-GIT_REPO_ID}
|
||||
release_note=${3:-Minor update}
|
||||
git_host=${4:-github.com}
|
||||
|
||||
starting_directory=$(pwd)
|
||||
script_root="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
cd $script_root
|
||||
cd ../..
|
||||
|
||||
if [ "$release_note" = "" ] || [ "$release_note" = "Minor update" ]; then
|
||||
# it seems unlikely that we would want our git commit message to be the default, so lets prompt the user
|
||||
echo "Please provide a commit message or press enter"
|
||||
read user_input
|
||||
release_note=$user_input
|
||||
if [ "$release_note" = "" ]; then
|
||||
release_note="no message provided"
|
||||
fi
|
||||
fi
|
||||
|
||||
git init
|
||||
git add .
|
||||
git commit -am "$release_note"
|
||||
branch_name=$(git rev-parse --abbrev-ref HEAD)
|
||||
git_remote=$(git remote)
|
||||
|
||||
if [ "$git_remote" = "" ]; then # git remote not defined
|
||||
|
||||
if [ "$GIT_TOKEN" = "" ]; then
|
||||
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
|
||||
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
|
||||
else
|
||||
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
echo "[INFO] Pulling from https://${git_host}/${git_user_id}/${git_repo_id}.git"
|
||||
git pull origin $branch_name --ff-only
|
||||
|
||||
echo "[INFO] Pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
|
||||
git push origin $branch_name
|
||||
|
||||
cd $starting_directory
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Org.OpenAPITools.Api;
|
||||
|
||||
|
||||
/* *********************************************************************************
|
||||
* Follow these manual steps to construct tests.
|
||||
* This file will not be overwritten.
|
||||
* *********************************************************************************
|
||||
* 1. Navigate to ApiTests.Base.cs and ensure any tokens are being created correctly.
|
||||
* Take care not to commit credentials to any repository.
|
||||
*
|
||||
* 2. Mocking is coordinated by ApiTestsBase#AddApiHttpClients.
|
||||
* To mock the client, use the generic AddApiHttpClients.
|
||||
* To mock the server, change the client's BaseAddress.
|
||||
*
|
||||
* 3. Locate the test you want below
|
||||
* - remove the skip property from the Fact attribute
|
||||
* - set the value of any variables if necessary
|
||||
*
|
||||
* 4. Run the tests and ensure they work.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
namespace Org.OpenAPITools.Test.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Class for testing APIKEYSApi
|
||||
/// </summary>
|
||||
public sealed class APIKEYSApiTests : ApiTestsBase
|
||||
{
|
||||
private readonly IAPIKEYSApi _instance;
|
||||
|
||||
public APIKEYSApiTests(): base(Array.Empty<string>())
|
||||
{
|
||||
_instance = _host.Services.GetRequiredService<IAPIKEYSApi>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetApiKeysId_1
|
||||
/// </summary>
|
||||
[Fact (Skip = "not implemented")]
|
||||
public async Task GetApiKeysId_1AsyncTest()
|
||||
{
|
||||
int id = default!;
|
||||
await _instance.GetApiKeysId_1Async(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Org.OpenAPITools.Api;
|
||||
|
||||
|
||||
/* *********************************************************************************
|
||||
* Follow these manual steps to construct tests.
|
||||
* This file will not be overwritten.
|
||||
* *********************************************************************************
|
||||
* 1. Navigate to ApiTests.Base.cs and ensure any tokens are being created correctly.
|
||||
* Take care not to commit credentials to any repository.
|
||||
*
|
||||
* 2. Mocking is coordinated by ApiTestsBase#AddApiHttpClients.
|
||||
* To mock the client, use the generic AddApiHttpClients.
|
||||
* To mock the server, change the client's BaseAddress.
|
||||
*
|
||||
* 3. Locate the test you want below
|
||||
* - remove the skip property from the Fact attribute
|
||||
* - set the value of any variables if necessary
|
||||
*
|
||||
* 4. Run the tests and ensure they work.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
namespace Org.OpenAPITools.Test.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Class for testing APIKeysApi
|
||||
/// </summary>
|
||||
public sealed class APIKeysApiTests : ApiTestsBase
|
||||
{
|
||||
private readonly IAPIKeysApi _instance;
|
||||
|
||||
public APIKeysApiTests(): base(Array.Empty<string>())
|
||||
{
|
||||
_instance = _host.Services.GetRequiredService<IAPIKeysApi>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetApiKeysId_0
|
||||
/// </summary>
|
||||
[Fact (Skip = "not implemented")]
|
||||
public async Task GetApiKeysId_0AsyncTest()
|
||||
{
|
||||
int id = default!;
|
||||
await _instance.GetApiKeysId_0Async(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Org.OpenAPITools.Api;
|
||||
|
||||
|
||||
/* *********************************************************************************
|
||||
* Follow these manual steps to construct tests.
|
||||
* This file will not be overwritten.
|
||||
* *********************************************************************************
|
||||
* 1. Navigate to ApiTests.Base.cs and ensure any tokens are being created correctly.
|
||||
* Take care not to commit credentials to any repository.
|
||||
*
|
||||
* 2. Mocking is coordinated by ApiTestsBase#AddApiHttpClients.
|
||||
* To mock the client, use the generic AddApiHttpClients.
|
||||
* To mock the server, change the client's BaseAddress.
|
||||
*
|
||||
* 3. Locate the test you want below
|
||||
* - remove the skip property from the Fact attribute
|
||||
* - set the value of any variables if necessary
|
||||
*
|
||||
* 4. Run the tests and ensure they work.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
namespace Org.OpenAPITools.Test.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Class for testing ApiKeysApi
|
||||
/// </summary>
|
||||
public sealed class ApiKeysApiTests : ApiTestsBase
|
||||
{
|
||||
private readonly IApiKeysApi _instance;
|
||||
|
||||
public ApiKeysApiTests(): base(Array.Empty<string>())
|
||||
{
|
||||
_instance = _host.Services.GetRequiredService<IApiKeysApi>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test GetApiKeysId
|
||||
/// </summary>
|
||||
[Fact (Skip = "not implemented")]
|
||||
public async Task GetApiKeysIdAsyncTest()
|
||||
{
|
||||
int id = default!;
|
||||
await _instance.GetApiKeysIdAsync(id);
|
||||
}
|
||||
}
|
||||
}
|
||||
+61
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Cryptography;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Org.OpenAPITools.Client;
|
||||
using Org.OpenAPITools.Extensions;
|
||||
|
||||
|
||||
/* *********************************************************************************
|
||||
* Follow these manual steps to construct tests.
|
||||
* This file will not be overwritten.
|
||||
* *********************************************************************************
|
||||
* 1. Navigate to ApiTests.Base.cs and ensure any tokens are being created correctly.
|
||||
* Take care not to commit credentials to any repository.
|
||||
*
|
||||
* 2. Mocking is coordinated by ApiTestsBase#AddApiHttpClients.
|
||||
* To mock the client, use the generic AddApiHttpClients.
|
||||
* To mock the server, change the client's BaseAddress.
|
||||
*
|
||||
* 3. Locate the test you want below
|
||||
* - remove the skip property from the Fact attribute
|
||||
* - set the value of any variables if necessary
|
||||
*
|
||||
* 4. Run the tests and ensure they work.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
namespace Org.OpenAPITools.Test.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Base class for API tests
|
||||
/// </summary>
|
||||
public class ApiTestsBase
|
||||
{
|
||||
protected readonly IHost _host;
|
||||
|
||||
public ApiTestsBase(string[] args)
|
||||
{
|
||||
_host = CreateHostBuilder(args).Build();
|
||||
}
|
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
|
||||
.ConfigureApi((context, services, options) =>
|
||||
{
|
||||
string apiKeyTokenValue1 = context.Configuration["<token>"] ?? throw new Exception("Token not found.");
|
||||
ApiKeyToken apiKeyToken1 = new(apiKeyTokenValue1, ClientUtils.ApiKeyHeader.XFilesAPIKey, timeout: TimeSpan.FromSeconds(1));
|
||||
options.AddTokens(apiKeyToken1);
|
||||
});
|
||||
}
|
||||
}
|
||||
+132
@@ -0,0 +1,132 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Cryptography;
|
||||
using Org.OpenAPITools.Client;
|
||||
using Org.OpenAPITools.Api;
|
||||
using Org.OpenAPITools.Extensions;
|
||||
using Xunit;
|
||||
|
||||
namespace Org.OpenAPITools.Test.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Tests the dependency injection.
|
||||
/// </summary>
|
||||
public class DependencyInjectionTest
|
||||
{
|
||||
private readonly IHost _hostUsingConfigureWithoutAClient =
|
||||
Host.CreateDefaultBuilder([]).ConfigureApi((context, services, options) =>
|
||||
{
|
||||
ApiKeyToken apiKeyToken1 = new("<token>", ClientUtils.ApiKeyHeader.XFilesAPIKey, timeout: TimeSpan.FromSeconds(1));
|
||||
options.AddTokens(apiKeyToken1);
|
||||
})
|
||||
.Build();
|
||||
|
||||
private readonly IHost _hostUsingConfigureWithAClient =
|
||||
Host.CreateDefaultBuilder([]).ConfigureApi((context, services, options) =>
|
||||
{
|
||||
ApiKeyToken apiKeyToken1 = new("<token>", ClientUtils.ApiKeyHeader.XFilesAPIKey, timeout: TimeSpan.FromSeconds(1));
|
||||
options.AddTokens(apiKeyToken1);
|
||||
options.AddApiHttpClients(client => client.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS));
|
||||
})
|
||||
.Build();
|
||||
|
||||
private readonly IHost _hostUsingAddWithoutAClient =
|
||||
Host.CreateDefaultBuilder([]).ConfigureServices((host, services) =>
|
||||
{
|
||||
services.AddApi(options =>
|
||||
{
|
||||
ApiKeyToken apiKeyToken1 = new("<token>", ClientUtils.ApiKeyHeader.XFilesAPIKey, timeout: TimeSpan.FromSeconds(1));
|
||||
options.AddTokens(apiKeyToken1);
|
||||
});
|
||||
})
|
||||
.Build();
|
||||
|
||||
private readonly IHost _hostUsingAddWithAClient =
|
||||
Host.CreateDefaultBuilder([]).ConfigureServices((host, services) =>
|
||||
{
|
||||
services.AddApi(options =>
|
||||
{
|
||||
ApiKeyToken apiKeyToken1 = new("<token>", ClientUtils.ApiKeyHeader.XFilesAPIKey, timeout: TimeSpan.FromSeconds(1));
|
||||
options.AddTokens(apiKeyToken1);
|
||||
options.AddApiHttpClients(client => client.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS));
|
||||
});
|
||||
})
|
||||
.Build();
|
||||
|
||||
/// <summary>
|
||||
/// Test dependency injection when using the configure method
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void ConfigureApiWithAClientTest()
|
||||
{
|
||||
var aPIKEYSApi = _hostUsingConfigureWithAClient.Services.GetRequiredService<IAPIKEYSApi>();
|
||||
Assert.True(aPIKEYSApi.HttpClient.BaseAddress != null);
|
||||
|
||||
var aPIKeysApi = _hostUsingConfigureWithAClient.Services.GetRequiredService<IAPIKeysApi>();
|
||||
Assert.True(aPIKeysApi.HttpClient.BaseAddress != null);
|
||||
|
||||
var apiKeysApi = _hostUsingConfigureWithAClient.Services.GetRequiredService<IApiKeysApi>();
|
||||
Assert.True(apiKeysApi.HttpClient.BaseAddress != null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test dependency injection when using the configure method
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void ConfigureApiWithoutAClientTest()
|
||||
{
|
||||
var aPIKEYSApi = _hostUsingConfigureWithoutAClient.Services.GetRequiredService<IAPIKEYSApi>();
|
||||
Assert.True(aPIKEYSApi.HttpClient.BaseAddress != null);
|
||||
|
||||
var aPIKeysApi = _hostUsingConfigureWithoutAClient.Services.GetRequiredService<IAPIKeysApi>();
|
||||
Assert.True(aPIKeysApi.HttpClient.BaseAddress != null);
|
||||
|
||||
var apiKeysApi = _hostUsingConfigureWithoutAClient.Services.GetRequiredService<IApiKeysApi>();
|
||||
Assert.True(apiKeysApi.HttpClient.BaseAddress != null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test dependency injection when using the add method
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void AddApiWithAClientTest()
|
||||
{
|
||||
var aPIKEYSApi = _hostUsingAddWithAClient.Services.GetRequiredService<IAPIKEYSApi>();
|
||||
Assert.True(aPIKEYSApi.HttpClient.BaseAddress != null);
|
||||
|
||||
var aPIKeysApi = _hostUsingAddWithAClient.Services.GetRequiredService<IAPIKeysApi>();
|
||||
Assert.True(aPIKeysApi.HttpClient.BaseAddress != null);
|
||||
|
||||
var apiKeysApi = _hostUsingAddWithAClient.Services.GetRequiredService<IApiKeysApi>();
|
||||
Assert.True(apiKeysApi.HttpClient.BaseAddress != null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test dependency injection when using the add method
|
||||
/// </summary>
|
||||
[Fact]
|
||||
public void AddApiWithoutAClientTest()
|
||||
{
|
||||
var aPIKEYSApi = _hostUsingAddWithoutAClient.Services.GetRequiredService<IAPIKEYSApi>();
|
||||
Assert.True(aPIKEYSApi.HttpClient.BaseAddress != null);
|
||||
|
||||
var aPIKeysApi = _hostUsingAddWithoutAClient.Services.GetRequiredService<IAPIKeysApi>();
|
||||
Assert.True(aPIKeysApi.HttpClient.BaseAddress != null);
|
||||
|
||||
var apiKeysApi = _hostUsingAddWithoutAClient.Services.GetRequiredService<IApiKeysApi>();
|
||||
Assert.True(apiKeysApi.HttpClient.BaseAddress != null);
|
||||
}
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<AssemblyName>Org.OpenAPITools.Test</AssemblyName>
|
||||
<RootNamespace>Org.OpenAPITools.Test</RootNamespace>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
|
||||
<PackageReference Include="xunit" Version="2.9.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Org.OpenAPITools\Org.OpenAPITools.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
+311
@@ -0,0 +1,311 @@
|
||||
// <auto-generated>
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.Json;
|
||||
using Org.OpenAPITools.Client;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Org.OpenAPITools.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// This class is registered as transient.
|
||||
/// </summary>
|
||||
public interface IAPIKEYSApi : IApi
|
||||
{
|
||||
/// <summary>
|
||||
/// The class containing the events
|
||||
/// </summary>
|
||||
APIKEYSApiEvents Events { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Show API Key
|
||||
/// </remarks>
|
||||
/// <exception cref="ApiException">Thrown when fails to make API call</exception>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysId_1ApiResponse"/>></returns>
|
||||
Task<IGetApiKeysId_1ApiResponse> GetApiKeysId_1Async(int id, System.Threading.CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Show API Key
|
||||
/// </remarks>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysId_1ApiResponse"/>?></returns>
|
||||
Task<IGetApiKeysId_1ApiResponse?> GetApiKeysId_1OrDefaultAsync(int id, System.Threading.CancellationToken cancellationToken = default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="IGetApiKeysId_1ApiResponse"/>
|
||||
/// </summary>
|
||||
public interface IGetApiKeysId_1ApiResponse : Org.OpenAPITools.Client.IApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns true if the response is 400 BadRequest
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
bool IsBadRequest { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// </summary>
|
||||
public class APIKEYSApiEvents
|
||||
{
|
||||
/// <summary>
|
||||
/// The event raised after the server response
|
||||
/// </summary>
|
||||
public event EventHandler<ApiResponseEventArgs>? OnGetApiKeysId_1;
|
||||
|
||||
/// <summary>
|
||||
/// The event raised after an error querying the server
|
||||
/// </summary>
|
||||
public event EventHandler<ExceptionEventArgs>? OnErrorGetApiKeysId_1;
|
||||
|
||||
internal void ExecuteOnGetApiKeysId_1(APIKEYSApi.GetApiKeysId_1ApiResponse apiResponse)
|
||||
{
|
||||
OnGetApiKeysId_1?.Invoke(this, new ApiResponseEventArgs(apiResponse));
|
||||
}
|
||||
|
||||
internal void ExecuteOnErrorGetApiKeysId_1(Exception exception)
|
||||
{
|
||||
OnErrorGetApiKeysId_1?.Invoke(this, new ExceptionEventArgs(exception));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// </summary>
|
||||
public sealed partial class APIKEYSApi : IAPIKEYSApi
|
||||
{
|
||||
private JsonSerializerOptions _jsonSerializerOptions;
|
||||
|
||||
/// <summary>
|
||||
/// The logger factory
|
||||
/// </summary>
|
||||
public ILoggerFactory LoggerFactory { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The logger
|
||||
/// </summary>
|
||||
public ILogger<APIKEYSApi> Logger { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The HttpClient
|
||||
/// </summary>
|
||||
public HttpClient HttpClient { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The class containing the events
|
||||
/// </summary>
|
||||
public APIKEYSApiEvents Events { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A token provider of type <see cref="ApiKeyProvider"/>
|
||||
/// </summary>
|
||||
public TokenProvider<ApiKeyToken> ApiKeyProvider { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="APIKEYSApi"/> class.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public APIKEYSApi(ILogger<APIKEYSApi> logger, ILoggerFactory loggerFactory, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, APIKEYSApiEvents aPIKEYSApiEvents,
|
||||
TokenProvider<ApiKeyToken> apiKeyProvider)
|
||||
{
|
||||
_jsonSerializerOptions = jsonSerializerOptionsProvider.Options;
|
||||
LoggerFactory = loggerFactory;
|
||||
Logger = LoggerFactory.CreateLogger<APIKEYSApi>();
|
||||
HttpClient = httpClient;
|
||||
Events = aPIKEYSApiEvents;
|
||||
ApiKeyProvider = apiKeyProvider;
|
||||
}
|
||||
|
||||
partial void FormatGetApiKeysId_1(ref int id);
|
||||
|
||||
/// <summary>
|
||||
/// Processes the server response
|
||||
/// </summary>
|
||||
/// <param name="apiResponseLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
private void AfterGetApiKeysId_1DefaultImplementation(IGetApiKeysId_1ApiResponse apiResponseLocalVar, int id)
|
||||
{
|
||||
bool suppressDefaultLog = false;
|
||||
AfterGetApiKeysId_1(ref suppressDefaultLog, apiResponseLocalVar, id);
|
||||
if (!suppressDefaultLog)
|
||||
Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processes the server response
|
||||
/// </summary>
|
||||
/// <param name="suppressDefaultLog"></param>
|
||||
/// <param name="apiResponseLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
partial void AfterGetApiKeysId_1(ref bool suppressDefaultLog, IGetApiKeysId_1ApiResponse apiResponseLocalVar, int id);
|
||||
|
||||
/// <summary>
|
||||
/// Logs exceptions that occur while retrieving the server response
|
||||
/// </summary>
|
||||
/// <param name="exceptionLocalVar"></param>
|
||||
/// <param name="pathFormatLocalVar"></param>
|
||||
/// <param name="pathLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
private void OnErrorGetApiKeysId_1DefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, int id)
|
||||
{
|
||||
bool suppressDefaultLogLocalVar = false;
|
||||
OnErrorGetApiKeysId_1(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, id);
|
||||
if (!suppressDefaultLogLocalVar)
|
||||
Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A partial method that gives developers a way to provide customized exception handling
|
||||
/// </summary>
|
||||
/// <param name="suppressDefaultLogLocalVar"></param>
|
||||
/// <param name="exceptionLocalVar"></param>
|
||||
/// <param name="pathFormatLocalVar"></param>
|
||||
/// <param name="pathLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
partial void OnErrorGetApiKeysId_1(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, int id);
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key Show API Key
|
||||
/// </summary>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysId_1ApiResponse"/>></returns>
|
||||
public async Task<IGetApiKeysId_1ApiResponse?> GetApiKeysId_1OrDefaultAsync(int id, System.Threading.CancellationToken cancellationToken = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await GetApiKeysId_1Async(id, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key Show API Key
|
||||
/// </summary>
|
||||
/// <exception cref="ApiException">Thrown when fails to make API call</exception>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysId_1ApiResponse"/>></returns>
|
||||
public async Task<IGetApiKeysId_1ApiResponse> GetApiKeysId_1Async(int id, System.Threading.CancellationToken cancellationToken = default)
|
||||
{
|
||||
UriBuilder uriBuilderLocalVar = new UriBuilder();
|
||||
|
||||
try
|
||||
{
|
||||
FormatGetApiKeysId_1(ref id);
|
||||
|
||||
using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage())
|
||||
{
|
||||
uriBuilderLocalVar.Host = HttpClient.BaseAddress!.Host;
|
||||
uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port;
|
||||
uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme;
|
||||
uriBuilderLocalVar.Path = ClientUtils.CONTEXT_PATH + "/api_keys/{id}";
|
||||
uriBuilderLocalVar.Path = uriBuilderLocalVar.Path.Replace("%7Bid%7D", Uri.EscapeDataString(id.ToString()));
|
||||
|
||||
httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
|
||||
|
||||
httpRequestMessageLocalVar.Method = HttpMethod.Get;
|
||||
|
||||
DateTime requestedAtLocalVar = DateTime.UtcNow;
|
||||
|
||||
using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false))
|
||||
{
|
||||
string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
ILogger<GetApiKeysId_1ApiResponse> apiResponseLoggerLocalVar = LoggerFactory.CreateLogger<GetApiKeysId_1ApiResponse>();
|
||||
|
||||
GetApiKeysId_1ApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/api_keys/{id}", requestedAtLocalVar, _jsonSerializerOptions);
|
||||
|
||||
AfterGetApiKeysId_1DefaultImplementation(apiResponseLocalVar, id);
|
||||
|
||||
Events.ExecuteOnGetApiKeysId_1(apiResponseLocalVar);
|
||||
|
||||
return apiResponseLocalVar;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
OnErrorGetApiKeysId_1DefaultImplementation(e, "/api_keys/{id}", uriBuilderLocalVar.Path, id);
|
||||
Events.ExecuteOnErrorGetApiKeysId_1(e);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="GetApiKeysId_1ApiResponse"/>
|
||||
/// </summary>
|
||||
public partial class GetApiKeysId_1ApiResponse : Org.OpenAPITools.Client.ApiResponse, IGetApiKeysId_1ApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger
|
||||
/// </summary>
|
||||
public ILogger<GetApiKeysId_1ApiResponse> Logger { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="GetApiKeysId_1ApiResponse"/>
|
||||
/// </summary>
|
||||
/// <param name="logger"></param>
|
||||
/// <param name="httpRequestMessage"></param>
|
||||
/// <param name="httpResponseMessage"></param>
|
||||
/// <param name="rawContent"></param>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="requestedAt"></param>
|
||||
/// <param name="jsonSerializerOptions"></param>
|
||||
public GetApiKeysId_1ApiResponse(ILogger<GetApiKeysId_1ApiResponse> logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions)
|
||||
{
|
||||
Logger = logger;
|
||||
OnCreated(httpRequestMessage, httpResponseMessage);
|
||||
}
|
||||
|
||||
partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage);
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the response is 400 BadRequest
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool IsBadRequest => 400 == (int)StatusCode;
|
||||
|
||||
private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode)
|
||||
{
|
||||
bool suppressDefaultLog = false;
|
||||
OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode);
|
||||
if (!suppressDefaultLog)
|
||||
Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode);
|
||||
}
|
||||
|
||||
partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
+311
@@ -0,0 +1,311 @@
|
||||
// <auto-generated>
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.Json;
|
||||
using Org.OpenAPITools.Client;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Org.OpenAPITools.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// This class is registered as transient.
|
||||
/// </summary>
|
||||
public interface IAPIKeysApi : IApi
|
||||
{
|
||||
/// <summary>
|
||||
/// The class containing the events
|
||||
/// </summary>
|
||||
APIKeysApiEvents Events { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Show API Key
|
||||
/// </remarks>
|
||||
/// <exception cref="ApiException">Thrown when fails to make API call</exception>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysId_0ApiResponse"/>></returns>
|
||||
Task<IGetApiKeysId_0ApiResponse> GetApiKeysId_0Async(int id, System.Threading.CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Show API Key
|
||||
/// </remarks>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysId_0ApiResponse"/>?></returns>
|
||||
Task<IGetApiKeysId_0ApiResponse?> GetApiKeysId_0OrDefaultAsync(int id, System.Threading.CancellationToken cancellationToken = default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="IGetApiKeysId_0ApiResponse"/>
|
||||
/// </summary>
|
||||
public interface IGetApiKeysId_0ApiResponse : Org.OpenAPITools.Client.IApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns true if the response is 400 BadRequest
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
bool IsBadRequest { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// </summary>
|
||||
public class APIKeysApiEvents
|
||||
{
|
||||
/// <summary>
|
||||
/// The event raised after the server response
|
||||
/// </summary>
|
||||
public event EventHandler<ApiResponseEventArgs>? OnGetApiKeysId_0;
|
||||
|
||||
/// <summary>
|
||||
/// The event raised after an error querying the server
|
||||
/// </summary>
|
||||
public event EventHandler<ExceptionEventArgs>? OnErrorGetApiKeysId_0;
|
||||
|
||||
internal void ExecuteOnGetApiKeysId_0(APIKeysApi.GetApiKeysId_0ApiResponse apiResponse)
|
||||
{
|
||||
OnGetApiKeysId_0?.Invoke(this, new ApiResponseEventArgs(apiResponse));
|
||||
}
|
||||
|
||||
internal void ExecuteOnErrorGetApiKeysId_0(Exception exception)
|
||||
{
|
||||
OnErrorGetApiKeysId_0?.Invoke(this, new ExceptionEventArgs(exception));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// </summary>
|
||||
public sealed partial class APIKeysApi : IAPIKeysApi
|
||||
{
|
||||
private JsonSerializerOptions _jsonSerializerOptions;
|
||||
|
||||
/// <summary>
|
||||
/// The logger factory
|
||||
/// </summary>
|
||||
public ILoggerFactory LoggerFactory { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The logger
|
||||
/// </summary>
|
||||
public ILogger<APIKeysApi> Logger { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The HttpClient
|
||||
/// </summary>
|
||||
public HttpClient HttpClient { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The class containing the events
|
||||
/// </summary>
|
||||
public APIKeysApiEvents Events { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A token provider of type <see cref="ApiKeyProvider"/>
|
||||
/// </summary>
|
||||
public TokenProvider<ApiKeyToken> ApiKeyProvider { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="APIKeysApi"/> class.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public APIKeysApi(ILogger<APIKeysApi> logger, ILoggerFactory loggerFactory, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, APIKeysApiEvents aPIKeysApiEvents,
|
||||
TokenProvider<ApiKeyToken> apiKeyProvider)
|
||||
{
|
||||
_jsonSerializerOptions = jsonSerializerOptionsProvider.Options;
|
||||
LoggerFactory = loggerFactory;
|
||||
Logger = LoggerFactory.CreateLogger<APIKeysApi>();
|
||||
HttpClient = httpClient;
|
||||
Events = aPIKeysApiEvents;
|
||||
ApiKeyProvider = apiKeyProvider;
|
||||
}
|
||||
|
||||
partial void FormatGetApiKeysId_0(ref int id);
|
||||
|
||||
/// <summary>
|
||||
/// Processes the server response
|
||||
/// </summary>
|
||||
/// <param name="apiResponseLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
private void AfterGetApiKeysId_0DefaultImplementation(IGetApiKeysId_0ApiResponse apiResponseLocalVar, int id)
|
||||
{
|
||||
bool suppressDefaultLog = false;
|
||||
AfterGetApiKeysId_0(ref suppressDefaultLog, apiResponseLocalVar, id);
|
||||
if (!suppressDefaultLog)
|
||||
Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processes the server response
|
||||
/// </summary>
|
||||
/// <param name="suppressDefaultLog"></param>
|
||||
/// <param name="apiResponseLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
partial void AfterGetApiKeysId_0(ref bool suppressDefaultLog, IGetApiKeysId_0ApiResponse apiResponseLocalVar, int id);
|
||||
|
||||
/// <summary>
|
||||
/// Logs exceptions that occur while retrieving the server response
|
||||
/// </summary>
|
||||
/// <param name="exceptionLocalVar"></param>
|
||||
/// <param name="pathFormatLocalVar"></param>
|
||||
/// <param name="pathLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
private void OnErrorGetApiKeysId_0DefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, int id)
|
||||
{
|
||||
bool suppressDefaultLogLocalVar = false;
|
||||
OnErrorGetApiKeysId_0(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, id);
|
||||
if (!suppressDefaultLogLocalVar)
|
||||
Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A partial method that gives developers a way to provide customized exception handling
|
||||
/// </summary>
|
||||
/// <param name="suppressDefaultLogLocalVar"></param>
|
||||
/// <param name="exceptionLocalVar"></param>
|
||||
/// <param name="pathFormatLocalVar"></param>
|
||||
/// <param name="pathLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
partial void OnErrorGetApiKeysId_0(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, int id);
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key Show API Key
|
||||
/// </summary>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysId_0ApiResponse"/>></returns>
|
||||
public async Task<IGetApiKeysId_0ApiResponse?> GetApiKeysId_0OrDefaultAsync(int id, System.Threading.CancellationToken cancellationToken = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await GetApiKeysId_0Async(id, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key Show API Key
|
||||
/// </summary>
|
||||
/// <exception cref="ApiException">Thrown when fails to make API call</exception>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysId_0ApiResponse"/>></returns>
|
||||
public async Task<IGetApiKeysId_0ApiResponse> GetApiKeysId_0Async(int id, System.Threading.CancellationToken cancellationToken = default)
|
||||
{
|
||||
UriBuilder uriBuilderLocalVar = new UriBuilder();
|
||||
|
||||
try
|
||||
{
|
||||
FormatGetApiKeysId_0(ref id);
|
||||
|
||||
using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage())
|
||||
{
|
||||
uriBuilderLocalVar.Host = HttpClient.BaseAddress!.Host;
|
||||
uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port;
|
||||
uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme;
|
||||
uriBuilderLocalVar.Path = ClientUtils.CONTEXT_PATH + "/api_keys/{id}";
|
||||
uriBuilderLocalVar.Path = uriBuilderLocalVar.Path.Replace("%7Bid%7D", Uri.EscapeDataString(id.ToString()));
|
||||
|
||||
httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
|
||||
|
||||
httpRequestMessageLocalVar.Method = HttpMethod.Get;
|
||||
|
||||
DateTime requestedAtLocalVar = DateTime.UtcNow;
|
||||
|
||||
using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false))
|
||||
{
|
||||
string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
ILogger<GetApiKeysId_0ApiResponse> apiResponseLoggerLocalVar = LoggerFactory.CreateLogger<GetApiKeysId_0ApiResponse>();
|
||||
|
||||
GetApiKeysId_0ApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/api_keys/{id}", requestedAtLocalVar, _jsonSerializerOptions);
|
||||
|
||||
AfterGetApiKeysId_0DefaultImplementation(apiResponseLocalVar, id);
|
||||
|
||||
Events.ExecuteOnGetApiKeysId_0(apiResponseLocalVar);
|
||||
|
||||
return apiResponseLocalVar;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
OnErrorGetApiKeysId_0DefaultImplementation(e, "/api_keys/{id}", uriBuilderLocalVar.Path, id);
|
||||
Events.ExecuteOnErrorGetApiKeysId_0(e);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="GetApiKeysId_0ApiResponse"/>
|
||||
/// </summary>
|
||||
public partial class GetApiKeysId_0ApiResponse : Org.OpenAPITools.Client.ApiResponse, IGetApiKeysId_0ApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger
|
||||
/// </summary>
|
||||
public ILogger<GetApiKeysId_0ApiResponse> Logger { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="GetApiKeysId_0ApiResponse"/>
|
||||
/// </summary>
|
||||
/// <param name="logger"></param>
|
||||
/// <param name="httpRequestMessage"></param>
|
||||
/// <param name="httpResponseMessage"></param>
|
||||
/// <param name="rawContent"></param>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="requestedAt"></param>
|
||||
/// <param name="jsonSerializerOptions"></param>
|
||||
public GetApiKeysId_0ApiResponse(ILogger<GetApiKeysId_0ApiResponse> logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions)
|
||||
{
|
||||
Logger = logger;
|
||||
OnCreated(httpRequestMessage, httpResponseMessage);
|
||||
}
|
||||
|
||||
partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage);
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the response is 400 BadRequest
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool IsBadRequest => 400 == (int)StatusCode;
|
||||
|
||||
private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode)
|
||||
{
|
||||
bool suppressDefaultLog = false;
|
||||
OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode);
|
||||
if (!suppressDefaultLog)
|
||||
Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode);
|
||||
}
|
||||
|
||||
partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
+311
@@ -0,0 +1,311 @@
|
||||
// <auto-generated>
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.Json;
|
||||
using Org.OpenAPITools.Client;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Org.OpenAPITools.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// This class is registered as transient.
|
||||
/// </summary>
|
||||
public interface IApiKeysApi : IApi
|
||||
{
|
||||
/// <summary>
|
||||
/// The class containing the events
|
||||
/// </summary>
|
||||
ApiKeysApiEvents Events { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Show API Key
|
||||
/// </remarks>
|
||||
/// <exception cref="ApiException">Thrown when fails to make API call</exception>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysIdApiResponse"/>></returns>
|
||||
Task<IGetApiKeysIdApiResponse> GetApiKeysIdAsync(int id, System.Threading.CancellationToken cancellationToken = default);
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Show API Key
|
||||
/// </remarks>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysIdApiResponse"/>?></returns>
|
||||
Task<IGetApiKeysIdApiResponse?> GetApiKeysIdOrDefaultAsync(int id, System.Threading.CancellationToken cancellationToken = default);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="IGetApiKeysIdApiResponse"/>
|
||||
/// </summary>
|
||||
public interface IGetApiKeysIdApiResponse : Org.OpenAPITools.Client.IApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns true if the response is 400 BadRequest
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
bool IsBadRequest { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// </summary>
|
||||
public class ApiKeysApiEvents
|
||||
{
|
||||
/// <summary>
|
||||
/// The event raised after the server response
|
||||
/// </summary>
|
||||
public event EventHandler<ApiResponseEventArgs>? OnGetApiKeysId;
|
||||
|
||||
/// <summary>
|
||||
/// The event raised after an error querying the server
|
||||
/// </summary>
|
||||
public event EventHandler<ExceptionEventArgs>? OnErrorGetApiKeysId;
|
||||
|
||||
internal void ExecuteOnGetApiKeysId(ApiKeysApi.GetApiKeysIdApiResponse apiResponse)
|
||||
{
|
||||
OnGetApiKeysId?.Invoke(this, new ApiResponseEventArgs(apiResponse));
|
||||
}
|
||||
|
||||
internal void ExecuteOnErrorGetApiKeysId(Exception exception)
|
||||
{
|
||||
OnErrorGetApiKeysId?.Invoke(this, new ExceptionEventArgs(exception));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a collection of functions to interact with the API endpoints
|
||||
/// </summary>
|
||||
public sealed partial class ApiKeysApi : IApiKeysApi
|
||||
{
|
||||
private JsonSerializerOptions _jsonSerializerOptions;
|
||||
|
||||
/// <summary>
|
||||
/// The logger factory
|
||||
/// </summary>
|
||||
public ILoggerFactory LoggerFactory { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The logger
|
||||
/// </summary>
|
||||
public ILogger<ApiKeysApi> Logger { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The HttpClient
|
||||
/// </summary>
|
||||
public HttpClient HttpClient { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The class containing the events
|
||||
/// </summary>
|
||||
public ApiKeysApiEvents Events { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A token provider of type <see cref="ApiKeyProvider"/>
|
||||
/// </summary>
|
||||
public TokenProvider<ApiKeyToken> ApiKeyProvider { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ApiKeysApi"/> class.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public ApiKeysApi(ILogger<ApiKeysApi> logger, ILoggerFactory loggerFactory, HttpClient httpClient, JsonSerializerOptionsProvider jsonSerializerOptionsProvider, ApiKeysApiEvents apiKeysApiEvents,
|
||||
TokenProvider<ApiKeyToken> apiKeyProvider)
|
||||
{
|
||||
_jsonSerializerOptions = jsonSerializerOptionsProvider.Options;
|
||||
LoggerFactory = loggerFactory;
|
||||
Logger = LoggerFactory.CreateLogger<ApiKeysApi>();
|
||||
HttpClient = httpClient;
|
||||
Events = apiKeysApiEvents;
|
||||
ApiKeyProvider = apiKeyProvider;
|
||||
}
|
||||
|
||||
partial void FormatGetApiKeysId(ref int id);
|
||||
|
||||
/// <summary>
|
||||
/// Processes the server response
|
||||
/// </summary>
|
||||
/// <param name="apiResponseLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
private void AfterGetApiKeysIdDefaultImplementation(IGetApiKeysIdApiResponse apiResponseLocalVar, int id)
|
||||
{
|
||||
bool suppressDefaultLog = false;
|
||||
AfterGetApiKeysId(ref suppressDefaultLog, apiResponseLocalVar, id);
|
||||
if (!suppressDefaultLog)
|
||||
Logger.LogInformation("{0,-9} | {1} | {3}", (apiResponseLocalVar.DownloadedAt - apiResponseLocalVar.RequestedAt).TotalSeconds, apiResponseLocalVar.StatusCode, apiResponseLocalVar.Path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Processes the server response
|
||||
/// </summary>
|
||||
/// <param name="suppressDefaultLog"></param>
|
||||
/// <param name="apiResponseLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
partial void AfterGetApiKeysId(ref bool suppressDefaultLog, IGetApiKeysIdApiResponse apiResponseLocalVar, int id);
|
||||
|
||||
/// <summary>
|
||||
/// Logs exceptions that occur while retrieving the server response
|
||||
/// </summary>
|
||||
/// <param name="exceptionLocalVar"></param>
|
||||
/// <param name="pathFormatLocalVar"></param>
|
||||
/// <param name="pathLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
private void OnErrorGetApiKeysIdDefaultImplementation(Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, int id)
|
||||
{
|
||||
bool suppressDefaultLogLocalVar = false;
|
||||
OnErrorGetApiKeysId(ref suppressDefaultLogLocalVar, exceptionLocalVar, pathFormatLocalVar, pathLocalVar, id);
|
||||
if (!suppressDefaultLogLocalVar)
|
||||
Logger.LogError(exceptionLocalVar, "An error occurred while sending the request to the server.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A partial method that gives developers a way to provide customized exception handling
|
||||
/// </summary>
|
||||
/// <param name="suppressDefaultLogLocalVar"></param>
|
||||
/// <param name="exceptionLocalVar"></param>
|
||||
/// <param name="pathFormatLocalVar"></param>
|
||||
/// <param name="pathLocalVar"></param>
|
||||
/// <param name="id"></param>
|
||||
partial void OnErrorGetApiKeysId(ref bool suppressDefaultLogLocalVar, Exception exceptionLocalVar, string pathFormatLocalVar, string pathLocalVar, int id);
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key Show API Key
|
||||
/// </summary>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysIdApiResponse"/>></returns>
|
||||
public async Task<IGetApiKeysIdApiResponse?> GetApiKeysIdOrDefaultAsync(int id, System.Threading.CancellationToken cancellationToken = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
return await GetApiKeysIdAsync(id, cancellationToken).ConfigureAwait(false);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Show API Key Show API Key
|
||||
/// </summary>
|
||||
/// <exception cref="ApiException">Thrown when fails to make API call</exception>
|
||||
/// <param name="id">Api Key ID.</param>
|
||||
/// <param name="cancellationToken">Cancellation Token to cancel the request.</param>
|
||||
/// <returns><see cref="Task"/><<see cref="IGetApiKeysIdApiResponse"/>></returns>
|
||||
public async Task<IGetApiKeysIdApiResponse> GetApiKeysIdAsync(int id, System.Threading.CancellationToken cancellationToken = default)
|
||||
{
|
||||
UriBuilder uriBuilderLocalVar = new UriBuilder();
|
||||
|
||||
try
|
||||
{
|
||||
FormatGetApiKeysId(ref id);
|
||||
|
||||
using (HttpRequestMessage httpRequestMessageLocalVar = new HttpRequestMessage())
|
||||
{
|
||||
uriBuilderLocalVar.Host = HttpClient.BaseAddress!.Host;
|
||||
uriBuilderLocalVar.Port = HttpClient.BaseAddress.Port;
|
||||
uriBuilderLocalVar.Scheme = HttpClient.BaseAddress.Scheme;
|
||||
uriBuilderLocalVar.Path = ClientUtils.CONTEXT_PATH + "/api_keys/{id}";
|
||||
uriBuilderLocalVar.Path = uriBuilderLocalVar.Path.Replace("%7Bid%7D", Uri.EscapeDataString(id.ToString()));
|
||||
|
||||
httpRequestMessageLocalVar.RequestUri = uriBuilderLocalVar.Uri;
|
||||
|
||||
httpRequestMessageLocalVar.Method = HttpMethod.Get;
|
||||
|
||||
DateTime requestedAtLocalVar = DateTime.UtcNow;
|
||||
|
||||
using (HttpResponseMessage httpResponseMessageLocalVar = await HttpClient.SendAsync(httpRequestMessageLocalVar, cancellationToken).ConfigureAwait(false))
|
||||
{
|
||||
string responseContentLocalVar = await httpResponseMessageLocalVar.Content.ReadAsStringAsync(cancellationToken).ConfigureAwait(false);
|
||||
|
||||
ILogger<GetApiKeysIdApiResponse> apiResponseLoggerLocalVar = LoggerFactory.CreateLogger<GetApiKeysIdApiResponse>();
|
||||
|
||||
GetApiKeysIdApiResponse apiResponseLocalVar = new(apiResponseLoggerLocalVar, httpRequestMessageLocalVar, httpResponseMessageLocalVar, responseContentLocalVar, "/api_keys/{id}", requestedAtLocalVar, _jsonSerializerOptions);
|
||||
|
||||
AfterGetApiKeysIdDefaultImplementation(apiResponseLocalVar, id);
|
||||
|
||||
Events.ExecuteOnGetApiKeysId(apiResponseLocalVar);
|
||||
|
||||
return apiResponseLocalVar;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
OnErrorGetApiKeysIdDefaultImplementation(e, "/api_keys/{id}", uriBuilderLocalVar.Path, id);
|
||||
Events.ExecuteOnErrorGetApiKeysId(e);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="GetApiKeysIdApiResponse"/>
|
||||
/// </summary>
|
||||
public partial class GetApiKeysIdApiResponse : Org.OpenAPITools.Client.ApiResponse, IGetApiKeysIdApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// The logger
|
||||
/// </summary>
|
||||
public ILogger<GetApiKeysIdApiResponse> Logger { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="GetApiKeysIdApiResponse"/>
|
||||
/// </summary>
|
||||
/// <param name="logger"></param>
|
||||
/// <param name="httpRequestMessage"></param>
|
||||
/// <param name="httpResponseMessage"></param>
|
||||
/// <param name="rawContent"></param>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="requestedAt"></param>
|
||||
/// <param name="jsonSerializerOptions"></param>
|
||||
public GetApiKeysIdApiResponse(ILogger<GetApiKeysIdApiResponse> logger, System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions) : base(httpRequestMessage, httpResponseMessage, rawContent, path, requestedAt, jsonSerializerOptions)
|
||||
{
|
||||
Logger = logger;
|
||||
OnCreated(httpRequestMessage, httpResponseMessage);
|
||||
}
|
||||
|
||||
partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage);
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the response is 400 BadRequest
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool IsBadRequest => 400 == (int)StatusCode;
|
||||
|
||||
private void OnDeserializationErrorDefaultImplementation(Exception exception, HttpStatusCode httpStatusCode)
|
||||
{
|
||||
bool suppressDefaultLog = false;
|
||||
OnDeserializationError(ref suppressDefaultLog, exception, httpStatusCode);
|
||||
if (!suppressDefaultLog)
|
||||
Logger.LogError(exception, "An error occurred while deserializing the {code} response.", httpStatusCode);
|
||||
}
|
||||
|
||||
partial void OnDeserializationError(ref bool suppressDefaultLog, Exception exception, HttpStatusCode httpStatusCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
using System.Net.Http;
|
||||
|
||||
namespace Org.OpenAPITools.Api
|
||||
{
|
||||
/// <summary>
|
||||
/// Any Api client
|
||||
/// </summary>
|
||||
public interface IApi
|
||||
{
|
||||
/// <summary>
|
||||
/// The HttpClient
|
||||
/// </summary>
|
||||
HttpClient HttpClient { get; }
|
||||
}
|
||||
}
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
// <auto-generated>
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// API Exception
|
||||
/// </summary>
|
||||
public class ApiException : Exception
|
||||
{
|
||||
/// <summary>
|
||||
/// The reason the api request failed
|
||||
/// </summary>
|
||||
public string? ReasonPhrase { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The HttpStatusCode
|
||||
/// </summary>
|
||||
public System.Net.HttpStatusCode StatusCode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The raw data returned by the api
|
||||
/// </summary>
|
||||
public string RawContent { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Construct the ApiException from parts of the response
|
||||
/// </summary>
|
||||
/// <param name="reasonPhrase"></param>
|
||||
/// <param name="statusCode"></param>
|
||||
/// <param name="rawContent"></param>
|
||||
public ApiException(string? reasonPhrase, System.Net.HttpStatusCode statusCode, string rawContent) : base(reasonPhrase ?? rawContent)
|
||||
{
|
||||
ReasonPhrase = reasonPhrase;
|
||||
|
||||
StatusCode = statusCode;
|
||||
|
||||
RawContent = rawContent;
|
||||
}
|
||||
}
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
using System;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Org.OpenAPITools.Api;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// An IApiFactory interface
|
||||
/// </summary>
|
||||
public interface IApiFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// A method to create an IApi of type IResult
|
||||
/// </summary>
|
||||
/// <typeparam name="IResult"></typeparam>
|
||||
/// <returns></returns>
|
||||
IResult Create<IResult>() where IResult : IApi;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An ApiFactory
|
||||
/// </summary>
|
||||
public class ApiFactory : IApiFactory
|
||||
{
|
||||
/// <summary>
|
||||
/// The service provider
|
||||
/// </summary>
|
||||
public IServiceProvider Services { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ApiFactory"/> class.
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
public ApiFactory(IServiceProvider services)
|
||||
{
|
||||
Services = services;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A method to create an IApi of type IResult
|
||||
/// </summary>
|
||||
/// <typeparam name="IResult"></typeparam>
|
||||
/// <returns></returns>
|
||||
public IResult Create<IResult>() where IResult : IApi
|
||||
{
|
||||
return Services.GetRequiredService<IResult>();
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
// <auto-generated>
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// A token constructed from an apiKey.
|
||||
/// </summary>
|
||||
public class ApiKeyToken : TokenBase
|
||||
{
|
||||
private string _raw;
|
||||
|
||||
/// <summary>
|
||||
/// The header that this token will be used with.
|
||||
/// </summary>
|
||||
public ClientUtils.ApiKeyHeader Header { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructs an ApiKeyToken object.
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="header"></param>
|
||||
/// <param name="prefix"></param>
|
||||
/// <param name="timeout"></param>
|
||||
public ApiKeyToken(string value, ClientUtils.ApiKeyHeader header, string prefix = "Bearer ", TimeSpan? timeout = null) : base(timeout)
|
||||
{
|
||||
Header = header;
|
||||
_raw = $"{ prefix }{ value }";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Places the token in the header.
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
public virtual void UseInHeader(global::System.Net.Http.HttpRequestMessage request)
|
||||
{
|
||||
request.Headers.Add(ClientUtils.ApiKeyHeaderToString(Header), _raw);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Places the token in the query.
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="uriBuilder"></param>
|
||||
/// <param name="parseQueryString"></param>
|
||||
public virtual void UseInQuery(global::System.Net.Http.HttpRequestMessage request, UriBuilder uriBuilder, System.Collections.Specialized.NameValueCollection parseQueryString)
|
||||
{
|
||||
parseQueryString[ClientUtils.ApiKeyHeaderToString(Header)] = Uri.EscapeDataString(_raw).ToString()!;
|
||||
}
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Useful for tracking server health
|
||||
/// </summary>
|
||||
public class ApiResponseEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The ApiResponse
|
||||
/// </summary>
|
||||
public ApiResponse ApiResponse { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The ApiResponseEventArgs
|
||||
/// </summary>
|
||||
/// <param name="apiResponse"></param>
|
||||
public ApiResponseEventArgs(ApiResponse apiResponse)
|
||||
{
|
||||
ApiResponse = apiResponse;
|
||||
}
|
||||
}
|
||||
}
|
||||
+153
@@ -0,0 +1,153 @@
|
||||
// <auto-generated>
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Net;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides a non-generic contract for the ApiResponse wrapper.
|
||||
/// </summary>
|
||||
public partial interface IApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// The IsSuccessStatusCode from the api response
|
||||
/// </summary>
|
||||
bool IsSuccessStatusCode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the status code (HTTP status code)
|
||||
/// </summary>
|
||||
/// <value>The status code.</value>
|
||||
HttpStatusCode StatusCode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The raw content of this response.
|
||||
/// </summary>
|
||||
string RawContent { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The DateTime when the request was retrieved.
|
||||
/// </summary>
|
||||
DateTime DownloadedAt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The headers contained in the api response
|
||||
/// </summary>
|
||||
System.Net.Http.Headers.HttpResponseHeaders Headers { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The path used when making the request.
|
||||
/// </summary>
|
||||
string Path { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The reason phrase contained in the api response
|
||||
/// </summary>
|
||||
string? ReasonPhrase { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The DateTime when the request was sent.
|
||||
/// </summary>
|
||||
DateTime RequestedAt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The Uri used when making the request.
|
||||
/// </summary>
|
||||
Uri? RequestUri { get; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// API Response
|
||||
/// </summary>
|
||||
public partial class ApiResponse : IApiResponse
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the status code (HTTP status code)
|
||||
/// </summary>
|
||||
/// <value>The status code.</value>
|
||||
public HttpStatusCode StatusCode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The raw data
|
||||
/// </summary>
|
||||
public string RawContent { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// The IsSuccessStatusCode from the api response
|
||||
/// </summary>
|
||||
public bool IsSuccessStatusCode { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The reason phrase contained in the api response
|
||||
/// </summary>
|
||||
public string? ReasonPhrase { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The headers contained in the api response
|
||||
/// </summary>
|
||||
public System.Net.Http.Headers.HttpResponseHeaders Headers { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The DateTime when the request was retrieved.
|
||||
/// </summary>
|
||||
public DateTime DownloadedAt { get; } = DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// The DateTime when the request was sent.
|
||||
/// </summary>
|
||||
public DateTime RequestedAt { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The path used when making the request.
|
||||
/// </summary>
|
||||
public string Path { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The Uri used when making the request.
|
||||
/// </summary>
|
||||
public Uri? RequestUri { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The <see cref="System.Text.Json.JsonSerializerOptions"/>
|
||||
/// </summary>
|
||||
protected System.Text.Json.JsonSerializerOptions _jsonSerializerOptions;
|
||||
|
||||
/// <summary>
|
||||
/// Construct the response using an HttpResponseMessage
|
||||
/// </summary>
|
||||
/// <param name="httpRequestMessage"></param>
|
||||
/// <param name="httpResponseMessage"></param>
|
||||
/// <param name="rawContent"></param>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="requestedAt"></param>
|
||||
/// <param name="jsonSerializerOptions"></param>
|
||||
public ApiResponse(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage, string rawContent, string path, DateTime requestedAt, System.Text.Json.JsonSerializerOptions jsonSerializerOptions)
|
||||
{
|
||||
StatusCode = httpResponseMessage.StatusCode;
|
||||
Headers = httpResponseMessage.Headers;
|
||||
IsSuccessStatusCode = httpResponseMessage.IsSuccessStatusCode;
|
||||
ReasonPhrase = httpResponseMessage.ReasonPhrase;
|
||||
RawContent = rawContent;
|
||||
Path = path;
|
||||
RequestUri = httpRequestMessage.RequestUri;
|
||||
RequestedAt = requestedAt;
|
||||
_jsonSerializerOptions = jsonSerializerOptions;
|
||||
OnCreated(httpRequestMessage, httpResponseMessage);
|
||||
}
|
||||
|
||||
partial void OnCreated(global::System.Net.Http.HttpRequestMessage httpRequestMessage, System.Net.Http.HttpResponseMessage httpResponseMessage);
|
||||
}
|
||||
}
|
||||
+342
@@ -0,0 +1,342 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
[assembly: InternalsVisibleTo("Org.OpenAPITools.Test")]
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Utility functions providing some benefit to API client consumers.
|
||||
/// </summary>
|
||||
public static class ClientUtils
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// A delegate for events.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <returns></returns>
|
||||
public delegate void EventHandler<T>(object sender, T e) where T : EventArgs;
|
||||
|
||||
/// <summary>
|
||||
/// An enum of headers
|
||||
/// </summary>
|
||||
public enum ApiKeyHeader
|
||||
{
|
||||
/// <summary>
|
||||
/// The XFilesAPIKey header
|
||||
/// </summary>
|
||||
XFilesAPIKey
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converte an ApiKeyHeader to a string
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="System.ComponentModel.InvalidEnumArgumentException"></exception>
|
||||
public static string ApiKeyHeaderToString(ApiKeyHeader value)
|
||||
{
|
||||
return value switch
|
||||
{
|
||||
ApiKeyHeader.XFilesAPIKey => "XFilesAPIKey",
|
||||
_ => throw new System.ComponentModel.InvalidEnumArgumentException(nameof(value), (int)value, typeof(ApiKeyHeader)),
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true when deserialization succeeds.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="json"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <param name="result"></param>
|
||||
/// <returns></returns>
|
||||
public static bool TryDeserialize<T>(string json, JsonSerializerOptions options, [global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T? result)
|
||||
{
|
||||
try
|
||||
{
|
||||
result = JsonSerializer.Deserialize<T>(json, options);
|
||||
return result != null;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
result = default;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true when deserialization succeeds.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <param name="result"></param>
|
||||
/// <returns></returns>
|
||||
public static bool TryDeserialize<T>(ref Utf8JsonReader reader, JsonSerializerOptions options, [global::System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out T? result)
|
||||
{
|
||||
try
|
||||
{
|
||||
result = JsonSerializer.Deserialize<T>(ref reader, options);
|
||||
return result != null;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
result = default;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sanitize filename by removing the path
|
||||
/// </summary>
|
||||
/// <param name="filename">Filename</param>
|
||||
/// <returns>Filename</returns>
|
||||
public static string SanitizeFilename(string filename)
|
||||
{
|
||||
Match match = Regex.Match(filename, @".*[/\\](.*)$");
|
||||
return match.Success ? match.Groups[1].Value : filename;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime.
|
||||
/// If parameter is a list, join the list with ",".
|
||||
/// Otherwise just return the string.
|
||||
/// </summary>
|
||||
/// <param name="obj">The parameter (header, path, query, form).</param>
|
||||
/// <param name="format">The DateTime serialization format.</param>
|
||||
/// <returns>Formatted string.</returns>
|
||||
public static string? ParameterToString(object? obj, string? format = ISO8601_DATETIME_FORMAT)
|
||||
{
|
||||
if (obj is DateTime dateTime)
|
||||
// Return a formatted date string - Can be customized with Configuration.DateTimeFormat
|
||||
// Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
|
||||
// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
|
||||
// For example: 2009-06-15T13:45:30.0000000
|
||||
return dateTime.ToString(format);
|
||||
if (obj is DateTimeOffset dateTimeOffset)
|
||||
// Return a formatted date string - Can be customized with Configuration.DateTimeFormat
|
||||
// Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o")
|
||||
// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8
|
||||
// For example: 2009-06-15T13:45:30.0000000
|
||||
return dateTimeOffset.ToString(format);
|
||||
if (obj is bool boolean)
|
||||
return boolean
|
||||
? "true"
|
||||
: "false";
|
||||
if (obj is ICollection collection)
|
||||
{
|
||||
List<string?> entries = new();
|
||||
foreach (var entry in collection)
|
||||
entries.Add(ParameterToString(entry));
|
||||
return string.Join(",", entries);
|
||||
}
|
||||
|
||||
return Convert.ToString(obj, System.Globalization.CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// URL encode a string
|
||||
/// Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50
|
||||
/// </summary>
|
||||
/// <param name="input">string to be URL encoded</param>
|
||||
/// <returns>Byte array</returns>
|
||||
public static string UrlEncode(string input)
|
||||
{
|
||||
const int maxLength = 32766;
|
||||
|
||||
if (input == null)
|
||||
{
|
||||
throw new ArgumentNullException("input");
|
||||
}
|
||||
|
||||
if (input.Length <= maxLength)
|
||||
{
|
||||
return Uri.EscapeDataString(input);
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder(input.Length * 2);
|
||||
int index = 0;
|
||||
|
||||
while (index < input.Length)
|
||||
{
|
||||
int length = Math.Min(input.Length - index, maxLength);
|
||||
string subString = input.Substring(index, length);
|
||||
|
||||
sb.Append(Uri.EscapeDataString(subString));
|
||||
index += subString.Length;
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Encode string in base64 format.
|
||||
/// </summary>
|
||||
/// <param name="text">string to be encoded.</param>
|
||||
/// <returns>Encoded string.</returns>
|
||||
public static string Base64Encode(string text)
|
||||
{
|
||||
return Convert.ToBase64String(global::System.Text.Encoding.UTF8.GetBytes(text));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Convert stream to byte array
|
||||
/// </summary>
|
||||
/// <param name="inputStream">Input stream to be converted</param>
|
||||
/// <returns>Byte array</returns>
|
||||
public static byte[] ReadAsBytes(Stream inputStream)
|
||||
{
|
||||
using (var ms = new MemoryStream())
|
||||
{
|
||||
inputStream.CopyTo(ms);
|
||||
return ms.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Select the Content-Type header's value from the given content-type array:
|
||||
/// if JSON type exists in the given array, use it;
|
||||
/// otherwise use the first one defined in 'consumes'
|
||||
/// </summary>
|
||||
/// <param name="contentTypes">The Content-Type array to select from.</param>
|
||||
/// <returns>The Content-Type header to use.</returns>
|
||||
public static string? SelectHeaderContentType(string[] contentTypes)
|
||||
{
|
||||
if (contentTypes.Length == 0)
|
||||
return null;
|
||||
|
||||
foreach (var contentType in contentTypes)
|
||||
{
|
||||
if (IsJsonMime(contentType))
|
||||
return contentType;
|
||||
}
|
||||
|
||||
return contentTypes[0]; // use the first content type specified in 'consumes'
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Select the Accept header's value from the given accepts array:
|
||||
/// if JSON exists in the given array, use it;
|
||||
/// otherwise use all of them (joining into a string)
|
||||
/// </summary>
|
||||
/// <param name="accepts">The accepts array to select from.</param>
|
||||
/// <returns>The Accept header to use.</returns>
|
||||
public static string? SelectHeaderAccept(string[] accepts)
|
||||
{
|
||||
if (accepts.Length == 0)
|
||||
return null;
|
||||
|
||||
if (accepts.Contains("application/json", StringComparer.OrdinalIgnoreCase))
|
||||
return "application/json";
|
||||
|
||||
return string.Join(",", accepts);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Provides a case-insensitive check that a provided content type is a known JSON-like content type.
|
||||
/// </summary>
|
||||
public static readonly Regex JsonRegex = new Regex("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
|
||||
|
||||
/// <summary>
|
||||
/// Check if the given MIME is a JSON MIME.
|
||||
/// JSON MIME examples:
|
||||
/// application/json
|
||||
/// application/json; charset=UTF8
|
||||
/// APPLICATION/JSON
|
||||
/// application/vnd.company+json
|
||||
/// </summary>
|
||||
/// <param name="mime">MIME</param>
|
||||
/// <returns>Returns True if MIME type is json.</returns>
|
||||
public static bool IsJsonMime(string mime)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(mime)) return false;
|
||||
|
||||
return JsonRegex.IsMatch(mime) || mime.Equals("application/json-patch+json");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the discriminator
|
||||
/// </summary>
|
||||
/// <param name="utf8JsonReader"></param>
|
||||
/// <param name="discriminator"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="JsonException"></exception>
|
||||
public static string? GetDiscriminator(Utf8JsonReader utf8JsonReader, string discriminator)
|
||||
{
|
||||
int currentDepth = utf8JsonReader.CurrentDepth;
|
||||
|
||||
if (utf8JsonReader.TokenType != JsonTokenType.StartObject && utf8JsonReader.TokenType != JsonTokenType.StartArray)
|
||||
throw new JsonException();
|
||||
|
||||
JsonTokenType startingTokenType = utf8JsonReader.TokenType;
|
||||
|
||||
while (utf8JsonReader.Read())
|
||||
{
|
||||
if (startingTokenType == JsonTokenType.StartObject && utf8JsonReader.TokenType == JsonTokenType.EndObject && currentDepth == utf8JsonReader.CurrentDepth)
|
||||
break;
|
||||
|
||||
if (startingTokenType == JsonTokenType.StartArray && utf8JsonReader.TokenType == JsonTokenType.EndArray && currentDepth == utf8JsonReader.CurrentDepth)
|
||||
break;
|
||||
|
||||
if (utf8JsonReader.TokenType == JsonTokenType.PropertyName && currentDepth == utf8JsonReader.CurrentDepth - 1)
|
||||
{
|
||||
string? localVarJsonPropertyName = utf8JsonReader.GetString();
|
||||
utf8JsonReader.Read();
|
||||
|
||||
if (localVarJsonPropertyName != null && localVarJsonPropertyName.Equals(discriminator))
|
||||
return utf8JsonReader.GetString();
|
||||
}
|
||||
}
|
||||
|
||||
throw new JsonException("The specified discriminator was not found.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The base path of the API
|
||||
/// </summary>
|
||||
public const string BASE_ADDRESS = "http://app.files.com/api/rest/v1";
|
||||
|
||||
/// <summary>
|
||||
/// The scheme of the API
|
||||
/// </summary>
|
||||
public const string SCHEME = "http";
|
||||
|
||||
/// <summary>
|
||||
/// The context path of the API
|
||||
/// </summary>
|
||||
public const string CONTEXT_PATH = "/api/rest/v1";
|
||||
|
||||
/// <summary>
|
||||
/// The host of the API
|
||||
/// </summary>
|
||||
public const string HOST = "app.files.com";
|
||||
|
||||
/// <summary>
|
||||
/// The format to use for DateTime serialization
|
||||
/// </summary>
|
||||
public const string ISO8601_DATETIME_FORMAT = "o";
|
||||
}
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// <auto-generated>
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// A class containing a CookieContainer
|
||||
/// </summary>
|
||||
public sealed class CookieContainer
|
||||
{
|
||||
/// <summary>
|
||||
/// The collection of tokens
|
||||
/// </summary>
|
||||
public System.Net.CookieContainer Value { get; } = new System.Net.CookieContainer();
|
||||
}
|
||||
}
|
||||
+62
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Formatter for 'date' openapi formats ss defined by full-date - RFC3339
|
||||
/// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
|
||||
/// </summary>
|
||||
public class DateOnlyJsonConverter : JsonConverter<DateOnly>
|
||||
{
|
||||
/// <summary>
|
||||
/// The formats used to deserialize the date
|
||||
/// </summary>
|
||||
public static string[] Formats { get; } = {
|
||||
"yyyy'-'MM'-'dd",
|
||||
"yyyyMMdd"
|
||||
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Returns a DateOnly from the Json object
|
||||
/// </summary>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="typeToConvert"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <returns></returns>
|
||||
public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
|
||||
if (reader.TokenType == JsonTokenType.Null)
|
||||
throw new NotSupportedException();
|
||||
|
||||
string value = reader.GetString()!;
|
||||
|
||||
foreach(string format in Formats)
|
||||
if (DateOnly.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateOnly result))
|
||||
return result;
|
||||
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the DateOnly to the json writer
|
||||
/// </summary>
|
||||
/// <param name="writer"></param>
|
||||
/// <param name="dateOnlyValue"></param>
|
||||
/// <param name="options"></param>
|
||||
public override void Write(Utf8JsonWriter writer, DateOnly dateOnlyValue, JsonSerializerOptions options) =>
|
||||
writer.WriteStringValue(dateOnlyValue.ToString("yyyy'-'MM'-'dd", CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Formatter for 'date' openapi formats ss defined by full-date - RFC3339
|
||||
/// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
|
||||
/// </summary>
|
||||
public class DateOnlyNullableJsonConverter : JsonConverter<DateOnly?>
|
||||
{
|
||||
/// <summary>
|
||||
/// The formats used to deserialize the date
|
||||
/// </summary>
|
||||
public static string[] Formats { get; } = {
|
||||
"yyyy'-'MM'-'dd",
|
||||
"yyyyMMdd"
|
||||
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Returns a DateOnly from the Json object
|
||||
/// </summary>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="typeToConvert"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <returns></returns>
|
||||
public override DateOnly? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
|
||||
if (reader.TokenType == JsonTokenType.Null)
|
||||
return null;
|
||||
|
||||
string value = reader.GetString()!;
|
||||
|
||||
foreach(string format in Formats)
|
||||
if (DateOnly.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateOnly result))
|
||||
return result;
|
||||
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the DateOnly to the json writer
|
||||
/// </summary>
|
||||
/// <param name="writer"></param>
|
||||
/// <param name="dateOnlyValue"></param>
|
||||
/// <param name="options"></param>
|
||||
public override void Write(Utf8JsonWriter writer, DateOnly? dateOnlyValue, JsonSerializerOptions options)
|
||||
{
|
||||
if (dateOnlyValue == null)
|
||||
writer.WriteNullValue();
|
||||
else
|
||||
writer.WriteStringValue(dateOnlyValue.Value.ToString("yyyy'-'MM'-'dd", CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
}
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Formatter for 'date-time' openapi formats ss defined by full-date - RFC3339
|
||||
/// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
|
||||
/// </summary>
|
||||
public class DateTimeJsonConverter : JsonConverter<DateTime>
|
||||
{
|
||||
/// <summary>
|
||||
/// The formats used to deserialize the date
|
||||
/// </summary>
|
||||
public static string[] Formats { get; } = {
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ssK",
|
||||
"yyyyMMddTHHmmss.fffffffK",
|
||||
"yyyyMMddTHHmmss.ffffffK",
|
||||
"yyyyMMddTHHmmss.fffffK",
|
||||
"yyyyMMddTHHmmss.ffffK",
|
||||
"yyyyMMddTHHmmss.fffK",
|
||||
"yyyyMMddTHHmmss.ffK",
|
||||
"yyyyMMddTHHmmss.fK",
|
||||
"yyyyMMddTHHmmssK",
|
||||
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Returns a DateTime from the Json object
|
||||
/// </summary>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="typeToConvert"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <returns></returns>
|
||||
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
|
||||
if (reader.TokenType == JsonTokenType.Null)
|
||||
throw new NotSupportedException();
|
||||
|
||||
string value = reader.GetString()!;
|
||||
|
||||
foreach(string format in Formats)
|
||||
if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateTime result))
|
||||
return result;
|
||||
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the DateTime to the json writer
|
||||
/// </summary>
|
||||
/// <param name="writer"></param>
|
||||
/// <param name="dateTimeValue"></param>
|
||||
/// <param name="options"></param>
|
||||
public override void Write(Utf8JsonWriter writer, DateTime dateTimeValue, JsonSerializerOptions options) =>
|
||||
writer.WriteStringValue(dateTimeValue.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK", CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Formatter for 'date-time' openapi formats ss defined by full-date - RFC3339
|
||||
/// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types
|
||||
/// </summary>
|
||||
public class DateTimeNullableJsonConverter : JsonConverter<DateTime?>
|
||||
{
|
||||
/// <summary>
|
||||
/// The formats used to deserialize the date
|
||||
/// </summary>
|
||||
public static string[] Formats { get; } = {
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'ffK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fK",
|
||||
"yyyy'-'MM'-'dd'T'HH':'mm':'ssK",
|
||||
"yyyyMMddTHHmmss.fffffffK",
|
||||
"yyyyMMddTHHmmss.ffffffK",
|
||||
"yyyyMMddTHHmmss.fffffK",
|
||||
"yyyyMMddTHHmmss.ffffK",
|
||||
"yyyyMMddTHHmmss.fffK",
|
||||
"yyyyMMddTHHmmss.ffK",
|
||||
"yyyyMMddTHHmmss.fK",
|
||||
"yyyyMMddTHHmmssK",
|
||||
|
||||
};
|
||||
|
||||
/// <summary>
|
||||
/// Returns a DateTime from the Json object
|
||||
/// </summary>
|
||||
/// <param name="reader"></param>
|
||||
/// <param name="typeToConvert"></param>
|
||||
/// <param name="options"></param>
|
||||
/// <returns></returns>
|
||||
public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
|
||||
if (reader.TokenType == JsonTokenType.Null)
|
||||
return null;
|
||||
|
||||
string value = reader.GetString()!;
|
||||
|
||||
foreach(string format in Formats)
|
||||
if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out DateTime result))
|
||||
return result;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Writes the DateTime to the json writer
|
||||
/// </summary>
|
||||
/// <param name="writer"></param>
|
||||
/// <param name="dateTimeValue"></param>
|
||||
/// <param name="options"></param>
|
||||
public override void Write(Utf8JsonWriter writer, DateTime? dateTimeValue, JsonSerializerOptions options)
|
||||
{
|
||||
if (dateTimeValue == null)
|
||||
writer.WriteNullValue();
|
||||
else
|
||||
writer.WriteStringValue(dateTimeValue.Value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK", CultureInfo.InvariantCulture));
|
||||
}
|
||||
}
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
using System;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Useful for tracking server health
|
||||
/// </summary>
|
||||
public class ExceptionEventArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// The ApiResponse
|
||||
/// </summary>
|
||||
public Exception Exception { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The ExcepetionEventArgs
|
||||
/// </summary>
|
||||
/// <param name="exception"></param>
|
||||
public ExceptionEventArgs(Exception exception)
|
||||
{
|
||||
Exception = exception;
|
||||
}
|
||||
}
|
||||
}
|
||||
+138
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Net.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Org.OpenAPITools.Api;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides hosting configuration for Org.OpenAPITools
|
||||
/// </summary>
|
||||
public class HostConfiguration
|
||||
{
|
||||
private readonly IServiceCollection _services;
|
||||
private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions();
|
||||
|
||||
internal bool HttpClientsAdded { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates the class
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
public HostConfiguration(IServiceCollection services)
|
||||
{
|
||||
_services = services;
|
||||
_jsonOptions.Converters.Add(new JsonStringEnumConverter());
|
||||
_jsonOptions.Converters.Add(new DateTimeJsonConverter());
|
||||
_jsonOptions.Converters.Add(new DateTimeNullableJsonConverter());
|
||||
_jsonOptions.Converters.Add(new DateOnlyJsonConverter());
|
||||
_jsonOptions.Converters.Add(new DateOnlyNullableJsonConverter());
|
||||
JsonSerializerOptionsProvider jsonSerializerOptionsProvider = new(_jsonOptions);
|
||||
_services.AddSingleton(jsonSerializerOptionsProvider);
|
||||
_services.AddSingleton<IApiFactory, ApiFactory>();
|
||||
_services.AddSingleton<APIKEYSApiEvents>();
|
||||
_services.AddTransient<IAPIKEYSApi, APIKEYSApi>();
|
||||
_services.AddSingleton<APIKeysApiEvents>();
|
||||
_services.AddTransient<IAPIKeysApi, APIKeysApi>();
|
||||
_services.AddSingleton<ApiKeysApiEvents>();
|
||||
_services.AddTransient<IApiKeysApi, ApiKeysApi>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configures the HttpClients.
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="builder"></param>
|
||||
/// <returns></returns>
|
||||
public HostConfiguration AddApiHttpClients
|
||||
(
|
||||
Action<HttpClient>? client = null, Action<IHttpClientBuilder>? builder = null)
|
||||
{
|
||||
if (client == null)
|
||||
client = c => c.BaseAddress = new Uri(ClientUtils.BASE_ADDRESS);
|
||||
|
||||
List<IHttpClientBuilder> builders = new List<IHttpClientBuilder>();
|
||||
|
||||
builders.Add(_services.AddHttpClient<IAPIKEYSApi, APIKEYSApi>(client));
|
||||
builders.Add(_services.AddHttpClient<IAPIKeysApi, APIKeysApi>(client));
|
||||
builders.Add(_services.AddHttpClient<IApiKeysApi, ApiKeysApi>(client));
|
||||
|
||||
if (builder != null)
|
||||
foreach (IHttpClientBuilder instance in builders)
|
||||
builder(instance);
|
||||
|
||||
HttpClientsAdded = true;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configures the JsonSerializerSettings
|
||||
/// </summary>
|
||||
/// <param name="options"></param>
|
||||
/// <returns></returns>
|
||||
public HostConfiguration ConfigureJsonOptions(Action<JsonSerializerOptions> options)
|
||||
{
|
||||
options(_jsonOptions);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds tokens to your IServiceCollection
|
||||
/// </summary>
|
||||
/// <typeparam name="TTokenBase"></typeparam>
|
||||
/// <param name="token"></param>
|
||||
/// <returns></returns>
|
||||
public HostConfiguration AddTokens<TTokenBase>(TTokenBase token) where TTokenBase : TokenBase
|
||||
{
|
||||
return AddTokens(new TTokenBase[]{ token });
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds tokens to your IServiceCollection
|
||||
/// </summary>
|
||||
/// <typeparam name="TTokenBase"></typeparam>
|
||||
/// <param name="tokens"></param>
|
||||
/// <returns></returns>
|
||||
public HostConfiguration AddTokens<TTokenBase>(IEnumerable<TTokenBase> tokens) where TTokenBase : TokenBase
|
||||
{
|
||||
TokenContainer<TTokenBase> container = new TokenContainer<TTokenBase>(tokens);
|
||||
_services.AddSingleton(services => container);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a token provider to your IServiceCollection
|
||||
/// </summary>
|
||||
/// <typeparam name="TTokenProvider"></typeparam>
|
||||
/// <typeparam name="TTokenBase"></typeparam>
|
||||
/// <returns></returns>
|
||||
public HostConfiguration UseProvider<TTokenProvider, TTokenBase>()
|
||||
where TTokenProvider : TokenProvider<TTokenBase>
|
||||
where TTokenBase : TokenBase
|
||||
{
|
||||
_services.AddSingleton<TTokenProvider>();
|
||||
_services.AddSingleton<TokenProvider<TTokenBase>>(services => services.GetRequiredService<TTokenProvider>());
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// <auto-generated>
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides the JsonSerializerOptions
|
||||
/// </summary>
|
||||
public class JsonSerializerOptionsProvider
|
||||
{
|
||||
/// <summary>
|
||||
/// the JsonSerializerOptions
|
||||
/// </summary>
|
||||
public JsonSerializerOptions Options { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a JsonSerializerOptionsProvider
|
||||
/// </summary>
|
||||
public JsonSerializerOptionsProvider(JsonSerializerOptions options)
|
||||
{
|
||||
Options = options;
|
||||
}
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
// <auto-generated>
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// A wrapper for operation parameters which are not required
|
||||
/// </summary>
|
||||
public struct Option<TType>
|
||||
{
|
||||
/// <summary>
|
||||
/// The value to send to the server
|
||||
/// </summary>
|
||||
public TType Value { get; }
|
||||
|
||||
/// <summary>
|
||||
/// When true the value will be sent to the server
|
||||
/// </summary>
|
||||
internal bool IsSet { get; }
|
||||
|
||||
/// <summary>
|
||||
/// A wrapper for operation parameters which are not required
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
public Option(TType value)
|
||||
{
|
||||
IsSet = true;
|
||||
Value = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Implicitly converts this option to the contained type
|
||||
/// </summary>
|
||||
/// <param name="option"></param>
|
||||
public static implicit operator TType(Option<TType> option) => option.Value;
|
||||
|
||||
/// <summary>
|
||||
/// Implicitly converts the provided value to an Option
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
public static implicit operator Option<TType>(TType value) => new Option<TType>(value);
|
||||
}
|
||||
}
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
// <auto-generated>
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Channels;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides a token to the api clients. Tokens will be rate limited based on the provided TimeSpan.
|
||||
/// </summary>
|
||||
/// <typeparam name="TTokenBase"></typeparam>
|
||||
public class RateLimitProvider<TTokenBase> : TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||
{
|
||||
internal Dictionary<string, Channel<TTokenBase>> AvailableTokens { get; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a ThrottledTokenProvider. Your tokens will be rate limited based on the token's timeout.
|
||||
/// </summary>
|
||||
/// <param name="container"></param>
|
||||
public RateLimitProvider(TokenContainer<TTokenBase> container) : base(container.Tokens)
|
||||
{
|
||||
foreach(TTokenBase token in _tokens)
|
||||
token.StartTimer(token.Timeout ?? TimeSpan.FromMilliseconds(40));
|
||||
|
||||
if (container is TokenContainer<ApiKeyToken> apiKeyTokenContainer)
|
||||
{
|
||||
string[] headers = apiKeyTokenContainer.Tokens.Select(t => ClientUtils.ApiKeyHeaderToString(t.Header)).Distinct().ToArray();
|
||||
|
||||
foreach (string header in headers)
|
||||
{
|
||||
BoundedChannelOptions options = new BoundedChannelOptions(apiKeyTokenContainer.Tokens.Count(t => ClientUtils.ApiKeyHeaderToString(t.Header).Equals(header)))
|
||||
{
|
||||
FullMode = BoundedChannelFullMode.DropWrite
|
||||
};
|
||||
|
||||
AvailableTokens.Add(header, Channel.CreateBounded<TTokenBase>(options));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
BoundedChannelOptions options = new BoundedChannelOptions(_tokens.Length)
|
||||
{
|
||||
FullMode = BoundedChannelFullMode.DropWrite
|
||||
};
|
||||
|
||||
AvailableTokens.Add(string.Empty, Channel.CreateBounded<TTokenBase>(options));
|
||||
}
|
||||
|
||||
foreach(Channel<TTokenBase> tokens in AvailableTokens.Values)
|
||||
for (int i = 0; i < _tokens.Length; i++)
|
||||
_tokens[i].TokenBecameAvailable += ((sender) => tokens.Writer.TryWrite((TTokenBase) sender));
|
||||
}
|
||||
|
||||
internal override async System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default)
|
||||
{
|
||||
if (!AvailableTokens.TryGetValue(header, out Channel<TTokenBase>? tokens))
|
||||
throw new KeyNotFoundException($"Could not locate a token for header '{header}'.");
|
||||
|
||||
return await tokens.Reader.ReadAsync(cancellation).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
// <auto-generated>
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// The base for all tokens.
|
||||
/// </summary>
|
||||
public abstract class TokenBase
|
||||
{
|
||||
private DateTime _nextAvailable = DateTime.UtcNow;
|
||||
private object _nextAvailableLock = new object();
|
||||
private readonly System.Timers.Timer _timer = new System.Timers.Timer();
|
||||
|
||||
|
||||
internal TimeSpan? Timeout { get; set; }
|
||||
internal delegate void TokenBecameAvailableEventHandler(object sender);
|
||||
internal event TokenBecameAvailableEventHandler? TokenBecameAvailable;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initialize a TokenBase object.
|
||||
/// </summary>
|
||||
/// <param name="timeout"></param>
|
||||
internal TokenBase(TimeSpan? timeout = null)
|
||||
{
|
||||
Timeout = timeout;
|
||||
|
||||
if (Timeout != null)
|
||||
StartTimer(Timeout.Value);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Starts the token's timer
|
||||
/// </summary>
|
||||
/// <param name="timeout"></param>
|
||||
internal void StartTimer(TimeSpan timeout)
|
||||
{
|
||||
Timeout = timeout;
|
||||
_timer.Interval = Timeout.Value.TotalMilliseconds;
|
||||
_timer.Elapsed += OnTimer;
|
||||
_timer.AutoReset = true;
|
||||
_timer.Start();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true while the token is rate limited.
|
||||
/// </summary>
|
||||
public bool IsRateLimited => _nextAvailable > DateTime.UtcNow;
|
||||
|
||||
/// <summary>
|
||||
/// Triggered when the server returns status code TooManyRequests
|
||||
/// Once triggered the local timeout will be extended an arbitrary length of time.
|
||||
/// </summary>
|
||||
public void BeginRateLimit()
|
||||
{
|
||||
lock(_nextAvailableLock)
|
||||
_nextAvailable = DateTime.UtcNow.AddSeconds(5);
|
||||
}
|
||||
|
||||
private void OnTimer(object? sender, System.Timers.ElapsedEventArgs e)
|
||||
{
|
||||
if (TokenBecameAvailable != null && !IsRateLimited)
|
||||
TokenBecameAvailable.Invoke(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
// <auto-generated>
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Org.OpenAPITools.Client
|
||||
{
|
||||
/// <summary>
|
||||
/// A container for a collection of tokens.
|
||||
/// </summary>
|
||||
/// <typeparam name="TTokenBase"></typeparam>
|
||||
public sealed class TokenContainer<TTokenBase> where TTokenBase : TokenBase
|
||||
{
|
||||
/// <summary>
|
||||
/// The collection of tokens
|
||||
/// </summary>
|
||||
public List<TTokenBase> Tokens { get; } = new List<TTokenBase>();
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a TokenContainer
|
||||
/// </summary>
|
||||
public TokenContainer()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a TokenContainer
|
||||
/// </summary>
|
||||
/// <param name="tokens"></param>
|
||||
public TokenContainer(global::System.Collections.Generic.IEnumerable<TTokenBase> tokens)
|
||||
{
|
||||
Tokens = tokens.ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
// <auto-generated>
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
using Org.OpenAPITools.Client;
|
||||
|
||||
namespace Org.OpenAPITools
|
||||
{
|
||||
/// <summary>
|
||||
/// A class which will provide tokens.
|
||||
/// </summary>
|
||||
public abstract class TokenProvider<TTokenBase> where TTokenBase : TokenBase
|
||||
{
|
||||
/// <summary>
|
||||
/// The array of tokens.
|
||||
/// </summary>
|
||||
protected TTokenBase[] _tokens;
|
||||
|
||||
internal abstract System.Threading.Tasks.ValueTask<TTokenBase> GetAsync(string header = "", System.Threading.CancellationToken cancellation = default);
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates a TokenProvider.
|
||||
/// </summary>
|
||||
/// <param name="tokens"></param>
|
||||
public TokenProvider(IEnumerable<TTokenBase> tokens)
|
||||
{
|
||||
_tokens = tokens.ToArray();
|
||||
|
||||
if (_tokens.Length == 0)
|
||||
throw new ArgumentException("You did not provide any tokens.");
|
||||
}
|
||||
}
|
||||
}
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Org.OpenAPITools.Client;
|
||||
|
||||
namespace Org.OpenAPITools.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension methods for IHostBuilder
|
||||
/// </summary>
|
||||
public static class IHostBuilderExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Add the api to your host builder.
|
||||
/// </summary>
|
||||
/// <param name="builder"></param>
|
||||
/// <param name="options"></param>
|
||||
public static IHostBuilder ConfigureApi(this IHostBuilder builder, Action<HostBuilderContext, IServiceCollection, HostConfiguration> options)
|
||||
{
|
||||
builder.ConfigureServices((context, services) =>
|
||||
{
|
||||
HostConfiguration config = new HostConfiguration(services);
|
||||
|
||||
options(context, services, config);
|
||||
|
||||
IServiceCollectionExtensions.AddApi(services, config);
|
||||
});
|
||||
|
||||
return builder;
|
||||
}
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Net.Http;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Polly.Timeout;
|
||||
using Polly.Extensions.Http;
|
||||
using Polly;
|
||||
|
||||
namespace Org.OpenAPITools.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension methods for IHttpClientBuilder
|
||||
/// </summary>
|
||||
public static class IHttpClientBuilderExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Adds a Polly retry policy to your clients.
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="retries"></param>
|
||||
/// <returns></returns>
|
||||
public static IHttpClientBuilder AddRetryPolicy(this IHttpClientBuilder client, int retries)
|
||||
{
|
||||
client.AddPolicyHandler(RetryPolicy(retries));
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a Polly timeout policy to your clients.
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="timeout"></param>
|
||||
/// <returns></returns>
|
||||
public static IHttpClientBuilder AddTimeoutPolicy(this IHttpClientBuilder client, TimeSpan timeout)
|
||||
{
|
||||
client.AddPolicyHandler(TimeoutPolicy(timeout));
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a Polly circuit breaker to your clients.
|
||||
/// </summary>
|
||||
/// <param name="client"></param>
|
||||
/// <param name="handledEventsAllowedBeforeBreaking"></param>
|
||||
/// <param name="durationOfBreak"></param>
|
||||
/// <returns></returns>
|
||||
public static IHttpClientBuilder AddCircuitBreakerPolicy(this IHttpClientBuilder client, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak)
|
||||
{
|
||||
client.AddTransientHttpErrorPolicy(builder => CircuitBreakerPolicy(builder, handledEventsAllowedBeforeBreaking, durationOfBreak));
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
private static Polly.Retry.AsyncRetryPolicy<HttpResponseMessage> RetryPolicy(int retries)
|
||||
=> HttpPolicyExtensions
|
||||
.HandleTransientHttpError()
|
||||
.Or<TimeoutRejectedException>()
|
||||
.RetryAsync(retries);
|
||||
|
||||
private static AsyncTimeoutPolicy<HttpResponseMessage> TimeoutPolicy(TimeSpan timeout)
|
||||
=> Policy.TimeoutAsync<HttpResponseMessage>(timeout);
|
||||
|
||||
private static Polly.CircuitBreaker.AsyncCircuitBreakerPolicy<HttpResponseMessage> CircuitBreakerPolicy(
|
||||
PolicyBuilder<HttpResponseMessage> builder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak)
|
||||
=> builder.CircuitBreakerAsync(handledEventsAllowedBeforeBreaking, durationOfBreak);
|
||||
}
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Files.com API
|
||||
*
|
||||
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
*
|
||||
* The version of the OpenAPI document: 0.0.1
|
||||
* Contact: support@files.com
|
||||
* Generated by: https://github.com/openapitools/openapi-generator.git
|
||||
*/
|
||||
|
||||
#nullable enable
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Org.OpenAPITools.Client;
|
||||
|
||||
namespace Org.OpenAPITools.Extensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Extension methods for IServiceCollection
|
||||
/// </summary>
|
||||
public static class IServiceCollectionExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Add the api to your host builder.
|
||||
/// </summary>
|
||||
/// <param name="services"></param>
|
||||
/// <param name="options"></param>
|
||||
public static void AddApi(this IServiceCollection services, Action<HostConfiguration> options)
|
||||
{
|
||||
HostConfiguration config = new(services);
|
||||
options(config);
|
||||
AddApi(services, config);
|
||||
}
|
||||
|
||||
internal static void AddApi(IServiceCollection services, HostConfiguration host)
|
||||
{
|
||||
if (!host.HttpClientsAdded)
|
||||
host.AddApiHttpClients();
|
||||
|
||||
services.AddSingleton<CookieContainer>();
|
||||
|
||||
// ensure that a token provider was provided for this token type
|
||||
// if not, default to RateLimitProvider
|
||||
var containerServices = services.Where(s => s.ServiceType.IsGenericType &&
|
||||
s.ServiceType.GetGenericTypeDefinition().IsAssignableFrom(typeof(TokenContainer<>))).ToArray();
|
||||
|
||||
foreach(var containerService in containerServices)
|
||||
{
|
||||
var tokenType = containerService.ServiceType.GenericTypeArguments[0];
|
||||
|
||||
var provider = services.FirstOrDefault(s => s.ServiceType.IsAssignableFrom(typeof(TokenProvider<>).MakeGenericType(tokenType)));
|
||||
|
||||
if (provider == null)
|
||||
{
|
||||
services.AddSingleton(typeof(RateLimitProvider<>).MakeGenericType(tokenType));
|
||||
services.AddSingleton(typeof(TokenProvider<>).MakeGenericType(tokenType),
|
||||
s => s.GetRequiredService(typeof(RateLimitProvider<>).MakeGenericType(tokenType)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<GenerateAssemblyInfo>true</GenerateAssemblyInfo> <!-- setting GenerateAssemblyInfo to false causes this bug https://github.com/dotnet/project-system/issues/3934 -->
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<AssemblyName>Org.OpenAPITools</AssemblyName>
|
||||
<PackageId>Org.OpenAPITools</PackageId>
|
||||
<OutputType>Library</OutputType>
|
||||
<Authors>OpenAPI</Authors>
|
||||
<Company>OpenAPI</Company>
|
||||
<AssemblyTitle>OpenAPI Library</AssemblyTitle>
|
||||
<Description>A library generated from a OpenAPI doc</Description>
|
||||
<Copyright>No Copyright</Copyright>
|
||||
<RootNamespace>Org.OpenAPITools</RootNamespace>
|
||||
<Version>1.0.0</Version>
|
||||
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\Org.OpenAPITools.xml</DocumentationFile>
|
||||
<RepositoryUrl>https://github.com/GIT_USER_ID/GIT_REPO_ID.git</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<PackageReleaseNotes>Minor update</PackageReleaseNotes>
|
||||
<Nullable>enable</Nullable>
|
||||
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="8.0.8" />
|
||||
<PackageReference Include="Microsoft.Net.Http.Headers" Version="8.0.8" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
# Created with Openapi Generator
|
||||
|
||||
<a id="cli"></a>
|
||||
## Run the following powershell command to generate the library
|
||||
|
||||
```ps1
|
||||
$properties = @(
|
||||
'apiName=Api',
|
||||
'targetFramework=net8.0',
|
||||
'validatable=true',
|
||||
'nullableReferenceTypes=true',
|
||||
'hideGenerationTimestamp=true',
|
||||
'packageVersion=1.0.0',
|
||||
'packageAuthors=OpenAPI',
|
||||
'packageCompany=OpenAPI',
|
||||
'packageCopyright=No Copyright',
|
||||
'packageDescription=A library generated from a OpenAPI doc',
|
||||
'packageName=Org.OpenAPITools',
|
||||
'packageTags=',
|
||||
'packageTitle=OpenAPI Library'
|
||||
) -join ","
|
||||
|
||||
$global = @(
|
||||
'apiDocs=true',
|
||||
'modelDocs=true',
|
||||
'apiTests=true',
|
||||
'modelTests=true'
|
||||
) -join ","
|
||||
|
||||
java -jar "<path>/openapi-generator/modules/openapi-generator-cli/target/openapi-generator-cli.jar" generate `
|
||||
-g csharp-netcore `
|
||||
-i <your-swagger-file>.yaml `
|
||||
-o <your-output-folder> `
|
||||
--library generichost `
|
||||
--additional-properties $properties `
|
||||
--global-property $global `
|
||||
--git-host "github.com" `
|
||||
--git-repo-id "GIT_REPO_ID" `
|
||||
--git-user-id "GIT_USER_ID" `
|
||||
--release-note "Minor update"
|
||||
# -t templates
|
||||
```
|
||||
|
||||
<a id="usage"></a>
|
||||
## Using the library in your project
|
||||
|
||||
```cs
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Org.OpenAPITools.Api;
|
||||
using Org.OpenAPITools.Client;
|
||||
using Org.OpenAPITools.Model;
|
||||
|
||||
namespace YourProject
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static async Task Main(string[] args)
|
||||
{
|
||||
var host = CreateHostBuilder(args).Build();
|
||||
var api = host.Services.GetRequiredService<IAPIKEYSApi>();
|
||||
GetApiKeysId_1ApiResponse apiResponse = await api.GetApiKeysId_1Async("todo");
|
||||
object model = apiResponse.Ok();
|
||||
}
|
||||
|
||||
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
|
||||
.ConfigureApi((context, options) =>
|
||||
{
|
||||
// the type of token here depends on the api security specifications
|
||||
ApiKeyToken token = new("<your token>", ClientUtils.ApiKeyHeader.Authorization);
|
||||
options.AddTokens(token);
|
||||
|
||||
// optionally choose the method the tokens will be provided with, default is RateLimitProvider
|
||||
options.UseProvider<RateLimitProvider<ApiKeyToken>, ApiKeyToken>();
|
||||
|
||||
options.ConfigureJsonOptions((jsonOptions) =>
|
||||
{
|
||||
// your custom converters if any
|
||||
});
|
||||
|
||||
options.AddApiHttpClients(builder: builder => builder
|
||||
.AddRetryPolicy(2)
|
||||
.AddTimeoutPolicy(TimeSpan.FromSeconds(5))
|
||||
.AddCircuitBreakerPolicy(10, TimeSpan.FromSeconds(30))
|
||||
// add whatever middleware you prefer
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
```
|
||||
<a id="questions"></a>
|
||||
## Questions
|
||||
|
||||
- What about HttpRequest failures and retries?
|
||||
If supportsRetry is enabled, you can configure Polly in the ConfigureClients method.
|
||||
- How are tokens used?
|
||||
Tokens are provided by a TokenProvider class. The default is RateLimitProvider which will perform client side rate limiting.
|
||||
Other providers can be used with the UseProvider method.
|
||||
- Does an HttpRequest throw an error when the server response is not Ok?
|
||||
It depends how you made the request. If the return type is ApiResponse<T> no error will be thrown, though the Content property will be null.
|
||||
StatusCode and ReasonPhrase will contain information about the error.
|
||||
If the return type is T, then it will throw. If the return type is TOrDefault, it will return null.
|
||||
- How do I validate requests and process responses?
|
||||
Use the provided On and After methods in the Api class from the namespace Org.OpenAPITools.Rest.DefaultApi.
|
||||
Or provide your own class by using the generic ConfigureApi method.
|
||||
|
||||
<a id="dependencies"></a>
|
||||
## Dependencies
|
||||
|
||||
- [Microsoft.Extensions.Hosting](https://www.nuget.org/packages/Microsoft.Extensions.Hosting/) - 5.0.0 or later
|
||||
- [Microsoft.Extensions.Http](https://www.nuget.org/packages/Microsoft.Extensions.Http/) - 5.0.0 or later
|
||||
- [Microsoft.Extensions.Http.Polly](https://www.nuget.org/packages/Microsoft.Extensions.Http.Polly/) - 5.0.1 or later
|
||||
- [System.ComponentModel.Annotations](https://www.nuget.org/packages/System.ComponentModel.Annotations) - 4.7.0 or later
|
||||
|
||||
<a id="documentation-for-authorization"></a>
|
||||
## Documentation for Authorization
|
||||
|
||||
|
||||
Authentication schemes defined for the API:
|
||||
<a id="api_key"></a>
|
||||
### api_key
|
||||
|
||||
- **Type**: API key
|
||||
- **API key parameter name**: XFilesAPIKey
|
||||
- **Location**: HTTP header
|
||||
|
||||
|
||||
## Build
|
||||
- SDK version: 1.0.0
|
||||
- Generator version: 7.9.0-SNAPSHOT
|
||||
- Build package: org.openapitools.codegen.languages.CSharpClientCodegen
|
||||
|
||||
## Api Information
|
||||
- appName: Files.com API
|
||||
- appVersion: 0.0.1
|
||||
- appDescription: No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||
|
||||
## [OpenApi Global properties](https://openapi-generator.tech/docs/globals)
|
||||
- generateAliasAsModel:
|
||||
- supportingFiles:
|
||||
- models: omitted for brevity
|
||||
- apis: omitted for brevity
|
||||
- apiDocs: true
|
||||
- modelDocs: true
|
||||
- apiTests: true
|
||||
- modelTests: true
|
||||
|
||||
## [OpenApi Generator Parameters](https://openapi-generator.tech/docs/generators/csharp-netcore)
|
||||
- allowUnicodeIdentifiers:
|
||||
- apiName: Api
|
||||
- caseInsensitiveResponseHeaders:
|
||||
- conditionalSerialization: false
|
||||
- disallowAdditionalPropertiesIfNotPresent:
|
||||
- gitHost: github.com
|
||||
- gitRepoId: GIT_REPO_ID
|
||||
- gitUserId: GIT_USER_ID
|
||||
- hideGenerationTimestamp: true
|
||||
- interfacePrefix: I
|
||||
- library: generichost
|
||||
- licenseId:
|
||||
- modelPropertyNaming:
|
||||
- netCoreProjectFile: false
|
||||
- nonPublicApi: false
|
||||
- nullableReferenceTypes: true
|
||||
- optionalAssemblyInfo:
|
||||
- optionalEmitDefaultValues: false
|
||||
- optionalMethodArgument: true
|
||||
- optionalProjectFile:
|
||||
- packageAuthors: OpenAPI
|
||||
- packageCompany: OpenAPI
|
||||
- packageCopyright: No Copyright
|
||||
- packageDescription: A library generated from a OpenAPI doc
|
||||
- packageGuid: {321C8C3F-0156-40C1-AE42-D59761FB9B6C}
|
||||
- packageName: Org.OpenAPITools
|
||||
- packageTags:
|
||||
- packageTitle: OpenAPI Library
|
||||
- packageVersion: 1.0.0
|
||||
- releaseNote: Minor update
|
||||
- returnICollection: false
|
||||
- sortParamsByRequiredFlag:
|
||||
- sourceFolder: src
|
||||
- targetFramework: net8.0
|
||||
- useCollection: false
|
||||
- useDateTimeOffset: false
|
||||
- useOneOfDiscriminatorLookup: false
|
||||
- validatable: true
|
||||
|
||||
This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project.
|
||||
Reference in New Issue
Block a user