Dmitry Myachin 4 months ago committed by Olga Kuznetsova
parent 4804aae9eb
commit a90d76dd2a

Binary file not shown.

@ -10,13 +10,13 @@ android {
defaultConfig {
minSdk 24
targetSdk 32
versionCode 100
versionCode 101
/** https://semver.org/spec/v2.0.0.html: МАЖОР.МИНОР.ПАТЧ
* МАЖОР: значительное изменение API, которое привело к потере обратной совместимости
* МИНОР: добавление новой функциональности, не приводящее к потере обратной совместимости. Удаление ранее
* деприкейченного API сюда же, т.к. считаем, что депрекейтед был устранён в клиентах давно
* ПАТЧ: исправления или незначительное добавление кода. Добавление нового пакета - сюда */
versionName "2.0.1"
versionName "2.1.0"
}
buildTypes {
@ -39,14 +39,17 @@ android {
}
dependencies {
// Поддержка Котлина, корутин
implementation 'androidx.core:core-ktx:1.8.0'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$korutines_version"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.3'
// Тесты
implementation 'junit:junit:4.13.2'
implementation 'androidx.test.ext:junit:1.1.3'
implementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'androidx.test.uiautomator:uiautomator:2.2.0'
implementation 'androidx.test:rules:1.4.0'
// Парсинг Json
implementation 'org.json:json:20180813'
}

@ -0,0 +1,75 @@
package xyz.myachin.yaf.tools.network
import android.annotation.SuppressLint
import java.net.Socket
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.SSLEngine
import javax.net.ssl.TrustManager
import javax.net.ssl.X509ExtendedTrustManager
/** Переопределяет все проверки сертификатов на пустые. Это заставляет принимать любые,
* даже плохие сертификаты.
*
* НЕ ИСПОЛЬЗОВАТЬ В ПРОДАКШЕН КОДЕ!!! ТОЛЬКО ДЛЯ АВТОТЕСТОВ!!! */
private val trustAll = arrayOf<TrustManager>(
@SuppressLint("CustomX509TrustManager")
object : X509ExtendedTrustManager() {
@SuppressLint("TrustAllX509TrustManager")
override fun checkClientTrusted(
chain: Array<out X509Certificate>?,
authType: String?,
socket: Socket?
) {
}
@SuppressLint("TrustAllX509TrustManager")
override fun checkClientTrusted(
chain: Array<out X509Certificate>?,
authType: String?,
engine: SSLEngine?
) {
}
@SuppressLint("TrustAllX509TrustManager")
override fun checkClientTrusted(
chain: Array<out X509Certificate>?,
authType: String?
) {
}
@SuppressLint("TrustAllX509TrustManager")
override fun checkServerTrusted(
chain: Array<out X509Certificate>?,
authType: String?,
socket: Socket?
) {
}
@SuppressLint("TrustAllX509TrustManager")
override fun checkServerTrusted(
chain: Array<out X509Certificate>?,
authType: String?,
engine: SSLEngine?
) {
}
@SuppressLint("TrustAllX509TrustManager")
override fun checkServerTrusted(
chain: Array<out X509Certificate>?,
authType: String?
) {
}
override fun getAcceptedIssuers(): Array<X509Certificate> {
return arrayOf()
}
}
)
internal val sslCtx: SSLContext
get() {
val ctx = SSLContext.getInstance("TLS")
ctx.init(null, trustAll, null)
return ctx
}

@ -0,0 +1,37 @@
package xyz.myachin.yaf.tools.network
import org.json.JSONObject
import java.net.URL
import javax.net.ssl.HttpsURLConnection
/** Получение инвайтов в обход мессенджера, прямым запросом к REST API */
object TInvite {
private const val TACITA_TEST_INVITE_URL = "https://api-test1.tacita.net/rest/invite/new"
private const val TACITA_DEV_INVITE_URL = "https://api-dev1.tacita.net/rest/invite/new"
private fun connection(url: String): HttpsURLConnection {
return (URL(url).openConnection() as HttpsURLConnection).apply {
sslSocketFactory = sslCtx.socketFactory
}
}
private fun getInvite(connection: HttpsURLConnection): Long {
try {
connection.inputStream.bufferedReader().use { reader ->
return JSONObject(reader.readText()).getLong("invite_code")
}
} finally {
connection.disconnect()
}
}
/** Получить инвайт для Tacita Test */
fun getTacitaTestInvite(): Long {
return getInvite(connection(TACITA_TEST_INVITE_URL))
}
/** Получить инвайт для Tacita Dev */
fun getTacitaDevInvite(): Long {
return getInvite(connection(TACITA_DEV_INVITE_URL))
}
}

@ -0,0 +1,20 @@
package xyz.myachin.yaf.tools.network
import org.junit.Assert
import org.junit.Test
class InviteTest {
@Test
fun tacitaTestInviteTest() {
val a = TInvite.getTacitaTestInvite()
println("invite tacita test = $a")
Assert.assertEquals("Invite length", "$a".length, 12)
}
@Test
fun tacitaDevInviteTest() {
val a = TInvite.getTacitaDevInvite()
println("invite tacita dev = $a")
Assert.assertEquals("Invite length", "$a".length, 12)
}
}

@ -1,18 +1,12 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext {
kotlin_version = '1.7.0'
korutines_version = '1.6.3'
gradle_version = '7.0.4'
}
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:$gradle_version"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.android.tools.build:gradle:7.0.4'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

Loading…
Cancel
Save