diff --git a/Step.Config/StartupConfigController.cs b/Step.Config/StartupConfigController.cs index 75b68c8e..156f3b42 100644 --- a/Step.Config/StartupConfigController.cs +++ b/Step.Config/StartupConfigController.cs @@ -20,9 +20,9 @@ namespace Step.Config try { // Add Schema - readerSettings.Add(null, Environment.CurrentDirectory + "\\" + STARTUP_CONFIG_SCHEMA_PATH); + readerSettings.Add(null, BASE_PATH + "\\" + STARTUP_CONFIG_SCHEMA_PATH); // Open file reader - XDocument xmlConfigFile = XDocument.Load(Environment.CurrentDirectory + "\\" + STARTUP_CONFIG_PATH); + XDocument xmlConfigFile = XDocument.Load(BASE_PATH + "\\" + STARTUP_CONFIG_PATH); // Validate file xmlConfigFile.Validate(readerSettings, ValidationHandler); diff --git a/Step.NC/CMS_CORE_Library.dll b/Step.NC/CMS_CORE_Library.dll new file mode 100644 index 00000000..ea86433e Binary files /dev/null and b/Step.NC/CMS_CORE_Library.dll differ diff --git a/Step.NC/Step.NC.csproj b/Step.NC/Step.NC.csproj index da57ddcb..d166a8ce 100644 --- a/Step.NC/Step.NC.csproj +++ b/Step.NC/Step.NC.csproj @@ -32,8 +32,9 @@ 4 - - ..\..\CMS_CORE_LIBRARY\CMS_CORE_Library\bin\x86\Debug\CMS_CORE_Library.dll + + False + .\CMS_CORE_Library.dll diff --git a/Step.UI/ServerControlWindow.cs b/Step.UI/ServerControlWindow.cs index 59f58197..0d580b9e 100644 --- a/Step.UI/ServerControlWindow.cs +++ b/Step.UI/ServerControlWindow.cs @@ -102,11 +102,11 @@ namespace Step.UI String CMSClientPath = ""; //Check if the system is 64/32 bit - if (Environment.Is64BitOperatingSystem && File.Exists(Environment.CurrentDirectory + @"\Client\x64\CMS_Client.exe")) - CMSClientPath = Environment.CurrentDirectory + @"\Client\x64\CMS_Client.exe"; + if (Environment.Is64BitOperatingSystem && File.Exists(BASE_PATH + @"\Client\x64\CMS_Client.exe")) + CMSClientPath = BASE_PATH + @"\Client\x64\CMS_Client.exe"; - else if (File.Exists(Environment.CurrentDirectory + @"\Client\x86\CMS_Client.exe")) - CMSClientPath = Environment.CurrentDirectory + @"\Client\x86\CMS_Client.exe"; + else if (File.Exists(BASE_PATH + @"\Client\x86\CMS_Client.exe")) + CMSClientPath = BASE_PATH + @"\Client\x86\CMS_Client.exe"; if (!String.IsNullOrEmpty(CMSClientPath)) Process.Start(CMSClientPath, url); diff --git a/Step.Utils/Constants.cs b/Step.Utils/Constants.cs index 3183c39d..69fecb76 100644 --- a/Step.Utils/Constants.cs +++ b/Step.Utils/Constants.cs @@ -51,11 +51,12 @@ namespace Step.Utils } // Filenames + public static readonly string BASE_PATH = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); public const string STARTUP_CONFIG_SCHEMA_PATH = "serverConfigValidator.xsd"; public const string STARTUP_CONFIG_PATH = "serverConfig.xml"; - public static string WEBSITE_DIRECTORY = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "..", "wwwroot"); - public static string LANGUAGE_PACK_DIRECTORY = Environment.CurrentDirectory + "\\languages\\"; - public static string LANGUAGE_SCHEMA_PATH = Environment.CurrentDirectory + "\\LanguageValidator.xsd"; + public static string WEBSITE_DIRECTORY = Path.Combine(BASE_PATH, "..", "wwwroot"); + public static string LANGUAGE_PACK_DIRECTORY = BASE_PATH + "\\languages\\"; + public static string LANGUAGE_SCHEMA_PATH = BASE_PATH + "\\LanguageValidator.xsd"; // MVVM Messages names public const string STOP_SERVER = "STOP_SERVER"; diff --git a/Step/App_Start/SwaggerConfig.cs b/Step/App_Start/SwaggerConfig.cs index 3df3d0fd..9550f723 100644 --- a/Step/App_Start/SwaggerConfig.cs +++ b/Step/App_Start/SwaggerConfig.cs @@ -2,6 +2,9 @@ using System.Web.Http; using WebActivatorEx; using Step; using Swashbuckle.Application; +using Swashbuckle.Swagger; +using System.Web.Http.Description; +using System.Collections.Generic; namespace Step { @@ -32,222 +35,281 @@ namespace Step // c.SingleApiVersion("v1", "Step"); - // If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option. - // - //c.PrettyPrint(); + // If you want the output Swagger docs to be indented properly, enable the "PrettyPrint" option. + // + //c.PrettyPrint(); - // If your API has multiple versions, use "MultipleApiVersions" instead of "SingleApiVersion". - // In this case, you must provide a lambda that tells Swashbuckle which actions should be - // included in the docs for a given API version. Like "SingleApiVersion", each call to "Version" - // returns an "Info" builder so you can provide additional metadata per API version. - // - //c.MultipleApiVersions( - // (apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion), - // (vc) => - // { - // vc.Version("v2", "Swashbuckle Dummy API V2"); - // vc.Version("v1", "Swashbuckle Dummy API V1"); - // }); + // If your API has multiple versions, use "MultipleApiVersions" instead of "SingleApiVersion". + // In this case, you must provide a lambda that tells Swashbuckle which actions should be + // included in the docs for a given API version. Like "SingleApiVersion", each call to "Version" + // returns an "Info" builder so you can provide additional metadata per API version. + // + //c.MultipleApiVersions( + // (apiDesc, targetApiVersion) => ResolveVersionSupportByRouteConstraint(apiDesc, targetApiVersion), + // (vc) => + // { + // vc.Version("v2", "Swashbuckle Dummy API V2"); + // vc.Version("v1", "Swashbuckle Dummy API V1"); + // }); - // You can use "BasicAuth", "ApiKey" or "OAuth2" options to describe security schemes for the API. - // See https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md for more details. - // NOTE: These only define the schemes and need to be coupled with a corresponding "security" property - // at the document or operation level to indicate which schemes are required for an operation. To do this, - // you'll need to implement a custom IDocumentFilter and/or IOperationFilter to set these properties - // according to your specific authorization implementation - // - //c.BasicAuth("basic") - // .Description("Basic HTTP Authentication"); - // - // NOTE: You must also configure 'EnableApiKeySupport' below in the SwaggerUI section - //c.ApiKey("apiKey") - // .Description("API Key Authentication") - // .Name("apiKey") - // .In("header"); - // - //c.OAuth2("oauth2") - // .Description("OAuth2 Implicit Grant") - // .Flow("implicit") - // .AuthorizationUrl("http://petstore.swagger.wordnik.com/api/oauth/dialog") - // //.TokenUrl("https://tempuri.org/token") - // .Scopes(scopes => - // { - // scopes.Add("read", "Read access to protected resources"); - // scopes.Add("write", "Write access to protected resources"); - // }); + // You can use "BasicAuth", "ApiKey" or "OAuth2" options to describe security schemes for the API. + // See https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md for more details. + // NOTE: These only define the schemes and need to be coupled with a corresponding "security" property + // at the document or operation level to indicate which schemes are required for an operation. To do this, + // you'll need to implement a custom IDocumentFilter and/or IOperationFilter to set these properties + // according to your specific authorization implementation + // + //c.BasicAuth("basic") + // .Description("Basic HTTP Authentication"); + // + // NOTE: You must also configure 'EnableApiKeySupport' below in the SwaggerUI section + //c.ApiKey("apiKey") + // .Description("API Key Authentication") + // .Name("apiKey") + // .In("header"); + // + //c.OAuth2("oauth2") + // .Description("OAuth2 Implicit Grant") + // .Flow("implicit") + // .AuthorizationUrl("http://localhost:9000/token") + // .TokenUrl("http://localhost:9000/token") + // .Scopes(scopes => + // { + // scopes.Add("read", "Read access to protected resources"); + // scopes.Add("write", "Write access to protected resources"); + // }); - // Set this flag to omit descriptions for any actions decorated with the Obsolete attribute - //c.IgnoreObsoleteActions(); + // Set this flag to omit descriptions for any actions decorated with the Obsolete attribute + //c.IgnoreObsoleteActions(); - // Each operation be assigned one or more tags which are then used by consumers for various reasons. - // For example, the swagger-ui groups operations according to the first tag of each operation. - // By default, this will be controller name but you can use the "GroupActionsBy" option to - // override with any value. - // - //c.GroupActionsBy(apiDesc => apiDesc.HttpMethod.ToString()); + // Each operation be assigned one or more tags which are then used by consumers for various reasons. + // For example, the swagger-ui groups operations according to the first tag of each operation. + // By default, this will be controller name but you can use the "GroupActionsBy" option to + // override with any value. + // + //c.GroupActionsBy(apiDesc => apiDesc.HttpMethod.ToString()); - // You can also specify a custom sort order for groups (as defined by "GroupActionsBy") to dictate - // the order in which operations are listed. For example, if the default grouping is in place - // (controller name) and you specify a descending alphabetic sort order, then actions from a - // ProductsController will be listed before those from a CustomersController. This is typically - // used to customize the order of groupings in the swagger-ui. - // - //c.OrderActionGroupsBy(new DescendingAlphabeticComparer()); + // You can also specify a custom sort order for groups (as defined by "GroupActionsBy") to dictate + // the order in which operations are listed. For example, if the default grouping is in place + // (controller name) and you specify a descending alphabetic sort order, then actions from a + // ProductsController will be listed before those from a CustomersController. This is typically + // used to customize the order of groupings in the swagger-ui. + // + //c.OrderActionGroupsBy(new DescendingAlphabeticComparer()); - // If you annotate Controllers and API Types with - // Xml comments (http://msdn.microsoft.com/en-us/library/b2s063f7(v=vs.110).aspx), you can incorporate - // those comments into the generated docs and UI. You can enable this by providing the path to one or - // more Xml comment files. - // - //c.IncludeXmlComments(GetXmlCommentsPath()); + // If you annotate Controllers and API Types with + // Xml comments (http://msdn.microsoft.com/en-us/library/b2s063f7(v=vs.110).aspx), you can incorporate + // those comments into the generated docs and UI. You can enable this by providing the path to one or + // more Xml comment files. + // + //c.IncludeXmlComments(GetXmlCommentsPath()); - // Swashbuckle makes a best attempt at generating Swagger compliant JSON schemas for the various types - // exposed in your API. However, there may be occasions when more control of the output is needed. - // This is supported through the "MapType" and "SchemaFilter" options: - // - // Use the "MapType" option to override the Schema generation for a specific type. - // It should be noted that the resulting Schema will be placed "inline" for any applicable Operations. - // While Swagger 2.0 supports inline definitions for "all" Schema types, the swagger-ui tool does not. - // It expects "complex" Schemas to be defined separately and referenced. For this reason, you should only - // use the "MapType" option when the resulting Schema is a primitive or array type. If you need to alter a - // complex Schema, use a Schema filter. - // - //c.MapType(() => new Schema { type = "integer", format = "int32" }); + // Swashbuckle makes a best attempt at generating Swagger compliant JSON schemas for the various types + // exposed in your API. However, there may be occasions when more control of the output is needed. + // This is supported through the "MapType" and "SchemaFilter" options: + // + // Use the "MapType" option to override the Schema generation for a specific type. + // It should be noted that the resulting Schema will be placed "inline" for any applicable Operations. + // While Swagger 2.0 supports inline definitions for "all" Schema types, the swagger-ui tool does not. + // It expects "complex" Schemas to be defined separately and referenced. For this reason, you should only + // use the "MapType" option when the resulting Schema is a primitive or array type. If you need to alter a + // complex Schema, use a Schema filter. + // + //c.MapType(() => new Schema { type = "integer", format = "int32" }); - // If you want to post-modify "complex" Schemas once they've been generated, across the board or for a - // specific type, you can wire up one or more Schema filters. - // - //c.SchemaFilter(); + // If you want to post-modify "complex" Schemas once they've been generated, across the board or for a + // specific type, you can wire up one or more Schema filters. + // + //c.SchemaFilter(); - // In a Swagger 2.0 document, complex types are typically declared globally and referenced by unique - // Schema Id. By default, Swashbuckle does NOT use the full type name in Schema Ids. In most cases, this - // works well because it prevents the "implementation detail" of type namespaces from leaking into your - // Swagger docs and UI. However, if you have multiple types in your API with the same class name, you'll - // need to opt out of this behavior to avoid Schema Id conflicts. - // - //c.UseFullTypeNameInSchemaIds(); + // In a Swagger 2.0 document, complex types are typically declared globally and referenced by unique + // Schema Id. By default, Swashbuckle does NOT use the full type name in Schema Ids. In most cases, this + // works well because it prevents the "implementation detail" of type namespaces from leaking into your + // Swagger docs and UI. However, if you have multiple types in your API with the same class name, you'll + // need to opt out of this behavior to avoid Schema Id conflicts. + // + //c.UseFullTypeNameInSchemaIds(); - // Alternatively, you can provide your own custom strategy for inferring SchemaId's for - // describing "complex" types in your API. - // - //c.SchemaId(t => t.FullName.Contains('`') ? t.FullName.Substring(0, t.FullName.IndexOf('`')) : t.FullName); + // Alternatively, you can provide your own custom strategy for inferring SchemaId's for + // describing "complex" types in your API. + // + //c.SchemaId(t => t.FullName.Contains('`') ? t.FullName.Substring(0, t.FullName.IndexOf('`')) : t.FullName); - // Set this flag to omit schema property descriptions for any type properties decorated with the - // Obsolete attribute - //c.IgnoreObsoleteProperties(); + // Set this flag to omit schema property descriptions for any type properties decorated with the + // Obsolete attribute + //c.IgnoreObsoleteProperties(); - // In accordance with the built in JsonSerializer, Swashbuckle will, by default, describe enums as integers. - // You can change the serializer behavior by configuring the StringToEnumConverter globally or for a given - // enum type. Swashbuckle will honor this change out-of-the-box. However, if you use a different - // approach to serialize enums as strings, you can also force Swashbuckle to describe them as strings. - // - //c.DescribeAllEnumsAsStrings(); + // In accordance with the built in JsonSerializer, Swashbuckle will, by default, describe enums as integers. + // You can change the serializer behavior by configuring the StringToEnumConverter globally or for a given + // enum type. Swashbuckle will honor this change out-of-the-box. However, if you use a different + // approach to serialize enums as strings, you can also force Swashbuckle to describe them as strings. + // + //c.DescribeAllEnumsAsStrings(); - // Similar to Schema filters, Swashbuckle also supports Operation and Document filters: - // - // Post-modify Operation descriptions once they've been generated by wiring up one or more - // Operation filters. - // - //c.OperationFilter(); - // - // If you've defined an OAuth2 flow as described above, you could use a custom filter - // to inspect some attribute on each action and infer which (if any) OAuth2 scopes are required - // to execute the operation - // - //c.OperationFilter(); + // Similar to Schema filters, Swashbuckle also supports Operation and Document filters: + // + // Post-modify Operation descriptions once they've been generated by wiring up one or more + // Operation filters. + // + //c.OperationFilter(); + // + // If you've defined an OAuth2 flow as described above, you could use a custom filter + // to inspect some attribute on each action and infer which (if any) OAuth2 scopes are required + // to execute the operation + // + c.OperationFilter(() => new AddRequiredHeaderParameter()); - // Post-modify the entire Swagger document by wiring up one or more Document filters. - // This gives full control to modify the final SwaggerDocument. You should have a good understanding of - // the Swagger 2.0 spec. - https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md - // before using this option. - // - //c.DocumentFilter(); + // Post-modify the entire Swagger document by wiring up one or more Document filters. + // This gives full control to modify the final SwaggerDocument. You should have a good understanding of + // the Swagger 2.0 spec. - https://github.com/swagger-api/swagger-spec/blob/master/versions/2.0.md + // before using this option. + // + c.DocumentFilter(); - // In contrast to WebApi, Swagger 2.0 does not include the query string component when mapping a URL - // to an action. As a result, Swashbuckle will raise an exception if it encounters multiple actions - // with the same path (sans query string) and HTTP method. You can workaround this by providing a - // custom strategy to pick a winner or merge the descriptions for the purposes of the Swagger docs - // - //c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); + // In contrast to WebApi, Swagger 2.0 does not include the query string component when mapping a URL + // to an action. As a result, Swashbuckle will raise an exception if it encounters multiple actions + // with the same path (sans query string) and HTTP method. You can workaround this by providing a + // custom strategy to pick a winner or merge the descriptions for the purposes of the Swagger docs + // + //c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); - // Wrap the default SwaggerGenerator with additional behavior (e.g. caching) or provide an - // alternative implementation for ISwaggerProvider with the CustomProvider option. - // - //c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider)); + // Wrap the default SwaggerGenerator with additional behavior (e.g. caching) or provide an + // alternative implementation for ISwaggerProvider with the CustomProvider option. + // + //c.CustomProvider((defaultProvider) => new CachingSwaggerProvider(defaultProvider)); }) .EnableSwaggerUi(c => { - // Use the "DocumentTitle" option to change the Document title. - // Very helpful when you have multiple Swagger pages open, to tell them apart. - // - //c.DocumentTitle("My Swagger UI"); + // Use the "DocumentTitle" option to change the Document title. + // Very helpful when you have multiple Swagger pages open, to tell them apart. + // + //c.DocumentTitle("My Swagger UI"); - // Use the "InjectStylesheet" option to enrich the UI with one or more additional CSS stylesheets. - // The file must be included in your project as an "Embedded Resource", and then the resource's - // "Logical Name" is passed to the method as shown below. - // - //c.InjectStylesheet(containingAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testStyles1.css"); + // Use the "InjectStylesheet" option to enrich the UI with one or more additional CSS stylesheets. + // The file must be included in your project as an "Embedded Resource", and then the resource's + // "Logical Name" is passed to the method as shown below. + // + //c.InjectStylesheet(containingAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testStyles1.css"); - // Use the "InjectJavaScript" option to invoke one or more custom JavaScripts after the swagger-ui - // has loaded. The file must be included in your project as an "Embedded Resource", and then the resource's - // "Logical Name" is passed to the method as shown above. - // - //c.InjectJavaScript(thisAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testScript1.js"); + // Use the "InjectJavaScript" option to invoke one or more custom JavaScripts after the swagger-ui + // has loaded. The file must be included in your project as an "Embedded Resource", and then the resource's + // "Logical Name" is passed to the method as shown above. + // + //c.InjectJavaScript(thisAssembly, "Swashbuckle.Dummy.SwaggerExtensions.testScript1.js"); - // The swagger-ui renders boolean data types as a dropdown. By default, it provides "true" and "false" - // strings as the possible choices. You can use this option to change these to something else, - // for example 0 and 1. - // - //c.BooleanValues(new[] { "0", "1" }); + // The swagger-ui renders boolean data types as a dropdown. By default, it provides "true" and "false" + // strings as the possible choices. You can use this option to change these to something else, + // for example 0 and 1. + // + //c.BooleanValues(new[] { "0", "1" }); - // By default, swagger-ui will validate specs against swagger.io's online validator and display the result - // in a badge at the bottom of the page. Use these options to set a different validator URL or to disable the - // feature entirely. - //c.SetValidatorUrl("http://localhost/validator"); - //c.DisableValidator(); + // By default, swagger-ui will validate specs against swagger.io's online validator and display the result + // in a badge at the bottom of the page. Use these options to set a different validator URL or to disable the + // feature entirely. + //c.SetValidatorUrl("http://localhost/validator"); + //c.DisableValidator(); - // Use this option to control how the Operation listing is displayed. - // It can be set to "None" (default), "List" (shows operations for each resource), - // or "Full" (fully expanded: shows operations and their details). - // - //c.DocExpansion(DocExpansion.List); + // Use this option to control how the Operation listing is displayed. + // It can be set to "None" (default), "List" (shows operations for each resource), + // or "Full" (fully expanded: shows operations and their details). + // + //c.DocExpansion(DocExpansion.List); - // Specify which HTTP operations will have the 'Try it out!' option. An empty paramter list disables - // it for all operations. - // - //c.SupportedSubmitMethods("GET", "HEAD"); + // Specify which HTTP operations will have the 'Try it out!' option. An empty paramter list disables + // it for all operations. + // + //c.SupportedSubmitMethods("GET", "HEAD"); - // Use the CustomAsset option to provide your own version of assets used in the swagger-ui. - // It's typically used to instruct Swashbuckle to return your version instead of the default - // when a request is made for "index.html". As with all custom content, the file must be included - // in your project as an "Embedded Resource", and then the resource's "Logical Name" is passed to - // the method as shown below. - // - //c.CustomAsset("index", containingAssembly, "YourWebApiProject.SwaggerExtensions.index.html"); + // Use the CustomAsset option to provide your own version of assets used in the swagger-ui. + // It's typically used to instruct Swashbuckle to return your version instead of the default + // when a request is made for "index.html". As with all custom content, the file must be included + // in your project as an "Embedded Resource", and then the resource's "Logical Name" is passed to + // the method as shown below. + // + //c.CustomAsset("index", containingAssembly, "YourWebApiProject.SwaggerExtensions.index.html"); - // If your API has multiple versions and you've applied the MultipleApiVersions setting - // as described above, you can also enable a select box in the swagger-ui, that displays - // a discovery URL for each version. This provides a convenient way for users to browse documentation - // for different API versions. - // - //c.EnableDiscoveryUrlSelector(); + // If your API has multiple versions and you've applied the MultipleApiVersions setting + // as described above, you can also enable a select box in the swagger-ui, that displays + // a discovery URL for each version. This provides a convenient way for users to browse documentation + // for different API versions. + // + //c.EnableDiscoveryUrlSelector(); - // If your API supports the OAuth2 Implicit flow, and you've described it correctly, according to - // the Swagger 2.0 specification, you can enable UI support as shown below. - // - //c.EnableOAuth2Support( - // clientId: "test-client-id", - // clientSecret: null, - // realm: "test-realm", - // appName: "Swagger UI" - // //additionalQueryStringParams: new Dictionary() { { "foo", "bar" } } - //); + // If your API supports the OAuth2 Implicit flow, and you've described it correctly, according to + // the Swagger 2.0 specification, you can enable UI support as shown below. + //// + //c.EnableOAuth2Support( + // clientId: "test-client-id", + // clientSecret: null, + // realm: "test-realm", + // appName: "Swagger UI" + //additionalQueryStringParams: new Dictionary() { { "foo", "bar" } } + //); - // If your API supports ApiKey, you can override the default values. - // "apiKeyIn" can either be "query" or "header" - // - //c.EnableApiKeySupport("apiKey", "header"); + // If your API supports ApiKey, you can override the default values. + // "apiKeyIn" can either be "query" or "header" + // + //c.EnableApiKeySupport("apiKey", "header"); }); } } + + public class AddRequiredHeaderParameter : IOperationFilter + { + public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) + { + if (operation.parameters == null) + operation.parameters = new List(); + + operation.parameters.Add(new Parameter + { + name = "Authorization", + @in = "header", + type = "string", + required = false + }); + } + } + + class AuthTokenOperation : IDocumentFilter + { + public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) + { + swaggerDoc.paths.Add("/token", new PathItem + { + post = new Operation + { + tags = new List { "Auth" }, + consumes = new List + { + "application/x-www-form-urlencoded" + }, + parameters = new List { + new Parameter + { + type = "string", + name = "grant_type", + required = true, + @in = "formData" + }, + new Parameter + { + type = "string", + name = "username", + required = false, + @in = "formData" + }, + new Parameter + { + type = "string", + name = "password", + required = false, + @in = "formData" + } + } + } + }); + } + } + } diff --git a/Step/Controllers/WebApi/LanguageController.cs b/Step/Controllers/WebApi/LanguageController.cs index 671f5b37..79f7becf 100644 --- a/Step/Controllers/WebApi/LanguageController.cs +++ b/Step/Controllers/WebApi/LanguageController.cs @@ -13,7 +13,6 @@ namespace Step.Controllers.WebApi [RoutePrefix("api/language")] public class LanguageController : ApiController { - [WebApiAuthorize(FunctionAccess = "test", Action = ACTIONS.READ)] [Route("languages"), HttpGet] public IHttpActionResult GetLanguageList() { @@ -23,8 +22,7 @@ namespace Step.Controllers.WebApi return Ok(availableLanguages); } - - [WebApiAuthorize(FunctionAccess = "test", Action = ACTIONS.READ)] + [Route("{language}"), HttpGet()] public IHttpActionResult GetTranslations(string language) { diff --git a/Step/Controllers/WebApi/NcApiController.cs b/Step/Controllers/WebApi/NcApiController.cs index e116c0ac..eb44f26c 100644 --- a/Step/Controllers/WebApi/NcApiController.cs +++ b/Step/Controllers/WebApi/NcApiController.cs @@ -24,8 +24,10 @@ namespace Step.Controllers.WebApi stop.Start(); try { - using( NcHandler ncHandler = new NcHandler()) { - genericData = ncHandler.GetNcGenericData(); + using (NcHandler ncHandler = new NcHandler()) + { + ncHandler.Connect(); + genericData = ncHandler.GetNcGenericData(); } } catch (Exception ex)