diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e5365562..2c15736c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -12,6 +12,8 @@ jobs: BW_ACCOUNT_ID: ${{ secrets.BW_ACCOUNT_ID }} BW_USERNAME: ${{ secrets.BW_USERNAME }} BW_PASSWORD: ${{ secrets.BW_PASSWORD }} + BW_CLIENT_ID: ${{ secrets.BW_CLIENT_ID }} + BW_CLIENT_SECRET: ${{ secrets.BW_CLIENT_SECRET }} BW_USERNAME_FORBIDDEN: ${{ secrets.BW_USERNAME_FORBIDDEN }} BW_PASSWORD_FORBIDDEN: ${{ secrets.BW_PASSWORD_FORBIDDEN }} BW_VOICE_APPLICATION_ID: ${{ secrets.BW_VOICE_APPLICATION_ID }} diff --git a/.github/workflows/test-pr.yml b/.github/workflows/test-pr.yml index 7e7b9e47..62d20358 100644 --- a/.github/workflows/test-pr.yml +++ b/.github/workflows/test-pr.yml @@ -14,6 +14,8 @@ env: BW_ACCOUNT_ID: ${{ secrets.BW_ACCOUNT_ID }} BW_PASSWORD: ${{ secrets.BW_PASSWORD }} BW_USERNAME: ${{ secrets.BW_USERNAME }} + BW_CLIENT_ID: ${{ secrets.BW_CLIENT_ID }} + BW_CLIENT_SECRET: ${{ secrets.BW_CLIENT_SECRET }} BW_VOICE_APPLICATION_ID: ${{ secrets.BW_VOICE_APPLICATION_ID }} BW_MESSAGING_APPLICATION_ID: ${{ secrets.BW_MESSAGING_APPLICATION_ID }} BW_NUMBER: ${{ secrets.BW_NUMBER }} diff --git a/.github/workflows/test-smoke.yml b/.github/workflows/test-smoke.yml index 95d0d97e..3d13537b 100644 --- a/.github/workflows/test-smoke.yml +++ b/.github/workflows/test-smoke.yml @@ -15,6 +15,9 @@ concurrency: env: BW_USERNAME: ${{ secrets.BW_USERNAME }} BW_PASSWORD: ${{ secrets.BW_PASSWORD }} + BW_ACCOUNT_ID: ${{ secrets.BW_ACCOUNT_ID }} + BW_CLIENT_ID: ${{ secrets.BW_CLIENT_ID }} + BW_CLIENT_SECRET: ${{ secrets.BW_CLIENT_SECRET }} BW_USERNAME_FORBIDDEN: ${{ secrets.BW_USERNAME_FORBIDDEN }} BW_PASSWORD_FORBIDDEN: ${{ secrets.BW_PASSWORD_FORBIDDEN }} USER_NUMBER: ${{ secrets.USER_NUMBER }} diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 33ee46ae..4a422647 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -225,6 +225,10 @@ src/main/java/com/bandwidth/sdk/auth/ApiKeyAuth.java src/main/java/com/bandwidth/sdk/auth/Authentication.java src/main/java/com/bandwidth/sdk/auth/HttpBasicAuth.java src/main/java/com/bandwidth/sdk/auth/HttpBearerAuth.java +src/main/java/com/bandwidth/sdk/auth/OAuth.java +src/main/java/com/bandwidth/sdk/auth/OAuthFlow.java +src/main/java/com/bandwidth/sdk/auth/OAuthOkHttpClient.java +src/main/java/com/bandwidth/sdk/auth/RetryingOAuth.java src/main/java/com/bandwidth/sdk/model/AbstractOpenApiSchema.java src/main/java/com/bandwidth/sdk/model/AccountStatistics.java src/main/java/com/bandwidth/sdk/model/AdditionalDenialReason.java diff --git a/README.md b/README.md index 4edb5733..9cbddc78 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,14 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + CallsApi apiInstance = new CallsApi(defaultClient); + // Or create the instance with a your clientId and clientSecret (for OAuth2): + // CallsApi apiInstance = new CallsApi("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", null); + String accountId = "9900000"; // String | Your Bandwidth Account ID. CreateCall createCall = new CreateCall(); // CreateCall | JSON object containing information to create an outbound call try { @@ -362,6 +369,14 @@ Authentication schemes defined for the API: - **Type**: HTTP basic authentication + +### OAuth2 + +- **Type**: OAuth +- **Flow**: application +- **Authorization URL**: +- **Scopes**: N/A + ## Recommendation diff --git a/api/openapi.yaml b/api/openapi.yaml index d981c4c6..e36e7be4 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -11,6 +11,7 @@ servers: - url: / security: - Basic: [] +- OAuth2: [] tags: - name: Messages - name: Media @@ -14925,4 +14926,10 @@ components: - Example: `Authorization: Basic ZGVtbZpwQDU1dzByZA==` scheme: basic type: http + OAuth2: + flows: + clientCredentials: + scopes: {} + tokenUrl: https://api.bandwidth.com/api/v1/oauth2/token + type: oauth2 diff --git a/bandwidth.yml b/bandwidth.yml index 6ee15ae1..9ab77fd9 100644 --- a/bandwidth.yml +++ b/bandwidth.yml @@ -9,6 +9,7 @@ info: version: 1.0.0 security: - Basic: [] + - OAuth2: [] tags: - name: Messages - name: Media @@ -8427,6 +8428,12 @@ components: - Example: `Authorization: Basic ZGVtbZpwQDU1dzByZA==` + OAuth2: + type: oauth2 + flows: + clientCredentials: + tokenUrl: https://api.bandwidth.com/api/v1/oauth2/token + scopes: {} callbacks: inboundCallback: '{inboundCallbackUrl}': diff --git a/build.gradle b/build.gradle index d39f1d72..c4704649 100644 --- a/build.gradle +++ b/build.gradle @@ -113,6 +113,8 @@ dependencies { implementation 'io.gsonfire:gson-fire:1.9.0' implementation 'jakarta.ws.rs:jakarta.ws.rs-api:2.1.6' implementation 'org.openapitools:jackson-databind-nullable:0.2.8' + implementation group: 'org.json', name: 'json', version: '20250517' + implementation group: 'org.apache.oltu.oauth2', name: 'org.apache.oltu.oauth2.client', version: '1.0.2' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.18.0' implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3' diff --git a/build.sbt b/build.sbt index 0bf06872..39b09600 100644 --- a/build.sbt +++ b/build.sbt @@ -16,6 +16,8 @@ lazy val root = (project in file(".")). "org.apache.commons" % "commons-lang3" % "3.18.0", "jakarta.ws.rs" % "jakarta.ws.rs-api" % "2.1.6", "org.openapitools" % "jackson-databind-nullable" % "0.2.8", + "org.json" % "json" % "20250517", + "org.apache.oltu.oauth2" % "org.apache.oltu.oauth2.client" % "1.0.2", "io.gsonfire" % "gson-fire" % "1.9.0" % "compile", "jakarta.annotation" % "jakarta.annotation-api" % "1.3.5" % "compile", "com.google.code.findbugs" % "jsr305" % "3.0.2" % "compile", diff --git a/custom_templates/build.gradle.mustache b/custom_templates/build.gradle.mustache new file mode 100644 index 00000000..75a19564 --- /dev/null +++ b/custom_templates/build.gradle.mustache @@ -0,0 +1,203 @@ +apply plugin: 'idea' +apply plugin: 'eclipse' +{{#sourceFolder}} +apply plugin: 'java' +{{/sourceFolder}} +apply plugin: 'com.diffplug.spotless' + +group = '{{groupId}}' +version = '{{artifactVersion}}' + +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:2.3.+' + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' + classpath 'com.diffplug.spotless:spotless-plugin-gradle:6.11.0' + } +} + +repositories { + mavenCentral() +} +{{#sourceFolder}} +sourceSets { + main.java.srcDirs = ['{{sourceFolder}}'] +} + +{{/sourceFolder}} +if(hasProperty('target') && target == 'android') { + + apply plugin: 'com.android.library' + apply plugin: 'com.github.dcendents.android-maven' + + android { + compileSdkVersion 25 + buildToolsVersion '25.0.2' + defaultConfig { + minSdkVersion 14 + targetSdkVersion 25 + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + // Rename the aar correctly + libraryVariants.all { variant -> + variant.outputs.each { output -> + def outputFile = output.outputFile + if (outputFile != null && outputFile.name.endsWith('.aar')) { + def fileName = "${project.name}-${variant.baseName}-${version}.aar" + output.outputFile = new File(outputFile.parent, fileName) + } + } + } + + dependencies { + provided "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" + } + } + + afterEvaluate { + android.libraryVariants.all { variant -> + def task = project.tasks.create "jar${variant.name.capitalize()}", Jar + task.description = "Create jar artifact for ${variant.name}" + task.dependsOn variant.javaCompile + task.from variant.javaCompile.destinationDirectory + task.destinationDirectory = project.file("${project.buildDir}/outputs/jar") + task.archiveFileName = "${project.name}-${variant.baseName}-${version}.jar" + artifacts.add('archives', task) + } + } + + task sourcesJar(type: Jar) { + from android.sourceSets.main.java.srcDirs + classifier = 'sources' + } + + artifacts { + archives sourcesJar + } + +} else { + + apply plugin: 'java' + apply plugin: 'maven-publish' + + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + + publishing { + publications { + maven(MavenPublication) { + artifactId = '{{artifactId}}' + from components.java + } + } + } + + task execute(type:JavaExec) { + main = System.getProperty('mainClass') + classpath = sourceSets.main.runtimeClasspath + } +} + +ext { + {{#swagger1AnnotationLibrary}} + swagger_annotations_version = "1.6.9" + {{/swagger1AnnotationLibrary}} + {{#swagger2AnnotationLibrary}} + swagger_annotations_version = "2.2.9" + {{/swagger2AnnotationLibrary}} + jakarta_annotation_version = "1.3.5" + {{#useBeanValidation}} + bean_validation_version = "2.0.2" + {{/useBeanValidation}} +} + +dependencies { + {{#swagger1AnnotationLibrary}} + implementation "io.swagger:swagger-annotations:$swagger_annotations_version" + {{/swagger1AnnotationLibrary}} + {{#swagger2AnnotationLibrary}} + implementation "io.swagger.core.v3:swagger-annotations:$swagger_annotations_version" + {{/swagger2AnnotationLibrary}} + implementation "com.google.code.findbugs:jsr305:3.0.2" + implementation 'com.squareup.okhttp3:okhttp:4.12.0' + implementation 'com.squareup.okhttp3:logging-interceptor:4.12.0' + implementation 'com.google.code.gson:gson:2.9.1' + implementation 'io.gsonfire:gson-fire:1.9.0' + implementation 'jakarta.ws.rs:jakarta.ws.rs-api:2.1.6' + {{#openApiNullable}} + implementation 'org.openapitools:jackson-databind-nullable:0.2.8' + {{/openApiNullable}} + {{#withAWSV4Signature}} + implementation 'software.amazon.awssdk:auth:2.20.157' + {{/withAWSV4Signature}} + {{#hasOAuthMethods}} + implementation group: 'org.json', name: 'json', version: '20250517' + implementation group: 'org.apache.oltu.oauth2', name: 'org.apache.oltu.oauth2.client', version: '1.0.2' + {{/hasOAuthMethods}} + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.18.0' + {{#joda}} + implementation 'joda-time:joda-time:2.9.9' + {{/joda}} + {{#dynamicOperations}} + implementation 'io.swagger.parser.v3:swagger-parser-v3:2.0.30' + {{/dynamicOperations}} + implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version" + {{#useBeanValidation}} + implementation "jakarta.validation:jakarta.validation-api:$bean_validation_version" + {{/useBeanValidation}} + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.3' + testImplementation 'org.mockito:mockito-core:3.12.4' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.10.3' +} + +javadoc { + options.tags = [ "http.response.details:a:Http Response Details" ] +} + +// Use spotless plugin to automatically format code, remove unused import, etc +// To apply changes directly to the file, run `gradlew spotlessApply` +// Ref: https://github.com/diffplug/spotless/tree/main/plugin-gradle +spotless { + // comment out below to run spotless as part of the `check` task + enforceCheck false + + format 'misc', { + // define the files (e.g. '*.gradle', '*.md') to apply `misc` to + target '.gitignore' + + // define the steps to apply to those files + trimTrailingWhitespace() + indentWithSpaces() // Takes an integer argument if you don't like 4 + endWithNewline() + } + java { + // don't need to set target, it is inferred from java + + // apply a specific flavor of google-java-format + googleJavaFormat('1.8').aosp().reflowLongStrings() + + removeUnusedImports() + importOrder() + } +} + +test { + // Enable JUnit 5 (Gradle 4.6+). + useJUnitPlatform() + + // Always run tests, even when nothing changed. + dependsOn 'cleanTest' + + // Show test results. + testLogging { + events "passed", "skipped", "failed" + } + +} diff --git a/custom_templates/build.sbt.mustache b/custom_templates/build.sbt.mustache new file mode 100644 index 00000000..13382bcd --- /dev/null +++ b/custom_templates/build.sbt.mustache @@ -0,0 +1,42 @@ +lazy val root = (project in file(".")). + settings( + organization := "{{groupId}}", + name := "{{artifactId}}", + version := "{{artifactVersion}}", + scalaVersion := "2.11.12", + scalacOptions ++= Seq("-feature"), + compile / javacOptions ++= Seq("-Xlint:deprecation"), + Compile / packageDoc / publishArtifact := false, + resolvers += Resolver.mavenLocal, + libraryDependencies ++= Seq( + "io.swagger" % "swagger-annotations" % "1.6.5", + "com.squareup.okhttp3" % "okhttp" % "4.12.0", + "com.squareup.okhttp3" % "logging-interceptor" % "4.12.0", + "com.google.code.gson" % "gson" % "2.9.1", + "org.apache.commons" % "commons-lang3" % "3.18.0", + "jakarta.ws.rs" % "jakarta.ws.rs-api" % "2.1.6", + {{#openApiNullable}} + "org.openapitools" % "jackson-databind-nullable" % "0.2.8", + {{/openApiNullable}} + {{#withAWSV4Signature}} + "software.amazon.awssdk" % "auth" % "2.20.157", + {{/withAWSV4Signature}} + {{#hasOAuthMethods}} + "org.json" % "json" % "20250517", + "org.apache.oltu.oauth2" % "org.apache.oltu.oauth2.client" % "1.0.2", + {{/hasOAuthMethods}} + {{#joda}} + "joda-time" % "joda-time" % "2.9.9" % "compile", + {{/joda}} + {{#dynamicOperations}} + "io.swagger.parser.v3" % "swagger-parser-v3" "2.0.30" % "compile" + {{/dynamicOperations}} + "io.gsonfire" % "gson-fire" % "1.9.0" % "compile", + "jakarta.annotation" % "jakarta.annotation-api" % "1.3.5" % "compile", + "com.google.code.findbugs" % "jsr305" % "3.0.2" % "compile", + "jakarta.annotation" % "jakarta.annotation-api" % "1.3.5" % "compile", + "org.junit.jupiter" % "junit-jupiter-api" % "5.10.3" % "test", + "com.novocode" % "junit-interface" % "0.10" % "test", + "org.mockito" % "mockito-core" % "3.12.4" % "test" + ) + ) diff --git a/custom_templates/libraries/okhttp-gson/README.mustache b/custom_templates/libraries/okhttp-gson/README.mustache new file mode 100644 index 00000000..de1a697e --- /dev/null +++ b/custom_templates/libraries/okhttp-gson/README.mustache @@ -0,0 +1,198 @@ +# {{artifactId}} + +{{appName}} +- API version: {{appVersion}} +{{^hideGenerationTimestamp}} + - Build date: {{generatedDate}} +{{/hideGenerationTimestamp}} + - Generator version: {{generatorVersion}} + +{{{appDescriptionWithNewLines}}} + +{{#infoUrl}} + For more information, please visit [{{{infoUrl}}}]({{{infoUrl}}}) +{{/infoUrl}} + +*Automatically generated by the [OpenAPI Generator](https://openapi-generator.tech)* + + +## Requirements + +Building the API client library requires: +1. Java 1.8+ +2. Maven (3.8.3+)/Gradle (7.2+) + +## Installation + +To install the API client library to your local Maven repository, simply execute: + +```shell +mvn clean install +``` + +To deploy it to a remote Maven repository instead, configure the settings of the repository and execute: + +```shell +mvn clean deploy +``` + +Refer to the [OSSRH Guide](http://central.sonatype.org/pages/ossrh-guide.html) for more information. + +### Maven users + +Add this dependency to your project's POM: + +```xml + + {{{groupId}}} + {{{artifactId}}} + {{{artifactVersion}}} + compile + +``` + +### Gradle users + +Add this dependency to your project's build file: + +```groovy + repositories { + mavenCentral() // Needed if the '{{{artifactId}}}' jar has been published to maven central. + mavenLocal() // Needed if the '{{{artifactId}}}' jar has been published to the local maven repo. + } + + dependencies { + implementation "{{{groupId}}}:{{{artifactId}}}:{{{artifactVersion}}}" + } +``` + +### Others + +At first generate the JAR by executing: + +```shell +mvn clean package +``` + +Then manually install the following JARs: + +* `target/{{{artifactId}}}-{{{artifactVersion}}}.jar` +* `target/lib/*.jar` + +## Getting Started + +Please follow the [installation](#installation) instruction and execute the following Java code: + +```java +{{#apiInfo}}{{#apis}}{{#-first}}{{#operations}}{{#operation}}{{#-first}} +// Import classes: +import {{{invokerPackage}}}.ApiClient; +import {{{invokerPackage}}}.ApiException; +import {{{invokerPackage}}}.Configuration;{{#hasAuthMethods}} +import {{{invokerPackage}}}.auth.*;{{/hasAuthMethods}} +import {{{modelPackage}}}.*; +import {{{package}}}.{{{classname}}}; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = Configuration.getDefaultApiClient(); + defaultClient.setBasePath("{{{basePath}}}"); + {{#withAWSV4Signature}} + // Configure AWS Signature V4 authorization + defaultClient.setAWS4Configuration("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", "REGION", "SERVICE") + {{/withAWSV4Signature}} + {{#hasAuthMethods}} + {{#authMethods}}{{#isBasic}}{{#isBasicBasic}} + // Configure HTTP basic authorization: {{{name}}} + HttpBasicAuth {{{name}}} = (HttpBasicAuth) defaultClient.getAuthentication("{{{name}}}"); + {{{name}}}.setUsername("YOUR USERNAME"); + {{{name}}}.setPassword("YOUR PASSWORD");{{/isBasicBasic}}{{#isBasicBearer}} + // Configure HTTP bearer authorization: {{{name}}} + HttpBearerAuth {{{name}}} = (HttpBearerAuth) defaultClient.getAuthentication("{{{name}}}"); + {{{name}}}.setBearerToken("BEARER TOKEN");{{/isBasicBearer}}{{/isBasic}}{{#isApiKey}} + // Configure API key authorization: {{{name}}} + ApiKeyAuth {{{name}}} = (ApiKeyAuth) defaultClient.getAuthentication("{{{name}}}"); + {{{name}}}.setApiKey("YOUR API KEY"); + // Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null) + //{{{name}}}.setApiKeyPrefix("Token");{{/isApiKey}}{{#isOAuth}} + // Configure OAuth2 access token for authorization: {{{name}}} + OAuth {{{name}}} = (OAuth) defaultClient.getAuthentication("{{{name}}}"); + {{{name}}}.setAccessToken("YOUR ACCESS TOKEN");{{/isOAuth}} + {{/authMethods}} + {{/hasAuthMethods}} + + {{{classname}}} apiInstance = new {{{classname}}}(defaultClient); + // Or create the instance with a your clientId and clientSecret (for OAuth2): + // {{{classname}}} apiInstance = new {{{classname}}}("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", null); + + {{#allParams}} + {{{dataType}}} {{{paramName}}} = {{{example}}}; // {{{dataType}}} | {{{description}}} + {{/allParams}} + try { + {{#returnType}}{{{.}}} result = {{/returnType}}apiInstance.{{{operationId}}}{{^vendorExtensions.x-group-parameters}}({{#allParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}});{{/vendorExtensions.x-group-parameters}}{{#vendorExtensions.x-group-parameters}}({{#requiredParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/requiredParams}}){{#optionalParams}} + .{{{paramName}}}({{{paramName}}}){{/optionalParams}} + .execute();{{/vendorExtensions.x-group-parameters}}{{#returnType}} + System.out.println(result);{{/returnType}} + } catch (ApiException e) { + System.err.println("Exception when calling {{{classname}}}#{{{operationId}}}"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} +{{/-first}}{{/operation}}{{/operations}}{{/-first}}{{/apis}}{{/apiInfo}} +``` + +## Documentation for API Endpoints + +All URIs are relative to *{{basePath}}* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +{{#apiInfo}}{{#apis}}{{#operations}}{{#operation}}*{{classname}}* | [**{{operationId}}**]({{apiDocPath}}{{classname}}.md#{{operationId}}) | **{{httpMethod}}** {{path}} | {{summary}} +{{/operation}}{{/operations}}{{/apis}}{{/apiInfo}} + +## Documentation for Models + +{{#models}}{{#model}} - [{{classname}}]({{modelDocPath}}{{classname}}.md) +{{/model}}{{/models}} + + +## Documentation for Authorization + +{{^authMethods}}Endpoints do not require authorization.{{/authMethods}} +{{#hasAuthMethods}}Authentication schemes defined for the API:{{/hasAuthMethods}} +{{#authMethods}} + +### {{name}} + +{{#isApiKey}}- **Type**: API key +- **API key parameter name**: {{keyParamName}} +- **Location**: {{#isKeyInQuery}}URL query string{{/isKeyInQuery}}{{#isKeyInHeader}}HTTP header{{/isKeyInHeader}} +{{/isApiKey}} +{{#isBasicBasic}}- **Type**: HTTP basic authentication +{{/isBasicBasic}} +{{#isBasicBearer}}- **Type**: HTTP Bearer Token authentication{{#bearerFormat}} ({{{.}}}){{/bearerFormat}} +{{/isBasicBearer}} +{{#isHttpSignature}}- **Type**: HTTP signature authentication +{{/isHttpSignature}} +{{#isOAuth}}- **Type**: OAuth +- **Flow**: {{flow}} +- **Authorization URL**: {{authorizationUrl}} +- **Scopes**: {{^scopes}}N/A{{/scopes}} +{{#scopes}} - {{scope}}: {{description}} +{{/scopes}} +{{/isOAuth}} + +{{/authMethods}} + +## Recommendation + +It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issues. + +## Author + +{{#apiInfo}}{{#apis}}{{#-last}}{{infoEmail}} +{{/-last}}{{/apis}}{{/apiInfo}} diff --git a/custom_templates/libraries/okhttp-gson/auth/OAuthOkHttpClient.mustache b/custom_templates/libraries/okhttp-gson/auth/OAuthOkHttpClient.mustache new file mode 100644 index 00000000..facbc974 --- /dev/null +++ b/custom_templates/libraries/okhttp-gson/auth/OAuthOkHttpClient.mustache @@ -0,0 +1,75 @@ +{{>licenseInfo}} + +{{#hasOAuthMethods}} +package {{invokerPackage}}.auth; + +import okhttp3.OkHttpClient; +import okhttp3.MediaType; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +import org.apache.oltu.oauth2.client.HttpClient; +import org.apache.oltu.oauth2.client.request.OAuthClientRequest; +import org.apache.oltu.oauth2.client.response.OAuthClientResponse; +import org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory; +import org.apache.oltu.oauth2.common.exception.OAuthProblemException; +import org.apache.oltu.oauth2.common.exception.OAuthSystemException; + +import java.io.IOException; +import java.util.Map; +import java.util.Map.Entry; + +public class OAuthOkHttpClient implements HttpClient { + private OkHttpClient client; + + public OAuthOkHttpClient() { + this.client = new OkHttpClient(); + } + + public OAuthOkHttpClient(OkHttpClient client) { + this.client = client; + } + + @Override + public T execute(OAuthClientRequest request, Map headers, + String requestMethod, Class responseClass) + throws OAuthSystemException, OAuthProblemException { + + MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); + Request.Builder requestBuilder = new Request.Builder().url(request.getLocationUri()); + + headers = request.getHeaders(); + + if(headers != null) { + for (Entry entry : headers.entrySet()) { + if (entry.getKey().equalsIgnoreCase("Content-Type")) { + mediaType = MediaType.parse(entry.getValue()); + } else { + requestBuilder.addHeader(entry.getKey(), entry.getValue()); + } + } + } + + RequestBody body = request.getBody() != null ? RequestBody.create(request.getBody(), mediaType) : null; + requestBuilder.method(requestMethod, body); + + try { + Response response = client.newCall(requestBuilder.build()).execute(); + return OAuthClientResponseFactory.createCustomResponse( + response.body().string(), + response.body().contentType().toString(), + response.code(), + response.headers().toMultimap(), + responseClass); + } catch (IOException e) { + throw new OAuthSystemException(e); + } + } + + @Override + public void shutdown() { + // Nothing to do here + } +} +{{/hasOAuthMethods}} diff --git a/custom_templates/libraries/okhttp-gson/auth/RetryingOAuth.mustache b/custom_templates/libraries/okhttp-gson/auth/RetryingOAuth.mustache new file mode 100644 index 00000000..d68b69e6 --- /dev/null +++ b/custom_templates/libraries/okhttp-gson/auth/RetryingOAuth.mustache @@ -0,0 +1,220 @@ +{{>licenseInfo}} + +{{#hasOAuthMethods}} +package {{invokerPackage}}.auth; + +import {{invokerPackage}}.ApiException; +import {{invokerPackage}}.Pair; + +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import org.apache.oltu.oauth2.client.OAuthClient; +import org.apache.oltu.oauth2.client.request.OAuthBearerClientRequest; +import org.apache.oltu.oauth2.client.request.OAuthClientRequest; +import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder; +import org.apache.oltu.oauth2.client.response.OAuthJSONAccessTokenResponse; +import org.apache.oltu.oauth2.common.exception.OAuthProblemException; +import org.apache.oltu.oauth2.common.exception.OAuthSystemException; +import org.apache.oltu.oauth2.common.message.types.GrantType; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URI; +import java.util.Map; +import java.util.List; +import java.util.Base64; + +public class RetryingOAuth extends OAuth implements Interceptor { + private OAuthClient oAuthClient; + + private TokenRequestBuilder tokenRequestBuilder; + + private String clientId; + private String clientSecret; + + /** + * @param client An OkHttp client + * @param tokenRequestBuilder A token request builder + */ + public RetryingOAuth(OkHttpClient client, TokenRequestBuilder tokenRequestBuilder) { + this.oAuthClient = new OAuthClient(new OAuthOkHttpClient(client)); + this.tokenRequestBuilder = tokenRequestBuilder; + } + + /** + * @param tokenRequestBuilder A token request builder + */ + public RetryingOAuth(TokenRequestBuilder tokenRequestBuilder) { + this(new OkHttpClient(), tokenRequestBuilder); + } + + /** + * @param tokenUrl The token URL to be used for this OAuth2 flow. + * Applicable to the following OAuth2 flows: "password", "clientCredentials" and "authorizationCode". + * The value must be an absolute URL. + * @param clientId The OAuth2 client ID for the "clientCredentials" flow. + * @param flow OAuth flow. + * @param clientSecret The OAuth2 client secret for the "clientCredentials" flow. + * @param parameters A map of string. + */ + public RetryingOAuth( + String tokenUrl, + String clientId, + OAuthFlow flow, + String clientSecret, + Map parameters + ) { + this(OAuthClientRequest.tokenLocation(tokenUrl)); + this.clientId = clientId; + this.clientSecret = clientSecret; + setFlow(flow); + if (parameters != null) { + for (Map.Entry entry : parameters.entrySet()) { + tokenRequestBuilder.setParameter(entry.getKey(), entry.getValue()); + } + } + } + + /** + * Set the OAuth flow + * + * @param flow The OAuth flow. + */ + public void setFlow(OAuthFlow flow) { + switch(flow) { + case ACCESS_CODE: + tokenRequestBuilder.setGrantType(GrantType.AUTHORIZATION_CODE); + break; + case IMPLICIT: + tokenRequestBuilder.setGrantType(GrantType.IMPLICIT); + break; + case PASSWORD: + tokenRequestBuilder.setGrantType(GrantType.PASSWORD); + break; + case APPLICATION: + tokenRequestBuilder.setGrantType(GrantType.CLIENT_CREDENTIALS); + break; + default: + break; + } + } + + @Override + public Response intercept(Chain chain) throws IOException { + return retryingIntercept(chain, true); + } + + private Response retryingIntercept(Chain chain, boolean updateTokenAndRetryOnAuthorizationFailure) throws IOException { + Request request = chain.request(); + + // If the request already has an authorization (e.g. Basic auth), proceed with the request as is + if (request.header("Authorization") != null) { + return chain.proceed(request); + } + + // Get the token if it has not yet been acquired + if (getAccessToken() == null) { + updateAccessToken(null); + } + + OAuthClientRequest oAuthRequest; + if (getAccessToken() != null) { + // Build the request + Request.Builder requestBuilder = request.newBuilder(); + + String requestAccessToken = getAccessToken(); + try { + oAuthRequest = + new OAuthBearerClientRequest(request.url().toString()). + setAccessToken(requestAccessToken). + buildHeaderMessage(); + } catch (OAuthSystemException e) { + throw new IOException(e); + } + + Map headers = oAuthRequest.getHeaders(); + for (Map.Entry entry : headers.entrySet()) { + requestBuilder.addHeader(entry.getKey(), entry.getValue()); + } + requestBuilder.url(oAuthRequest.getLocationUri()); + + // Execute the request + Response response = chain.proceed(requestBuilder.build()); + + // 401/403 response codes most likely indicate an expired access token, unless it happens two times in a row + if ( + response != null && + ( response.code() == HttpURLConnection.HTTP_UNAUTHORIZED || + response.code() == HttpURLConnection.HTTP_FORBIDDEN ) && + updateTokenAndRetryOnAuthorizationFailure + ) { + try { + if (updateAccessToken(requestAccessToken)) { + response.body().close(); + return retryingIntercept(chain, false); + } + } catch (Exception e) { + response.body().close(); + throw e; + } + } + return response; + } + else { + return chain.proceed(chain.request()); + } + } + + /** + * Returns true if the access token has been updated + * + * @param requestAccessToken the request access token + * @return True if the update is successful + * @throws java.io.IOException If fail to update the access token + */ + public synchronized boolean updateAccessToken(String requestAccessToken) throws IOException { + if (getAccessToken() == null || getAccessToken().equals(requestAccessToken)) { + try { + OAuthClientRequest req = tokenRequestBuilder.buildBodyMessage(); + String credentials = Base64.getEncoder().encodeToString((clientId + ":" + clientSecret).getBytes()); + req.setHeader("Authorization", "Basic " + credentials); + OAuthJSONAccessTokenResponse accessTokenResponse = oAuthClient.accessToken(req); + if (accessTokenResponse != null && accessTokenResponse.getAccessToken() != null) { + setAccessToken(accessTokenResponse.getAccessToken()); + } + } catch (OAuthSystemException | OAuthProblemException e) { + throw new IOException(e); + } + } + return getAccessToken() == null || !getAccessToken().equals(requestAccessToken); + } + + /** + * Gets the token request builder + * + * @return A token request builder + */ + public TokenRequestBuilder getTokenRequestBuilder() { + return tokenRequestBuilder; + } + + /** + * Sets the token request builder + * + * @param tokenRequestBuilder Token request builder + */ + public void setTokenRequestBuilder(TokenRequestBuilder tokenRequestBuilder) { + this.tokenRequestBuilder = tokenRequestBuilder; + } + + // Applying authorization to parameters is performed in the retryingIntercept method + @Override + public void applyToParams(List queryParams, Map headerParams, Map cookieParams, + String payload, String method, URI uri) throws ApiException { + // No implementation necessary + } +} +{{/hasOAuthMethods}} diff --git a/custom_templates/pom.mustache b/custom_templates/pom.mustache index 1d88b213..0a5d64c5 100644 --- a/custom_templates/pom.mustache +++ b/custom_templates/pom.mustache @@ -469,6 +469,11 @@ jakarta.ws.rs-api ${jakarta.ws.rs-api-version} + + org.json + json + 20250517 + org.junit.jupiter diff --git a/docs/CallsApi.md b/docs/CallsApi.md index 19512af8..2e9fd55f 100644 --- a/docs/CallsApi.md +++ b/docs/CallsApi.md @@ -39,6 +39,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + CallsApi apiInstance = new CallsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. CreateCall createCall = new CreateCall(); // CreateCall | JSON object containing information to create an outbound call @@ -69,7 +73,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -117,6 +121,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + CallsApi apiInstance = new CallsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -147,7 +155,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -195,6 +203,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + CallsApi apiInstance = new CallsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String to = "%2b19195551234"; // String | Filter results by the `to` field. @@ -237,7 +249,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -285,6 +297,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + CallsApi apiInstance = new CallsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -316,7 +332,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -365,6 +381,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + CallsApi apiInstance = new CallsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -399,7 +419,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/ConferencesApi.md b/docs/ConferencesApi.md index 74750e16..65124019 100644 --- a/docs/ConferencesApi.md +++ b/docs/ConferencesApi.md @@ -43,6 +43,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String conferenceId = "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"; // String | Programmable Voice API Conference ID. @@ -75,7 +79,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -123,6 +127,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String conferenceId = "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"; // String | Programmable Voice API Conference ID. @@ -153,7 +161,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -201,6 +209,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String conferenceId = "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"; // String | Programmable Voice API Conference ID. @@ -233,7 +245,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -281,6 +293,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String conferenceId = "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"; // String | Programmable Voice API Conference ID. @@ -313,7 +329,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -361,6 +377,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String conferenceId = "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"; // String | Programmable Voice API Conference ID. @@ -391,7 +411,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -439,6 +459,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String name = "my-custom-name"; // String | Filter results by the `name` field. @@ -477,7 +501,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -525,6 +549,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String conferenceId = "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"; // String | Programmable Voice API Conference ID. @@ -556,7 +584,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -604,6 +632,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String conferenceId = "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"; // String | Programmable Voice API Conference ID. @@ -638,7 +670,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -686,6 +718,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + ConferencesApi apiInstance = new ConferencesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String conferenceId = "conf-fe23a767-a75a5b77-20c5-4cca-b581-cbbf0776eca9"; // String | Programmable Voice API Conference ID. @@ -719,7 +755,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/MediaApi.md b/docs/MediaApi.md index 427119ae..4a378ea0 100644 --- a/docs/MediaApi.md +++ b/docs/MediaApi.md @@ -38,6 +38,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MediaApi apiInstance = new MediaApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String mediaId = "14762070468292kw2fuqty55yp2b2/0/bw.png"; // String | Media ID to retrieve. @@ -67,7 +71,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -115,6 +119,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MediaApi apiInstance = new MediaApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String mediaId = "14762070468292kw2fuqty55yp2b2/0/bw.png"; // String | Media ID to retrieve. @@ -145,7 +153,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -193,6 +201,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MediaApi apiInstance = new MediaApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String continuationToken = "1XEi2tsFtLo1JbtLwETnM1ZJ+PqAa8w6ENvC5QKvwyrCDYII663Gy5M4s40owR1tjkuWUif6qbWvFtQJR5/ipqbUnfAqL254LKNlPy6tATCzioKSuHuOqgzloDkSwRtX0LtcL2otHS69hK343m+SjdL+vlj71tT39"; // String | Continuation token used to retrieve subsequent media. @@ -223,7 +235,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -271,6 +283,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MediaApi apiInstance = new MediaApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String mediaId = "14762070468292kw2fuqty55yp2b2/0/bw.png"; // String | Media ID to retrieve. @@ -306,7 +322,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/MessagesApi.md b/docs/MessagesApi.md index 84135448..d10cc290 100644 --- a/docs/MessagesApi.md +++ b/docs/MessagesApi.md @@ -36,6 +36,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MessagesApi apiInstance = new MessagesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. MessageRequest messageRequest = new MessageRequest(); // MessageRequest | @@ -66,7 +70,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -115,6 +119,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MessagesApi apiInstance = new MessagesApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String messageId = "9e0df4ca-b18d-40d7-a59f-82fcdf5ae8e6"; // String | The ID of the message to search for. Special characters need to be encoded using URL encoding. Message IDs could come in different formats, e.g., 9e0df4ca-b18d-40d7-a59f-82fcdf5ae8e6 and 1589228074636lm4k2je7j7jklbn2 are valid message ID formats. Note that you must include at least one query parameter. @@ -197,7 +205,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/MfaApi.md b/docs/MfaApi.md index 34b407d2..ee184f93 100644 --- a/docs/MfaApi.md +++ b/docs/MfaApi.md @@ -37,6 +37,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MfaApi apiInstance = new MfaApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. CodeRequest codeRequest = new CodeRequest(); // CodeRequest | MFA code request body. @@ -67,7 +71,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -111,6 +115,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MfaApi apiInstance = new MfaApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. CodeRequest codeRequest = new CodeRequest(); // CodeRequest | MFA code request body. @@ -141,7 +149,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -185,6 +193,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MfaApi apiInstance = new MfaApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. VerifyCodeRequest verifyCodeRequest = new VerifyCodeRequest(); // VerifyCodeRequest | MFA code verify request body. @@ -215,7 +227,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/MultiChannelApi.md b/docs/MultiChannelApi.md index 5a6e5307..39d4040b 100644 --- a/docs/MultiChannelApi.md +++ b/docs/MultiChannelApi.md @@ -35,6 +35,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + MultiChannelApi apiInstance = new MultiChannelApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. MultiChannelMessageRequest multiChannelMessageRequest = new MultiChannelMessageRequest(); // MultiChannelMessageRequest | @@ -65,7 +69,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/PhoneNumberLookupApi.md b/docs/PhoneNumberLookupApi.md index 698d9856..38c0c987 100644 --- a/docs/PhoneNumberLookupApi.md +++ b/docs/PhoneNumberLookupApi.md @@ -37,6 +37,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + PhoneNumberLookupApi apiInstance = new PhoneNumberLookupApi(defaultClient); String accountId = "9900000"; // String | AsyncLookupRequest asyncLookupRequest = new AsyncLookupRequest(); // AsyncLookupRequest | Asynchronous bulk phone number lookup request. @@ -67,7 +71,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -108,6 +112,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + PhoneNumberLookupApi apiInstance = new PhoneNumberLookupApi(defaultClient); String accountId = "9900000"; // String | SyncLookupRequest syncLookupRequest = new SyncLookupRequest(); // SyncLookupRequest | Synchronous phone number lookup request. @@ -138,7 +146,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -179,6 +187,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + PhoneNumberLookupApi apiInstance = new PhoneNumberLookupApi(defaultClient); String accountId = "9900000"; // String | UUID requestId = UUID.fromString("004223a0-8b17-41b1-bf81-20732adf5590"); // UUID | @@ -209,7 +221,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/RecordingsApi.md b/docs/RecordingsApi.md index 42131b80..a4d479a5 100644 --- a/docs/RecordingsApi.md +++ b/docs/RecordingsApi.md @@ -44,6 +44,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -75,7 +79,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -123,6 +127,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -154,7 +162,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -202,6 +210,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -233,7 +245,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -281,6 +293,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -313,7 +329,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -361,6 +377,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -393,7 +413,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -441,6 +461,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -473,7 +497,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -521,6 +545,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String to = "%2b19195551234"; // String | Filter results by the `to` field. @@ -557,7 +585,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -605,6 +633,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -635,7 +667,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -683,6 +715,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -716,7 +752,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -764,6 +800,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + RecordingsApi apiInstance = new RecordingsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -795,7 +835,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/StatisticsApi.md b/docs/StatisticsApi.md index be38dbc8..269b3c12 100644 --- a/docs/StatisticsApi.md +++ b/docs/StatisticsApi.md @@ -35,6 +35,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + StatisticsApi apiInstance = new StatisticsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. try { @@ -63,7 +67,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/TollFreeVerificationApi.md b/docs/TollFreeVerificationApi.md index 5f187578..b0e000f7 100644 --- a/docs/TollFreeVerificationApi.md +++ b/docs/TollFreeVerificationApi.md @@ -43,6 +43,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. WebhookSubscriptionRequestSchema webhookSubscriptionRequestSchema = new WebhookSubscriptionRequestSchema(); // WebhookSubscriptionRequestSchema | Information about a webhook that Bandwidth should send upon the completion of event customer is trying to subscribe to. @@ -73,7 +77,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -121,6 +125,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String phoneNumber = "+18885555555"; // String | Valid Toll-Free telephone number in E.164 format. @@ -150,7 +158,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -198,6 +206,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String id = "7bt57JcsVYJrN9K1OcV1Nu"; // String | Webhook subscription ID @@ -227,7 +239,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -275,6 +287,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String phoneNumber = "+18885555555"; // String | Valid Toll-Free telephone number in E.164 format. @@ -305,7 +321,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -353,6 +369,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); try { List result = apiInstance.listTollFreeUseCases(); @@ -377,7 +397,7 @@ This endpoint does not need any parameter. ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -425,6 +445,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. try { @@ -453,7 +477,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -500,6 +524,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. VerificationRequest verificationRequest = new VerificationRequest(); // VerificationRequest | Request for verification of a toll-free phone number. @@ -529,7 +557,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -576,6 +604,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String phoneNumber = "+18885555555"; // String | Valid Toll-Free telephone number in E.164 format. @@ -607,7 +639,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -654,6 +686,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TollFreeVerificationApi apiInstance = new TollFreeVerificationApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String id = "7bt57JcsVYJrN9K1OcV1Nu"; // String | Webhook subscription ID @@ -686,7 +722,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/docs/TranscriptionsApi.md b/docs/TranscriptionsApi.md index ec633266..35f434ef 100644 --- a/docs/TranscriptionsApi.md +++ b/docs/TranscriptionsApi.md @@ -37,6 +37,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TranscriptionsApi apiInstance = new TranscriptionsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -68,7 +72,7 @@ null (empty response body) ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -116,6 +120,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TranscriptionsApi apiInstance = new TranscriptionsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -148,7 +156,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers @@ -196,6 +204,10 @@ public class Example { Basic.setUsername("YOUR USERNAME"); Basic.setPassword("YOUR PASSWORD"); + // Configure OAuth2 access token for authorization: OAuth2 + OAuth OAuth2 = (OAuth) defaultClient.getAuthentication("OAuth2"); + OAuth2.setAccessToken("YOUR ACCESS TOKEN"); + TranscriptionsApi apiInstance = new TranscriptionsApi(defaultClient); String accountId = "9900000"; // String | Your Bandwidth Account ID. String callId = "c-15ac29a2-1331029c-2cb0-4a07-b215-b22865662d85"; // String | Programmable Voice API Call ID. @@ -226,7 +238,7 @@ public class Example { ### Authorization -[Basic](../README.md#Basic) +[Basic](../README.md#Basic), [OAuth2](../README.md#OAuth2) ### HTTP request headers diff --git a/pom.xml b/pom.xml index 1f42da35..7f70c977 100644 --- a/pom.xml +++ b/pom.xml @@ -361,6 +361,11 @@ gson-fire ${gson-fire-version} + + org.apache.oltu.oauth2 + org.apache.oltu.oauth2.client + 1.0.2 + org.apache.commons commons-lang3 @@ -387,6 +392,11 @@ jakarta.ws.rs-api ${jakarta.ws.rs-api-version} + + org.json + json + 20250517 + org.junit.jupiter diff --git a/sdfg b/sdfg new file mode 100644 index 00000000..e69de29b diff --git a/src/main/java/com/bandwidth/sdk/ApiClient.java b/src/main/java/com/bandwidth/sdk/ApiClient.java index 63401aa2..f40a69a2 100644 --- a/src/main/java/com/bandwidth/sdk/ApiClient.java +++ b/src/main/java/com/bandwidth/sdk/ApiClient.java @@ -21,6 +21,8 @@ import okio.Buffer; import okio.BufferedSink; import okio.Okio; +import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder; +import org.apache.oltu.oauth2.common.message.types.GrantType; import javax.net.ssl.*; import java.io.File; @@ -55,6 +57,9 @@ import com.bandwidth.sdk.auth.HttpBasicAuth; import com.bandwidth.sdk.auth.HttpBearerAuth; import com.bandwidth.sdk.auth.ApiKeyAuth; +import com.bandwidth.sdk.auth.OAuth; +import com.bandwidth.sdk.auth.RetryingOAuth; +import com.bandwidth.sdk.auth.OAuthFlow; /** *

ApiClient class.

@@ -101,6 +106,7 @@ public ApiClient() { // Setup authentications (key: authentication name, value: authentication). authentications.put("Basic", new HttpBasicAuth()); + authentications.put("OAuth2", new OAuth()); // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } @@ -117,6 +123,74 @@ public ApiClient(OkHttpClient client) { // Setup authentications (key: authentication name, value: authentication). authentications.put("Basic", new HttpBasicAuth()); + authentications.put("OAuth2", new OAuth()); + // Prevent the authentications from being modified. + authentications = Collections.unmodifiableMap(authentications); + } + + /** + * Constructor for ApiClient to support access token retry on 401/403 configured with client ID + * + * @param clientId client ID + */ + public ApiClient(String clientId) { + this(clientId, null, null); + } + + /** + * Constructor for ApiClient to support access token retry on 401/403 configured with client ID and additional parameters + * + * @param clientId client ID + * @param parameters a {@link java.util.Map} of parameters + */ + public ApiClient(String clientId, Map parameters) { + this(clientId, null, parameters); + } + + /** + * Constructor for ApiClient to support access token retry on 401/403 configured with client ID, secret, and additional parameters + * + * @param clientId client ID + * @param clientSecret client secret + * @param parameters a {@link java.util.Map} of parameters + */ + public ApiClient(String clientId, String clientSecret, Map parameters) { + this(null, clientId, clientSecret, parameters); + } + + /** + * Constructor for ApiClient to support access token retry on 401/403 configured with base path, client ID, secret, and additional parameters + * + * @param basePath base path + * @param clientId client ID + * @param clientSecret client secret + * @param parameters a {@link java.util.Map} of parameters + */ + public ApiClient(String basePath, String clientId, String clientSecret, Map parameters) { + init(); + if (basePath != null) { + this.basePath = basePath; + } + + String tokenUrl = "https://api.bandwidth.com/api/v1/oauth2/token"; + if (!"".equals(tokenUrl) && !URI.create(tokenUrl).isAbsolute()) { + URI uri = URI.create(getBasePath()); + tokenUrl = uri.getScheme() + ":" + + (uri.getAuthority() != null ? "//" + uri.getAuthority() : "") + + tokenUrl; + if (!URI.create(tokenUrl).isAbsolute()) { + throw new IllegalArgumentException("OAuth2 token URL must be an absolute URL"); + } + } + RetryingOAuth retryingOAuth = new RetryingOAuth(tokenUrl, clientId, OAuthFlow.APPLICATION, clientSecret, parameters); + authentications.put( + "OAuth2", + retryingOAuth + ); + initHttpClient(Collections.singletonList(retryingOAuth)); + // Setup authentications (key: authentication name, value: authentication). + authentications.put("Basic", new HttpBasicAuth()); + // Prevent the authentications from being modified. authentications = Collections.unmodifiableMap(authentications); } @@ -452,6 +526,12 @@ public void setApiKeyPrefix(String apiKeyPrefix) { * @param accessToken Access token */ public void setAccessToken(String accessToken) { + for (Authentication auth : authentications.values()) { + if (auth instanceof OAuth) { + ((OAuth) auth).setAccessToken(accessToken); + return; + } + } throw new RuntimeException("No OAuth2 authentication configured!"); } @@ -636,6 +716,20 @@ public ApiClient setWriteTimeout(int writeTimeout) { return this; } + /** + * Helper method to configure the token endpoint of the first oauth found in the apiAuthorizations (there should be only one) + * + * @return Token request builder + */ + public TokenRequestBuilder getTokenEndPoint() { + for (Authentication apiAuth : authentications.values()) { + if (apiAuth instanceof RetryingOAuth) { + RetryingOAuth retryingOAuth = (RetryingOAuth) apiAuth; + return retryingOAuth.getTokenRequestBuilder(); + } + } + return null; + } /** * Format the given parameter object into string. diff --git a/src/main/java/com/bandwidth/sdk/api/CallsApi.java b/src/main/java/com/bandwidth/sdk/api/CallsApi.java index fbf70f46..52de6ace 100644 --- a/src/main/java/com/bandwidth/sdk/api/CallsApi.java +++ b/src/main/java/com/bandwidth/sdk/api/CallsApi.java @@ -140,7 +140,7 @@ public okhttp3.Call createCallCall(@javax.annotation.Nonnull String accountId, @ localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -309,7 +309,7 @@ public okhttp3.Call getCallStateCall(@javax.annotation.Nonnull String accountId, localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -511,7 +511,7 @@ public okhttp3.Call listCallsCall(@javax.annotation.Nonnull String accountId, @j localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -696,7 +696,7 @@ public okhttp3.Call updateCallCall(@javax.annotation.Nonnull String accountId, @ localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -875,7 +875,7 @@ public okhttp3.Call updateCallBxmlCall(@javax.annotation.Nonnull String accountI localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/ConferencesApi.java b/src/main/java/com/bandwidth/sdk/api/ConferencesApi.java index 02951333..23ca9f91 100644 --- a/src/main/java/com/bandwidth/sdk/api/ConferencesApi.java +++ b/src/main/java/com/bandwidth/sdk/api/ConferencesApi.java @@ -146,7 +146,7 @@ public okhttp3.Call downloadConferenceRecordingCall(@javax.annotation.Nonnull St localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -323,7 +323,7 @@ public okhttp3.Call getConferenceCall(@javax.annotation.Nonnull String accountId localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -494,7 +494,7 @@ public okhttp3.Call getConferenceMemberCall(@javax.annotation.Nonnull String acc localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -673,7 +673,7 @@ public okhttp3.Call getConferenceRecordingCall(@javax.annotation.Nonnull String localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -850,7 +850,7 @@ public okhttp3.Call listConferenceRecordingsCall(@javax.annotation.Nonnull Strin localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1042,7 +1042,7 @@ public okhttp3.Call listConferencesCall(@javax.annotation.Nonnull String account localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1220,7 +1220,7 @@ public okhttp3.Call updateConferenceCall(@javax.annotation.Nonnull String accoun localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1395,7 +1395,7 @@ public okhttp3.Call updateConferenceBxmlCall(@javax.annotation.Nonnull String ac localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1572,7 +1572,7 @@ public okhttp3.Call updateConferenceMemberCall(@javax.annotation.Nonnull String localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/MediaApi.java b/src/main/java/com/bandwidth/sdk/api/MediaApi.java index d0e2cf9d..755d07e0 100644 --- a/src/main/java/com/bandwidth/sdk/api/MediaApi.java +++ b/src/main/java/com/bandwidth/sdk/api/MediaApi.java @@ -138,7 +138,7 @@ public okhttp3.Call deleteMediaCall(@javax.annotation.Nonnull String accountId, localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -304,7 +304,7 @@ public okhttp3.Call getMediaCall(@javax.annotation.Nonnull String accountId, @ja localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -477,7 +477,7 @@ public okhttp3.Call listMediaCall(@javax.annotation.Nonnull String accountId, @j } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -702,7 +702,7 @@ public okhttp3.Call uploadMediaCall(@javax.annotation.Nonnull String accountId, } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/MessagesApi.java b/src/main/java/com/bandwidth/sdk/api/MessagesApi.java index 3f438b59..12a1001f 100644 --- a/src/main/java/com/bandwidth/sdk/api/MessagesApi.java +++ b/src/main/java/com/bandwidth/sdk/api/MessagesApi.java @@ -145,7 +145,7 @@ public okhttp3.Call createMessageCall(@javax.annotation.Nonnull String accountId localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -449,7 +449,7 @@ public okhttp3.Call listMessagesCall(@javax.annotation.Nonnull String accountId, localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/MfaApi.java b/src/main/java/com/bandwidth/sdk/api/MfaApi.java index 453d09d4..d5920bc8 100644 --- a/src/main/java/com/bandwidth/sdk/api/MfaApi.java +++ b/src/main/java/com/bandwidth/sdk/api/MfaApi.java @@ -139,7 +139,7 @@ public okhttp3.Call generateMessagingCodeCall(@javax.annotation.Nonnull String a localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -292,7 +292,7 @@ public okhttp3.Call generateVoiceCodeCall(@javax.annotation.Nonnull String accou localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -446,7 +446,7 @@ public okhttp3.Call verifyCodeCall(@javax.annotation.Nonnull String accountId, @ localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/MultiChannelApi.java b/src/main/java/com/bandwidth/sdk/api/MultiChannelApi.java index 7ac63f0f..19487ce3 100644 --- a/src/main/java/com/bandwidth/sdk/api/MultiChannelApi.java +++ b/src/main/java/com/bandwidth/sdk/api/MultiChannelApi.java @@ -139,7 +139,7 @@ public okhttp3.Call createMultiChannelMessageCall(@javax.annotation.Nonnull Stri localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/PhoneNumberLookupApi.java b/src/main/java/com/bandwidth/sdk/api/PhoneNumberLookupApi.java index c018f821..163ec2dc 100644 --- a/src/main/java/com/bandwidth/sdk/api/PhoneNumberLookupApi.java +++ b/src/main/java/com/bandwidth/sdk/api/PhoneNumberLookupApi.java @@ -135,7 +135,7 @@ public okhttp3.Call createAsyncBulkLookupCall(@javax.annotation.Nonnull String a localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -276,7 +276,7 @@ public okhttp3.Call createSyncLookupCall(@javax.annotation.Nonnull String accoun localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -417,7 +417,7 @@ public okhttp3.Call getAsyncBulkLookupCall(@javax.annotation.Nonnull String acco localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/RecordingsApi.java b/src/main/java/com/bandwidth/sdk/api/RecordingsApi.java index 894bc284..6c91a4d8 100644 --- a/src/main/java/com/bandwidth/sdk/api/RecordingsApi.java +++ b/src/main/java/com/bandwidth/sdk/api/RecordingsApi.java @@ -143,7 +143,7 @@ public okhttp3.Call deleteRecordingCall(@javax.annotation.Nonnull String account localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -318,7 +318,7 @@ public okhttp3.Call deleteRecordingMediaCall(@javax.annotation.Nonnull String ac localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -493,7 +493,7 @@ public okhttp3.Call deleteRecordingTranscriptionCall(@javax.annotation.Nonnull S localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -670,7 +670,7 @@ public okhttp3.Call downloadCallRecordingCall(@javax.annotation.Nonnull String a localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -849,7 +849,7 @@ public okhttp3.Call getCallRecordingCall(@javax.annotation.Nonnull String accoun localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1028,7 +1028,7 @@ public okhttp3.Call getRecordingTranscriptionCall(@javax.annotation.Nonnull Stri localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1223,7 +1223,7 @@ public okhttp3.Call listAccountCallRecordingsCall(@javax.annotation.Nonnull Stri localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1396,7 +1396,7 @@ public okhttp3.Call listCallRecordingsCall(@javax.annotation.Nonnull String acco localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1569,7 +1569,7 @@ public okhttp3.Call transcribeCallRecordingCall(@javax.annotation.Nonnull String localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1752,7 +1752,7 @@ public okhttp3.Call updateCallRecordingStateCall(@javax.annotation.Nonnull Strin localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/StatisticsApi.java b/src/main/java/com/bandwidth/sdk/api/StatisticsApi.java index f03cdf75..3e14cbc7 100644 --- a/src/main/java/com/bandwidth/sdk/api/StatisticsApi.java +++ b/src/main/java/com/bandwidth/sdk/api/StatisticsApi.java @@ -135,7 +135,7 @@ public okhttp3.Call getStatisticsCall(@javax.annotation.Nonnull String accountId localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/TollFreeVerificationApi.java b/src/main/java/com/bandwidth/sdk/api/TollFreeVerificationApi.java index 5241ddc4..df41729d 100644 --- a/src/main/java/com/bandwidth/sdk/api/TollFreeVerificationApi.java +++ b/src/main/java/com/bandwidth/sdk/api/TollFreeVerificationApi.java @@ -142,7 +142,7 @@ public okhttp3.Call createWebhookSubscriptionCall(@javax.annotation.Nonnull Stri localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -311,7 +311,7 @@ public okhttp3.Call deleteVerificationRequestCall(@javax.annotation.Nonnull Stri localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -476,7 +476,7 @@ public okhttp3.Call deleteWebhookSubscriptionCall(@javax.annotation.Nonnull Stri localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -641,7 +641,7 @@ public okhttp3.Call getTollFreeVerificationStatusCall(@javax.annotation.Nonnull localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -806,7 +806,7 @@ public okhttp3.Call listTollFreeUseCasesCall(final ApiCallback _callback) throws localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -956,7 +956,7 @@ public okhttp3.Call listWebhookSubscriptionsCall(@javax.annotation.Nonnull Strin localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1113,7 +1113,7 @@ public okhttp3.Call requestTollFreeVerificationCall(@javax.annotation.Nonnull St localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1276,7 +1276,7 @@ public okhttp3.Call updateTollFreeVerificationRequestCall(@javax.annotation.Nonn localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -1448,7 +1448,7 @@ public okhttp3.Call updateWebhookSubscriptionCall(@javax.annotation.Nonnull Stri localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/api/TranscriptionsApi.java b/src/main/java/com/bandwidth/sdk/api/TranscriptionsApi.java index acb29d91..0c0e42d3 100644 --- a/src/main/java/com/bandwidth/sdk/api/TranscriptionsApi.java +++ b/src/main/java/com/bandwidth/sdk/api/TranscriptionsApi.java @@ -140,7 +140,7 @@ public okhttp3.Call deleteRealTimeTranscriptionCall(@javax.annotation.Nonnull St localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -315,7 +315,7 @@ public okhttp3.Call getRealTimeTranscriptionCall(@javax.annotation.Nonnull Strin localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } @@ -492,7 +492,7 @@ public okhttp3.Call listRealTimeTranscriptionsCall(@javax.annotation.Nonnull Str localVarHeaderParams.put("Content-Type", localVarContentType); } - String[] localVarAuthNames = new String[] { "Basic" }; + String[] localVarAuthNames = new String[] { "Basic", "OAuth2" }; return localVarApiClient.buildCall(basePath, localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback); } diff --git a/src/main/java/com/bandwidth/sdk/auth/OAuth.java b/src/main/java/com/bandwidth/sdk/auth/OAuth.java new file mode 100644 index 00000000..4b75be15 --- /dev/null +++ b/src/main/java/com/bandwidth/sdk/auth/OAuth.java @@ -0,0 +1,42 @@ +/* + * Bandwidth + * Bandwidth's Communication APIs + * + * The version of the OpenAPI document: 1.0.0 + * Contact: letstalk@bandwidth.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.bandwidth.sdk.auth; + +import com.bandwidth.sdk.Pair; +import com.bandwidth.sdk.ApiException; + +import java.net.URI; +import java.util.Map; +import java.util.List; + +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.17.0") +public class OAuth implements Authentication { + private String accessToken; + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + @Override + public void applyToParams(List queryParams, Map headerParams, Map cookieParams, + String payload, String method, URI uri) throws ApiException { + if (accessToken != null) { + headerParams.put("Authorization", "Bearer " + accessToken); + } + } +} diff --git a/src/main/java/com/bandwidth/sdk/auth/OAuthFlow.java b/src/main/java/com/bandwidth/sdk/auth/OAuthFlow.java new file mode 100644 index 00000000..56a889ba --- /dev/null +++ b/src/main/java/com/bandwidth/sdk/auth/OAuthFlow.java @@ -0,0 +1,25 @@ +/* + * Bandwidth + * Bandwidth's Communication APIs + * + * The version of the OpenAPI document: 1.0.0 + * Contact: letstalk@bandwidth.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.bandwidth.sdk.auth; + +/** + * OAuth flows that are supported by this client + */ +@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.17.0") +public enum OAuthFlow { + ACCESS_CODE, //called authorizationCode in OpenAPI 3.0 + IMPLICIT, + PASSWORD, + APPLICATION //called clientCredentials in OpenAPI 3.0 +} diff --git a/src/main/java/com/bandwidth/sdk/auth/OAuthOkHttpClient.java b/src/main/java/com/bandwidth/sdk/auth/OAuthOkHttpClient.java new file mode 100644 index 00000000..ae19b927 --- /dev/null +++ b/src/main/java/com/bandwidth/sdk/auth/OAuthOkHttpClient.java @@ -0,0 +1,84 @@ +/* + * Bandwidth + * Bandwidth's Communication APIs + * + * The version of the OpenAPI document: 1.0.0 + * Contact: letstalk@bandwidth.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.bandwidth.sdk.auth; + +import okhttp3.OkHttpClient; +import okhttp3.MediaType; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +import org.apache.oltu.oauth2.client.HttpClient; +import org.apache.oltu.oauth2.client.request.OAuthClientRequest; +import org.apache.oltu.oauth2.client.response.OAuthClientResponse; +import org.apache.oltu.oauth2.client.response.OAuthClientResponseFactory; +import org.apache.oltu.oauth2.common.exception.OAuthProblemException; +import org.apache.oltu.oauth2.common.exception.OAuthSystemException; + +import java.io.IOException; +import java.util.Map; +import java.util.Map.Entry; + +public class OAuthOkHttpClient implements HttpClient { + private OkHttpClient client; + + public OAuthOkHttpClient() { + this.client = new OkHttpClient(); + } + + public OAuthOkHttpClient(OkHttpClient client) { + this.client = client; + } + + @Override + public T execute(OAuthClientRequest request, Map headers, + String requestMethod, Class responseClass) + throws OAuthSystemException, OAuthProblemException { + + MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); + Request.Builder requestBuilder = new Request.Builder().url(request.getLocationUri()); + + headers = request.getHeaders(); + + if(headers != null) { + for (Entry entry : headers.entrySet()) { + if (entry.getKey().equalsIgnoreCase("Content-Type")) { + mediaType = MediaType.parse(entry.getValue()); + } else { + requestBuilder.addHeader(entry.getKey(), entry.getValue()); + } + } + } + + RequestBody body = request.getBody() != null ? RequestBody.create(request.getBody(), mediaType) : null; + requestBuilder.method(requestMethod, body); + + try { + Response response = client.newCall(requestBuilder.build()).execute(); + return OAuthClientResponseFactory.createCustomResponse( + response.body().string(), + response.body().contentType().toString(), + response.code(), + response.headers().toMultimap(), + responseClass); + } catch (IOException e) { + throw new OAuthSystemException(e); + } + } + + @Override + public void shutdown() { + // Nothing to do here + } +} diff --git a/src/main/java/com/bandwidth/sdk/auth/RetryingOAuth.java b/src/main/java/com/bandwidth/sdk/auth/RetryingOAuth.java new file mode 100644 index 00000000..f943cda7 --- /dev/null +++ b/src/main/java/com/bandwidth/sdk/auth/RetryingOAuth.java @@ -0,0 +1,229 @@ +/* + * Bandwidth + * Bandwidth's Communication APIs + * + * The version of the OpenAPI document: 1.0.0 + * Contact: letstalk@bandwidth.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +package com.bandwidth.sdk.auth; + +import com.bandwidth.sdk.ApiException; +import com.bandwidth.sdk.Pair; + +import okhttp3.Interceptor; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +import org.apache.oltu.oauth2.client.OAuthClient; +import org.apache.oltu.oauth2.client.request.OAuthBearerClientRequest; +import org.apache.oltu.oauth2.client.request.OAuthClientRequest; +import org.apache.oltu.oauth2.client.request.OAuthClientRequest.TokenRequestBuilder; +import org.apache.oltu.oauth2.client.response.OAuthJSONAccessTokenResponse; +import org.apache.oltu.oauth2.common.exception.OAuthProblemException; +import org.apache.oltu.oauth2.common.exception.OAuthSystemException; +import org.apache.oltu.oauth2.common.message.types.GrantType; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URI; +import java.util.Map; +import java.util.List; +import java.util.Base64; + +public class RetryingOAuth extends OAuth implements Interceptor { + private OAuthClient oAuthClient; + + private TokenRequestBuilder tokenRequestBuilder; + + private String clientId; + private String clientSecret; + + /** + * @param client An OkHttp client + * @param tokenRequestBuilder A token request builder + */ + public RetryingOAuth(OkHttpClient client, TokenRequestBuilder tokenRequestBuilder) { + this.oAuthClient = new OAuthClient(new OAuthOkHttpClient(client)); + this.tokenRequestBuilder = tokenRequestBuilder; + } + + /** + * @param tokenRequestBuilder A token request builder + */ + public RetryingOAuth(TokenRequestBuilder tokenRequestBuilder) { + this(new OkHttpClient(), tokenRequestBuilder); + } + + /** + * @param tokenUrl The token URL to be used for this OAuth2 flow. + * Applicable to the following OAuth2 flows: "password", "clientCredentials" and "authorizationCode". + * The value must be an absolute URL. + * @param clientId The OAuth2 client ID for the "clientCredentials" flow. + * @param flow OAuth flow. + * @param clientSecret The OAuth2 client secret for the "clientCredentials" flow. + * @param parameters A map of string. + */ + public RetryingOAuth( + String tokenUrl, + String clientId, + OAuthFlow flow, + String clientSecret, + Map parameters + ) { + this(OAuthClientRequest.tokenLocation(tokenUrl)); + this.clientId = clientId; + this.clientSecret = clientSecret; + setFlow(flow); + if (parameters != null) { + for (Map.Entry entry : parameters.entrySet()) { + tokenRequestBuilder.setParameter(entry.getKey(), entry.getValue()); + } + } + } + + /** + * Set the OAuth flow + * + * @param flow The OAuth flow. + */ + public void setFlow(OAuthFlow flow) { + switch(flow) { + case ACCESS_CODE: + tokenRequestBuilder.setGrantType(GrantType.AUTHORIZATION_CODE); + break; + case IMPLICIT: + tokenRequestBuilder.setGrantType(GrantType.IMPLICIT); + break; + case PASSWORD: + tokenRequestBuilder.setGrantType(GrantType.PASSWORD); + break; + case APPLICATION: + tokenRequestBuilder.setGrantType(GrantType.CLIENT_CREDENTIALS); + break; + default: + break; + } + } + + @Override + public Response intercept(Chain chain) throws IOException { + return retryingIntercept(chain, true); + } + + private Response retryingIntercept(Chain chain, boolean updateTokenAndRetryOnAuthorizationFailure) throws IOException { + Request request = chain.request(); + + // If the request already has an authorization (e.g. Basic auth), proceed with the request as is + if (request.header("Authorization") != null) { + return chain.proceed(request); + } + + // Get the token if it has not yet been acquired + if (getAccessToken() == null) { + updateAccessToken(null); + } + + OAuthClientRequest oAuthRequest; + if (getAccessToken() != null) { + // Build the request + Request.Builder requestBuilder = request.newBuilder(); + + String requestAccessToken = getAccessToken(); + try { + oAuthRequest = + new OAuthBearerClientRequest(request.url().toString()). + setAccessToken(requestAccessToken). + buildHeaderMessage(); + } catch (OAuthSystemException e) { + throw new IOException(e); + } + + Map headers = oAuthRequest.getHeaders(); + for (Map.Entry entry : headers.entrySet()) { + requestBuilder.addHeader(entry.getKey(), entry.getValue()); + } + requestBuilder.url(oAuthRequest.getLocationUri()); + + // Execute the request + Response response = chain.proceed(requestBuilder.build()); + + // 401/403 response codes most likely indicate an expired access token, unless it happens two times in a row + if ( + response != null && + ( response.code() == HttpURLConnection.HTTP_UNAUTHORIZED || + response.code() == HttpURLConnection.HTTP_FORBIDDEN ) && + updateTokenAndRetryOnAuthorizationFailure + ) { + try { + if (updateAccessToken(requestAccessToken)) { + response.body().close(); + return retryingIntercept(chain, false); + } + } catch (Exception e) { + response.body().close(); + throw e; + } + } + return response; + } + else { + return chain.proceed(chain.request()); + } + } + + /** + * Returns true if the access token has been updated + * + * @param requestAccessToken the request access token + * @return True if the update is successful + * @throws java.io.IOException If fail to update the access token + */ + public synchronized boolean updateAccessToken(String requestAccessToken) throws IOException { + if (getAccessToken() == null || getAccessToken().equals(requestAccessToken)) { + try { + OAuthClientRequest req = tokenRequestBuilder.buildBodyMessage(); + String credentials = Base64.getEncoder().encodeToString((clientId + ":" + clientSecret).getBytes()); + req.setHeader("Authorization", "Basic " + credentials); + OAuthJSONAccessTokenResponse accessTokenResponse = oAuthClient.accessToken(req); + if (accessTokenResponse != null && accessTokenResponse.getAccessToken() != null) { + setAccessToken(accessTokenResponse.getAccessToken()); + } + } catch (OAuthSystemException | OAuthProblemException e) { + throw new IOException(e); + } + } + return getAccessToken() == null || !getAccessToken().equals(requestAccessToken); + } + + /** + * Gets the token request builder + * + * @return A token request builder + */ + public TokenRequestBuilder getTokenRequestBuilder() { + return tokenRequestBuilder; + } + + /** + * Sets the token request builder + * + * @param tokenRequestBuilder Token request builder + */ + public void setTokenRequestBuilder(TokenRequestBuilder tokenRequestBuilder) { + this.tokenRequestBuilder = tokenRequestBuilder; + } + + // Applying authorization to parameters is performed in the retryingIntercept method + @Override + public void applyToParams(List queryParams, Map headerParams, Map cookieParams, + String payload, String method, URI uri) throws ApiException { + // No implementation necessary + } +} diff --git a/src/test/java/com/bandwidth/sdk/smoke/CallsApiTest.java b/src/test/java/com/bandwidth/sdk/smoke/CallsApiTest.java index b1223dbf..04c9ddda 100644 --- a/src/test/java/com/bandwidth/sdk/smoke/CallsApiTest.java +++ b/src/test/java/com/bandwidth/sdk/smoke/CallsApiTest.java @@ -4,8 +4,6 @@ import com.bandwidth.sdk.ApiResponse; import com.bandwidth.sdk.ApiException; import com.bandwidth.sdk.ApiClient; -import com.bandwidth.sdk.auth.HttpBasicAuth; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.model.CallbackMethodEnum; import com.bandwidth.sdk.model.CreateCall; import com.bandwidth.sdk.model.CreateCallResponse; @@ -40,12 +38,12 @@ import static com.bandwidth.sdk.utils.TestingEnvironmentVariables.*; import static com.bandwidth.sdk.utils.CallCleanup.Cleanup; +@SuppressWarnings("null") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class CallsApiTest { - public ApiClient defaultClient = Configuration.getDefaultApiClient(); - public HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - public final CallsApi api = new CallsApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + public final CallsApi api = new CallsApi(oauthClient); private static List callIdList = new ArrayList(); private static MachineDetectionConfiguration machineDetection = new MachineDetectionConfiguration(); @@ -132,9 +130,6 @@ public void tearDownAfterClass() throws Exception { @Test @Order(1) public void createCall() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - ApiResponse response = api.createCallWithHttpInfo(BW_ACCOUNT_ID, createCallBody); callIdList.add(response.getData().getCallId()); @@ -148,9 +143,6 @@ public void createCall() throws ApiException { @Test public void createCallBadRequest() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - CreateCall badCallRequest = new CreateCall(); createCallBody.setTo("invalid_number"); createCallBody.setFrom(BW_NUMBER); @@ -163,45 +155,8 @@ public void createCallBadRequest() throws ApiException { assertThat(exception.getCode(), is(400)); } - @Test - public void createCallUnauthorized() throws ApiException { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - CreateCall badCallRequest = new CreateCall(); - createCallBody.setTo("invalid_number"); - createCallBody.setFrom(BW_NUMBER); - createCallBody.setApplicationId(BW_VOICE_APPLICATION_ID); - createCallBody.setAnswerUrl(answerUrl); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.createCallWithHttpInfo(BW_ACCOUNT_ID, badCallRequest)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void createCallForbidden() throws ApiException { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - CreateCall badCallRequest = new CreateCall(); - createCallBody.setTo("invalid_number"); - createCallBody.setFrom(BW_NUMBER); - createCallBody.setApplicationId(BW_VOICE_APPLICATION_ID); - createCallBody.setAnswerUrl(answerUrl); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.createCallWithHttpInfo(BW_ACCOUNT_ID, badCallRequest)); - - assertThat(exception.getCode(), is(403)); - } - @Test public void getCalls() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - ApiResponse> response = api.listCallsWithHttpInfo(BW_ACCOUNT_ID, USER_NUMBER, BW_NUMBER, null, null, null, null, null); @@ -220,9 +175,6 @@ public void getCalls() throws ApiException { @Test @Order(2) public void getCallState() throws ApiException, InterruptedException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - TimeUnit.SECONDS.sleep(40); ApiResponse response = api.getCallStateWithHttpInfo(BW_ACCOUNT_ID, callIdList.get(0)); @@ -232,33 +184,8 @@ public void getCallState() throws ApiException, InterruptedException { assertThat(response.getData(), hasProperty("direction", is(CallDirectionEnum.OUTBOUND))); } - @Test - public void getCallStateUnauthorized() throws ApiException { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.getCallStateWithHttpInfo(BW_ACCOUNT_ID, "not a call id")); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void getCallStateForbidden() throws ApiException { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.getCallStateWithHttpInfo(BW_ACCOUNT_ID, "not a call id")); - - assertThat(exception.getCode(), is(403)); - } - @Test public void getCallStateNotFound() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - ApiException exception = Assertions.assertThrows(ApiException.class, () -> api.getCallStateWithHttpInfo(BW_ACCOUNT_ID, "not a call id")); @@ -268,9 +195,6 @@ public void getCallStateNotFound() throws ApiException { @Test @Order(3) public void updateCall() throws ApiException, InterruptedException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - // Create call TimeUnit.SECONDS.sleep(TEST_SLEEP); ApiResponse createCallResponse = api.createCallWithHttpInfo(BW_ACCOUNT_ID, @@ -296,9 +220,6 @@ public void updateCall() throws ApiException, InterruptedException { @Test public void updateCallBadRequest() throws ApiException, InterruptedException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - UpdateCall badRequest = new UpdateCall(); badRequest.state(null); @@ -314,36 +235,8 @@ public void updateCallBadRequest() throws ApiException, InterruptedException { assertThat(exception.getCode(), is(400)); } - @Test - public void updateCallUnauthorized() throws ApiException { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.updateCallWithHttpInfo(BW_ACCOUNT_ID, testCallId, - new UpdateCall().state(CallStateEnum.COMPLETED))); - - assertThat(exception.getCode(), is(401)); - - } - - @Test - public void updateCallForbidden() throws ApiException { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.updateCallWithHttpInfo(BW_ACCOUNT_ID, testCallId, - new UpdateCall().state(CallStateEnum.COMPLETED))); - - assertThat(exception.getCode(), is(403)); - } - @Test public void updateCallNotFound() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - ApiException exception = Assertions.assertThrows(ApiException.class, () -> api.updateCallWithHttpInfo(BW_ACCOUNT_ID, testCallId, new UpdateCall().state(CallStateEnum.COMPLETED))); @@ -354,9 +247,6 @@ public void updateCallNotFound() throws ApiException { @Test @Order(4) public void updateCallBxml() throws ApiException, InterruptedException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - // Create call TimeUnit.SECONDS.sleep(TEST_SLEEP); ApiResponse createCallResponse = api.createCallWithHttpInfo(BW_ACCOUNT_ID, @@ -379,45 +269,4 @@ public void updateCallBxml() throws ApiException, InterruptedException { assertThat(completeCallResponse.getStatusCode(), is(200)); } - - @Test - public void updateCallBxmlBadRequest() throws ApiException { - - } - - @Test - public void updateCallBxmlUnauthorized() throws ApiException { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.updateCallBxmlWithHttpInfo(BW_ACCOUNT_ID, testCallId, - testXmlBody)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void updateCallBxmlForbidden() throws ApiException { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.updateCallBxmlWithHttpInfo(BW_ACCOUNT_ID, testCallId, - testXmlBody)); - - assertThat(exception.getCode(), is(403)); - } - - @Test - public void updateCallBxmlNotFound() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> api.updateCallBxmlWithHttpInfo(BW_ACCOUNT_ID, testCallId, - testXmlBody)); - - assertThat(exception.getCode(), is(404)); - } } diff --git a/src/test/java/com/bandwidth/sdk/smoke/ConferencesApiTest.java b/src/test/java/com/bandwidth/sdk/smoke/ConferencesApiTest.java index fdbbdd62..e9cb6ab3 100644 --- a/src/test/java/com/bandwidth/sdk/smoke/ConferencesApiTest.java +++ b/src/test/java/com/bandwidth/sdk/smoke/ConferencesApiTest.java @@ -4,8 +4,6 @@ import com.bandwidth.sdk.api.ConferencesApi; import com.bandwidth.sdk.ApiResponse; import com.bandwidth.sdk.ApiClient; -import com.bandwidth.sdk.auth.HttpBasicAuth; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.model.ConferenceRecordingMetadata; import com.bandwidth.sdk.model.ConferenceStateEnum; import com.bandwidth.sdk.model.CreateCall; @@ -48,13 +46,13 @@ import static com.bandwidth.sdk.utils.TestingEnvironmentVariables.*; import static com.bandwidth.sdk.utils.CallCleanup.Cleanup; +@SuppressWarnings("null") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class ConferencesApiTest { - public ApiClient defaultClient = Configuration.getDefaultApiClient(); - public HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - public final CallsApi callsApi = new CallsApi(defaultClient); - public final ConferencesApi conferencesApi = new ConferencesApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + public final CallsApi callsApi = new CallsApi(oauthClient); + public final ConferencesApi conferencesApi = new ConferencesApi(oauthClient); private static final OkHttpClient mantecaClient = new OkHttpClient(); public static final MediaType jsonMediaType = MediaType.get("application/json; charset=utf-8"); @@ -118,9 +116,6 @@ public Boolean getTestRecordedStatus(String mantecaTestId) throws Exception { @Test @Order(1) public void testCreateAndFetchConference() throws Exception { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - String mantecaJsonBody = constructMantecaJsonBody(OPERATING_SYSTEM, JAVA_VERSION); RequestBody mantecaRequestBody = RequestBody.create(mantecaJsonBody, jsonMediaType); @@ -171,9 +166,6 @@ public void testCreateAndFetchConference() throws Exception { @Test @Order(2) public void testConferenceAndMembers() throws Exception { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - ApiResponse listConferenceMembersResponse = conferencesApi .getConferenceMemberWithHttpInfo(BW_ACCOUNT_ID, conferenceId, callId); assertThat(listConferenceMembersResponse.getStatusCode(), is(200)); @@ -210,9 +202,6 @@ public void testConferenceAndMembers() throws Exception { @Order(3) @Disabled // issues with PV API, can re-enable after fixed public void testConferenceRecordings() throws Exception { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - Boolean testRecordingStatus = false; for (int i = 0; i < MAX_RETRIES; i++) { TimeUnit.SECONDS.sleep(TEST_SLEEP); diff --git a/src/test/java/com/bandwidth/sdk/smoke/PhoneNumberLookupApiTest.java b/src/test/java/com/bandwidth/sdk/smoke/PhoneNumberLookupApiTest.java index 1aa5617a..4c7c1af8 100644 --- a/src/test/java/com/bandwidth/sdk/smoke/PhoneNumberLookupApiTest.java +++ b/src/test/java/com/bandwidth/sdk/smoke/PhoneNumberLookupApiTest.java @@ -4,8 +4,6 @@ import com.bandwidth.sdk.ApiResponse; import com.bandwidth.sdk.ApiException; import com.bandwidth.sdk.ApiClient; -import com.bandwidth.sdk.auth.HttpBasicAuth; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.model.AsyncLookupRequest; import com.bandwidth.sdk.model.CompletedLookupStatusEnum; import com.bandwidth.sdk.model.CreateAsyncBulkLookupResponse; @@ -36,17 +34,12 @@ @SuppressWarnings("null") public class PhoneNumberLookupApiTest { - - ApiClient defaultClient = Configuration.getDefaultApiClient(); - HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - private final PhoneNumberLookupApi api = new PhoneNumberLookupApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + private final PhoneNumberLookupApi api = new PhoneNumberLookupApi(oauthClient); private final List phoneNumbers = Arrays.asList(BW_NUMBER, VZW_NUMBER, ATT_NUMBER, T_MOBILE_NUMBER); @Test public void createSyncLookupTest() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - SyncLookupRequest lookupRequest = new SyncLookupRequest() .phoneNumbers(phoneNumbers); @@ -70,9 +63,6 @@ public void createSyncLookupTest() throws ApiException { @Test public void createGetAsyncLookupTest() throws ApiException, InterruptedException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - AsyncLookupRequest lookupRequest = new AsyncLookupRequest() .phoneNumbers(phoneNumbers); diff --git a/src/test/java/com/bandwidth/sdk/smoke/RecordingsApiTest.java b/src/test/java/com/bandwidth/sdk/smoke/RecordingsApiTest.java index b92a82af..a2811b18 100644 --- a/src/test/java/com/bandwidth/sdk/smoke/RecordingsApiTest.java +++ b/src/test/java/com/bandwidth/sdk/smoke/RecordingsApiTest.java @@ -5,8 +5,6 @@ import com.bandwidth.sdk.ApiResponse; import com.bandwidth.sdk.ApiClient; import com.bandwidth.sdk.ApiException; -import com.bandwidth.sdk.auth.HttpBasicAuth; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.model.CallRecordingMetadata; import com.bandwidth.sdk.model.CallStateEnum; import com.bandwidth.sdk.model.CreateCall; @@ -17,7 +15,6 @@ import com.bandwidth.sdk.model.UpdateCall; import com.bandwidth.sdk.model.UpdateCallRecording; import com.bandwidth.sdk.utils.MantecaStatusResponse; - import com.google.gson.Gson; import okhttp3.Call; @@ -47,13 +44,13 @@ import static com.bandwidth.sdk.utils.TestingEnvironmentVariables.*; import static com.bandwidth.sdk.utils.CallCleanup.Cleanup; +@SuppressWarnings("null") @TestMethodOrder(MethodOrderer.OrderAnnotation.class) @TestInstance(TestInstance.Lifecycle.PER_CLASS) public class RecordingsApiTest { - public ApiClient defaultClient = Configuration.getDefaultApiClient(); - public HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - public final CallsApi callsApi = new CallsApi(defaultClient); - public final RecordingsApi recordingsApi = new RecordingsApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + public final CallsApi callsApi = new CallsApi(oauthClient); + public final RecordingsApi recordingsApi = new RecordingsApi(oauthClient); private static final OkHttpClient mantecaClient = new OkHttpClient(); public static final MediaType jsonMediaType = MediaType.get("application/json; charset=utf-8"); @@ -116,9 +113,6 @@ public MantecaStatusResponse getTestStatus(String mantecaTestId) throws Exceptio @Test @Order(1) public void testCallRecordingAndTranscription() throws Exception { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - String mantecaJsonBody = constructMantecaJsonBody(); RequestBody mantecaRequestBody = RequestBody.create(mantecaJsonBody, jsonMediaType); @@ -236,9 +230,6 @@ public void testCallRecordingAndTranscription() throws Exception { @Test public void testGetAccountRecordings() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - ApiResponse> response = recordingsApi .listAccountCallRecordingsWithHttpInfo(BW_ACCOUNT_ID, null, null, null, null); @@ -246,200 +237,11 @@ public void testGetAccountRecordings() throws ApiException { assertThat(response.getStatusCode(), is(200)); } - @Test - public void testGetAccountRecordingsUnauthorized() { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.listAccountCallRecordingsWithHttpInfo(BW_ACCOUNT_ID, - null, null, null, null)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void testGetAccountRecordingsForbidden() { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.listAccountCallRecordingsWithHttpInfo(BW_ACCOUNT_ID, - null, null, null, null)); - - assertThat(exception.getCode(), is(403)); - } - @Test public void testRecordingNotFound() { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - ApiException exception = Assertions.assertThrows(ApiException.class, () -> recordingsApi.getCallRecording(BW_ACCOUNT_ID, "not a call", "not a recording")); assertThat(exception.getCode(), is(404)); } - - @Test - public void testUnauthorizedGetRecording() { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.getCallRecording(BW_ACCOUNT_ID, callId, recordingId)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void testForbiddenGetRecording() { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.getCallRecording(BW_ACCOUNT_ID, callId, recordingId)); - - assertThat(exception.getCode(), is(403)); - } - - @Test - public void testUnauthorizedDeleteRecording() { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.deleteRecording(BW_ACCOUNT_ID, callId, recordingId)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void testForbiddenDeleteRecording() { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.deleteRecording(BW_ACCOUNT_ID, callId, recordingId)); - - assertThat(exception.getCode(), is(403)); - } - - @Test - public void testUnauthorizedDownloadRecording() { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.downloadCallRecording(BW_ACCOUNT_ID, callId, - recordingId)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void testForbiddenDownloadRecording() { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.downloadCallRecording(BW_ACCOUNT_ID, callId, - recordingId)); - - assertThat(exception.getCode(), is(403)); - } - - @Test - public void testUnauthorizedDeleteRecordingMedia() { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.deleteRecording(BW_ACCOUNT_ID, callId, recordingId)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void testForbiddenDeleteRecordingMedia() { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.deleteRecording(BW_ACCOUNT_ID, callId, recordingId)); - - assertThat(exception.getCode(), is(403)); - } - - @Test - public void testUnauthorizedGetTranscription() { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.deleteRecordingTranscription(BW_ACCOUNT_ID, callId, - recordingId)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void testForbiddenGetTranscription() { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.deleteRecordingTranscription(BW_ACCOUNT_ID, callId, - recordingId)); - - assertThat(exception.getCode(), is(403)); - } - - @Test - public void testUnauthorizedCreateTranscriptionRequest() { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.transcribeCallRecording(BW_ACCOUNT_ID, callId, - recordingId, transcribeRecording)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void testForbiddenCreateTranscriptionRequest() { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.transcribeCallRecording(BW_ACCOUNT_ID, callId, - recordingId, transcribeRecording)); - - assertThat(exception.getCode(), is(403)); - } - - @Test - public void testUnauthorizedDeleteTranscription() throws ApiException { - Basic.setUsername("bad_username"); - Basic.setPassword("bad_password"); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.deleteRecordingTranscription(BW_ACCOUNT_ID, callId, - recordingId)); - - assertThat(exception.getCode(), is(401)); - } - - @Test - public void testForbiddenDeleteTranscription() { - Basic.setUsername(FORBIDDEN_USERNAME); - Basic.setPassword(FORBIDDEN_PASSWORD); - - ApiException exception = Assertions.assertThrows(ApiException.class, - () -> recordingsApi.deleteRecordingTranscription(BW_ACCOUNT_ID, callId, - recordingId)); - - assertThat(exception.getCode(), is(403)); - } } diff --git a/src/test/java/com/bandwidth/sdk/smoke/StatisticsApiTest.java b/src/test/java/com/bandwidth/sdk/smoke/StatisticsApiTest.java index 6c4e82bc..bb914023 100644 --- a/src/test/java/com/bandwidth/sdk/smoke/StatisticsApiTest.java +++ b/src/test/java/com/bandwidth/sdk/smoke/StatisticsApiTest.java @@ -1,11 +1,11 @@ package com.bandwidth.sdk.smoke; import com.bandwidth.sdk.api.StatisticsApi; -import com.bandwidth.sdk.auth.HttpBasicAuth; import com.bandwidth.sdk.ApiClient; import com.bandwidth.sdk.ApiException; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.model.AccountStatistics; + +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import static org.hamcrest.MatcherAssert.assertThat; @@ -16,11 +16,10 @@ /** * API tests for StatisticsApi */ +@Disabled public class StatisticsApiTest { - public ApiClient defaultClient = Configuration.getDefaultApiClient(); - public HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - private final StatisticsApi api = new StatisticsApi(defaultClient); - + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + private final StatisticsApi api = new StatisticsApi(oauthClient); /** * Get Account Statistics * @@ -30,9 +29,6 @@ public class StatisticsApiTest { */ @Test public void getStatisticsTest() throws ApiException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); - AccountStatistics response = api.getStatistics(BW_ACCOUNT_ID); assertThat(response, instanceOf(AccountStatistics.class)); diff --git a/src/test/java/com/bandwidth/sdk/smoke/TranscriptionsApiTest.java b/src/test/java/com/bandwidth/sdk/smoke/TranscriptionsApiTest.java index b65d686d..a8fa74c0 100644 --- a/src/test/java/com/bandwidth/sdk/smoke/TranscriptionsApiTest.java +++ b/src/test/java/com/bandwidth/sdk/smoke/TranscriptionsApiTest.java @@ -5,8 +5,6 @@ import com.bandwidth.sdk.ApiResponse; import com.bandwidth.sdk.ApiException; import com.bandwidth.sdk.ApiClient; -import com.bandwidth.sdk.auth.HttpBasicAuth; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.model.CreateCall; import com.bandwidth.sdk.model.CreateCallResponse; import com.bandwidth.sdk.model.CallStateEnum; @@ -39,11 +37,9 @@ */ public class TranscriptionsApiTest { - - ApiClient defaultClient = Configuration.getDefaultApiClient(); - HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - private final CallsApi callsApi = new CallsApi(defaultClient); - private final TranscriptionsApi transcriptionsApi = new TranscriptionsApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + private final CallsApi callsApi = new CallsApi(oauthClient); + private final TranscriptionsApi transcriptionsApi = new TranscriptionsApi(oauthClient); private static CreateCall createMantecaCallBody = new CreateCall(); private static UpdateCall completeMantecaCallBody = new UpdateCall(); @@ -56,8 +52,6 @@ public class TranscriptionsApiTest { @Test @Disabled // issue with PV API, can re-enable when fixed public void getAndDeleteRealTimeTranscriptionsTest() throws ApiException, InterruptedException, URISyntaxException { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); mantecaAnswerUrl = new URI(MANTECA_BASE_URL + "/bxml/pause"); createMantecaCallBody.setFrom(MANTECA_ACTIVE_NUMBER); diff --git a/src/test/java/com/bandwidth/sdk/unit/api/CallsApiTest.java b/src/test/java/com/bandwidth/sdk/unit/api/CallsApiTest.java index 393793d1..95665674 100644 --- a/src/test/java/com/bandwidth/sdk/unit/api/CallsApiTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/api/CallsApiTest.java @@ -6,9 +6,7 @@ import com.bandwidth.sdk.ApiClient; import com.bandwidth.sdk.ApiException; import com.bandwidth.sdk.ApiResponse; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.api.CallsApi; -import com.bandwidth.sdk.auth.HttpBasicAuth; import com.bandwidth.sdk.model.CallDirectionEnum; import com.bandwidth.sdk.model.CallState; import com.bandwidth.sdk.model.CallStateEnum; @@ -32,9 +30,8 @@ @SuppressWarnings("null") public class CallsApiTest { - private static ApiClient defaultClient = Configuration.getDefaultApiClient(); - private static HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - private static CallsApi api = new CallsApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + private static CallsApi api = new CallsApi(oauthClient); private static String callId = "c-1234"; private static String displayName = "Java SDK"; @@ -47,8 +44,6 @@ public class CallsApiTest { @BeforeAll public static void setUp() { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); api.setCustomBaseUrl("http://127.0.0.1:4010"); } diff --git a/src/test/java/com/bandwidth/sdk/unit/api/ConferencesApiTest.java b/src/test/java/com/bandwidth/sdk/unit/api/ConferencesApiTest.java index cf3b33d3..94ac58f9 100644 --- a/src/test/java/com/bandwidth/sdk/unit/api/ConferencesApiTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/api/ConferencesApiTest.java @@ -7,9 +7,7 @@ import com.bandwidth.sdk.ApiClient; import com.bandwidth.sdk.ApiException; import com.bandwidth.sdk.ApiResponse; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.api.ConferencesApi; -import com.bandwidth.sdk.auth.HttpBasicAuth; import com.bandwidth.sdk.model.CallbackMethodEnum; import com.bandwidth.sdk.model.Conference; import com.bandwidth.sdk.model.ConferenceMember; @@ -33,9 +31,8 @@ @SuppressWarnings("null") public class ConferencesApiTest { - private static ApiClient defaultClient = Configuration.getDefaultApiClient(); - private static HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - private static ConferencesApi api = new ConferencesApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + private static ConferencesApi api = new ConferencesApi(oauthClient); private static String callId = "c-1234"; private static String conferenceId = "c-4321"; @@ -43,8 +40,6 @@ public class ConferencesApiTest { @BeforeAll public static void setUp() { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); api.setCustomBaseUrl("http://127.0.0.1:4010"); } diff --git a/src/test/java/com/bandwidth/sdk/unit/api/MediaApiTest.java b/src/test/java/com/bandwidth/sdk/unit/api/MediaApiTest.java index fcfc1927..78aef00f 100644 --- a/src/test/java/com/bandwidth/sdk/unit/api/MediaApiTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/api/MediaApiTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +@SuppressWarnings("null") public class MediaApiTest { private static ApiClient defaultClient = Configuration.getDefaultApiClient(); private static HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); diff --git a/src/test/java/com/bandwidth/sdk/unit/api/RecordingsApiTest.java b/src/test/java/com/bandwidth/sdk/unit/api/RecordingsApiTest.java index d78835a6..eda0f048 100644 --- a/src/test/java/com/bandwidth/sdk/unit/api/RecordingsApiTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/api/RecordingsApiTest.java @@ -7,9 +7,7 @@ import com.bandwidth.sdk.ApiClient; import com.bandwidth.sdk.ApiException; import com.bandwidth.sdk.ApiResponse; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.api.RecordingsApi; -import com.bandwidth.sdk.auth.HttpBasicAuth; import com.bandwidth.sdk.model.CallDirectionEnum; import com.bandwidth.sdk.model.CallRecordingMetadata; import com.bandwidth.sdk.model.FileFormatEnum; @@ -29,17 +27,14 @@ @SuppressWarnings("null") public class RecordingsApiTest { - private static ApiClient defaultClient = Configuration.getDefaultApiClient(); - private static HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - private static RecordingsApi api = new RecordingsApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + private static RecordingsApi api = new RecordingsApi(oauthClient); private static String callId = "c-1234"; private static String recordingId = "r-1234"; @BeforeAll public static void setUp() { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); api.setCustomBaseUrl("http://127.0.0.1:4010"); } diff --git a/src/test/java/com/bandwidth/sdk/unit/api/StatisticsApiTest.java b/src/test/java/com/bandwidth/sdk/unit/api/StatisticsApiTest.java index a7056324..754845e7 100644 --- a/src/test/java/com/bandwidth/sdk/unit/api/StatisticsApiTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/api/StatisticsApiTest.java @@ -6,9 +6,7 @@ import com.bandwidth.sdk.ApiClient; import com.bandwidth.sdk.ApiException; import com.bandwidth.sdk.ApiResponse; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.api.StatisticsApi; -import com.bandwidth.sdk.auth.HttpBasicAuth; import com.bandwidth.sdk.model.AccountStatistics; import static com.bandwidth.sdk.utils.TestingEnvironmentVariables.*; @@ -16,15 +14,13 @@ import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; +@SuppressWarnings("null") public class StatisticsApiTest { - private static ApiClient defaultClient = Configuration.getDefaultApiClient(); - private static HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - private static StatisticsApi api = new StatisticsApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + private static StatisticsApi api = new StatisticsApi(oauthClient); @BeforeAll public static void setUp() { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); api.setCustomBaseUrl("http://127.0.0.1:4010"); } diff --git a/src/test/java/com/bandwidth/sdk/unit/api/TranscriptionsApiTest.java b/src/test/java/com/bandwidth/sdk/unit/api/TranscriptionsApiTest.java index 5d65b67a..511c0458 100644 --- a/src/test/java/com/bandwidth/sdk/unit/api/TranscriptionsApiTest.java +++ b/src/test/java/com/bandwidth/sdk/unit/api/TranscriptionsApiTest.java @@ -6,9 +6,7 @@ import com.bandwidth.sdk.ApiClient; import com.bandwidth.sdk.ApiException; import com.bandwidth.sdk.ApiResponse; -import com.bandwidth.sdk.Configuration; import com.bandwidth.sdk.api.TranscriptionsApi; -import com.bandwidth.sdk.auth.HttpBasicAuth; import com.bandwidth.sdk.model.CallTranscription; import com.bandwidth.sdk.model.CallTranscriptionDetectedLanguageEnum; import com.bandwidth.sdk.model.CallTranscriptionMetadata; @@ -24,17 +22,14 @@ @SuppressWarnings("null") public class TranscriptionsApiTest { - private static ApiClient defaultClient = Configuration.getDefaultApiClient(); - private static HttpBasicAuth Basic = (HttpBasicAuth) defaultClient.getAuthentication("Basic"); - private static TranscriptionsApi api = new TranscriptionsApi(defaultClient); + private static ApiClient oauthClient = new ApiClient(BW_CLIENT_ID, BW_CLIENT_SECRET, null); + private static TranscriptionsApi api = new TranscriptionsApi(oauthClient); private static String callId = "c-1234"; private static String transcriptionId = "t-1234"; @BeforeAll public static void setUp() { - Basic.setUsername(BW_USERNAME); - Basic.setPassword(BW_PASSWORD); api.setCustomBaseUrl("http://127.0.0.1:4010"); } diff --git a/src/test/java/com/bandwidth/sdk/utils/CallCleanup.java b/src/test/java/com/bandwidth/sdk/utils/CallCleanup.java index 0e714899..b383121e 100644 --- a/src/test/java/com/bandwidth/sdk/utils/CallCleanup.java +++ b/src/test/java/com/bandwidth/sdk/utils/CallCleanup.java @@ -26,8 +26,6 @@ public static final void Cleanup(CallsApiTest testClass, List callIdList if (!callIdList.isEmpty()) { try { - testClass.Basic.setUsername(BW_USERNAME); - testClass.Basic.setPassword(BW_PASSWORD); for (int i = 0; i < callIdList.size(); i++) { String callState = testClass.api.getCallState(BW_ACCOUNT_ID, callIdList.get(i).toString()) .getState(); @@ -54,9 +52,6 @@ public static final void Cleanup(ConferencesApiTest testClass, String callId) th TimeUnit.SECONDS.sleep(TEST_SLEEP); try { - testClass.Basic.setUsername(BW_USERNAME); - testClass.Basic.setPassword(BW_PASSWORD); - String callState = testClass.callsApi.getCallState(BW_ACCOUNT_ID, callId).getState(); if (!callState.equalsIgnoreCase("disconnected")) { UpdateCall updateCallBody = new UpdateCall(); @@ -74,9 +69,6 @@ public static final void Cleanup(RecordingsApiTest testClass, String callId) thr TimeUnit.SECONDS.sleep(TEST_SLEEP); try { - testClass.Basic.setUsername(BW_USERNAME); - testClass.Basic.setPassword(BW_PASSWORD); - String callState = testClass.callsApi.getCallState(BW_ACCOUNT_ID, callId).getState(); if (!callState.equalsIgnoreCase("disconnected")) { UpdateCall updateCallBody = new UpdateCall(); diff --git a/src/test/java/com/bandwidth/sdk/utils/TestingEnvironmentVariables.java b/src/test/java/com/bandwidth/sdk/utils/TestingEnvironmentVariables.java index d7f22105..f03fab7e 100644 --- a/src/test/java/com/bandwidth/sdk/utils/TestingEnvironmentVariables.java +++ b/src/test/java/com/bandwidth/sdk/utils/TestingEnvironmentVariables.java @@ -3,6 +3,8 @@ public final class TestingEnvironmentVariables { public static final String BW_USERNAME = System.getenv("BW_USERNAME"); public static final String BW_PASSWORD = System.getenv("BW_PASSWORD"); + public static final String BW_CLIENT_ID = System.getenv("BW_CLIENT_ID"); + public static final String BW_CLIENT_SECRET = System.getenv("BW_CLIENT_SECRET"); public static final String BW_ACCOUNT_ID = System.getenv("BW_ACCOUNT_ID"); public static final String BW_MESSAGING_APPLICATION_ID = System.getenv("BW_MESSAGING_APPLICATION_ID"); public static final String BW_VOICE_APPLICATION_ID = System.getenv("BW_VOICE_APPLICATION_ID");