001/* 002 * Copyright 2020 Vonage 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package com.vonage.client; 017 018public class HttpConfig { 019 private static final String DEFAULT_API_BASE_URI = "https://api.nexmo.com"; 020 private static final String DEFAULT_REST_BASE_URI = "https://rest.nexmo.com"; 021 private static final String DEFAULT_SNS_BASE_URI = "https://sns.nexmo.com"; 022 023 private String apiBaseUri; 024 private String restBaseUri; 025 private String snsBaseUri; 026 027 private HttpConfig(Builder builder) { 028 this.apiBaseUri = builder.apiBaseUri; 029 this.restBaseUri = builder.restBaseUri; 030 this.snsBaseUri = builder.snsBaseUri; 031 } 032 033 public String getApiBaseUri() { 034 return apiBaseUri; 035 } 036 037 public String getRestBaseUri() { 038 return restBaseUri; 039 } 040 041 public String getSnsBaseUri() { 042 return snsBaseUri; 043 } 044 045 public boolean isDefaultApiBaseUri() { 046 return DEFAULT_API_BASE_URI.equals(apiBaseUri); 047 } 048 049 public boolean isDefaultRestBaseUri() { 050 return DEFAULT_REST_BASE_URI.equals(restBaseUri); 051 } 052 053 public boolean isDefaultSnsBaseUri() { 054 return DEFAULT_SNS_BASE_URI.equals(snsBaseUri); 055 } 056 057 public String getVersionedApiBaseUri(String version) { 058 return appendVersionToUri(apiBaseUri, version); 059 } 060 061 public String getVersionedRestBaseUri(String version) { 062 return appendVersionToUri(restBaseUri, version); 063 } 064 065 public String getVersionedSnsBaseUri(String version) { 066 return appendVersionToUri(snsBaseUri, version); 067 } 068 069 private String appendVersionToUri(String uri, String version) { 070 return uri + "/" + version; 071 } 072 073 /** 074 * @return an HttpConfig object with sensible defaults. 075 */ 076 public static HttpConfig defaultConfig() { 077 return new Builder().build(); 078 } 079 080 public static Builder builder() { 081 return new Builder(); 082 } 083 084 public static class Builder { 085 private String apiBaseUri; 086 private String restBaseUri; 087 private String snsBaseUri; 088 089 public Builder() { 090 this.apiBaseUri = DEFAULT_API_BASE_URI; 091 this.restBaseUri = DEFAULT_REST_BASE_URI; 092 this.snsBaseUri = DEFAULT_SNS_BASE_URI; 093 } 094 095 /** 096 * @param apiBaseUri The base uri to use in place of {@link HttpConfig#DEFAULT_API_BASE_URI} 097 * 098 * @return The {@link Builder} to keep building. 099 */ 100 public Builder apiBaseUri(String apiBaseUri) { 101 this.apiBaseUri = sanitizeUri(apiBaseUri); 102 return this; 103 } 104 105 /** 106 * @param restBaseUri The base uri to use in place of {@link HttpConfig#DEFAULT_REST_BASE_URI} 107 * 108 * @return The {@link Builder} to keep building. 109 */ 110 public Builder restBaseUri(String restBaseUri) { 111 this.restBaseUri = sanitizeUri(restBaseUri); 112 return this; 113 } 114 115 /** 116 * @param snsBaseUri The base uri to use in place of {@link HttpConfig#DEFAULT_SNS_BASE_URI} 117 * 118 * @return The {@link Builder} to keep building. 119 */ 120 public Builder snsBaseUri(String snsBaseUri) { 121 this.snsBaseUri = sanitizeUri(snsBaseUri); 122 return this; 123 } 124 125 /** 126 * @param baseUri The base uri to use in place of {@link HttpConfig#DEFAULT_REST_BASE_URI}, {@link HttpConfig#DEFAULT_API_BASE_URI}, and {@link HttpConfig#DEFAULT_SNS_BASE_URI} 127 * 128 * @return The {@link Builder} to keep building. 129 */ 130 public Builder baseUri(String baseUri) { 131 String sanitizedUri = sanitizeUri(baseUri); 132 this.apiBaseUri = sanitizedUri; 133 this.restBaseUri = sanitizedUri; 134 this.snsBaseUri = sanitizedUri; 135 return this; 136 } 137 138 /** 139 * @return A new {@link HttpConfig} object from the stored builder options. 140 */ 141 public HttpConfig build() { 142 return new HttpConfig(this); 143 } 144 145 private String sanitizeUri(String uri) { 146 if (uri != null && uri.endsWith("/")) { 147 return uri.substring(0, uri.length() - 1); 148 } 149 150 return uri; 151 } 152 } 153}