@@ -7,57 +7,78 @@ import com.github.gotify.client.api.UserApi
77import com.github.gotify.client.api.VersionApi
88import com.github.gotify.client.auth.ApiKeyAuth
99import com.github.gotify.client.auth.HttpBasicAuth
10+ import java.io.File
11+ import java.io.FileOutputStream
12+ import java.io.IOException
13+ import org.tinylog.kotlin.Logger
1014
1115internal object ClientFactory {
12- private fun unauthorized (baseUrl : String , sslSettings : SSLSettings ): ApiClient {
13- return defaultClient(arrayOf(), " $baseUrl /" , sslSettings)
16+ private fun unauthorized (
17+ settings : Settings ,
18+ sslSettings : SSLSettings ,
19+ baseUrl : String
20+ ): ApiClient {
21+ return defaultClient(arrayOf(), settings, sslSettings, baseUrl)
1422 }
1523
1624 fun basicAuth (
17- baseUrl : String ,
25+ settings : Settings ,
1826 sslSettings : SSLSettings ,
1927 username : String ,
2028 password : String
2129 ): ApiClient {
22- val client = defaultClient(
23- arrayOf(" basicAuth" ),
24- " $baseUrl /" ,
25- sslSettings
26- )
30+ val client = defaultClient(arrayOf(" basicAuth" ), settings, sslSettings)
2731 val auth = client.apiAuthorizations[" basicAuth" ] as HttpBasicAuth
2832 auth.username = username
2933 auth.password = password
3034 return client
3135 }
3236
33- fun clientToken (baseUrl : String , sslSettings : SSLSettings , token : String? ): ApiClient {
34- val client = defaultClient(
35- arrayOf(" clientTokenHeader" ),
36- " $baseUrl /" ,
37- sslSettings
38- )
37+ fun clientToken (settings : Settings , token : String? = settings.token): ApiClient {
38+ val client = defaultClient(arrayOf(" clientTokenHeader" ), settings)
3939 val tokenAuth = client.apiAuthorizations[" clientTokenHeader" ] as ApiKeyAuth
4040 tokenAuth.apiKey = token
4141 return client
4242 }
4343
44- fun versionApi (baseUrl : String , sslSettings : SSLSettings ): VersionApi {
45- return unauthorized(baseUrl, sslSettings).createService(VersionApi ::class .java)
44+ fun versionApi (
45+ settings : Settings ,
46+ sslSettings : SSLSettings = settings.sslSettings(),
47+ baseUrl : String = settings.url
48+ ): VersionApi {
49+ return unauthorized(settings, sslSettings, baseUrl).createService(VersionApi ::class .java)
4650 }
4751
4852 fun userApiWithToken (settings : Settings ): UserApi {
49- return clientToken(settings.url, settings.sslSettings(), settings.token)
50- .createService(UserApi ::class .java)
53+ return clientToken(settings).createService(UserApi ::class .java)
5154 }
5255
5356 private fun defaultClient (
5457 authentications : Array <String >,
55- baseUrl : String ,
56- sslSettings : SSLSettings
58+ settings : Settings ,
59+ sslSettings : SSLSettings = settings.sslSettings(),
60+ baseUrl : String = settings.url
5761 ): ApiClient {
5862 val client = ApiClient (authentications)
63+ if (settings.legacyCert != null ) {
64+ Logger .info(" Migrating legacy CA cert to new location" )
65+ var legacyCert: String? = null
66+ try {
67+ legacyCert = settings.legacyCert
68+ settings.legacyCert = null
69+ val caCertFile = File (settings.filesDir, CertUtils .CA_CERT_NAME )
70+ FileOutputStream (caCertFile).use {
71+ it.write(legacyCert?.encodeToByteArray())
72+ }
73+ settings.caCertPath = caCertFile.absolutePath
74+ Logger .info(" Migration of legacy CA cert succeeded" )
75+ } catch (e: IOException ) {
76+ Logger .error(e, " Migration of legacy CA cert failed" )
77+ if (legacyCert != null ) settings.legacyCert = legacyCert
78+ }
79+ }
5980 CertUtils .applySslSettings(client.okBuilder, sslSettings)
60- client.adapterBuilder.baseUrl(baseUrl)
81+ client.adapterBuilder.baseUrl(" $ baseUrl/ " )
6182 return client
6283 }
6384}
0 commit comments