🐳 Adds dockerfile
This commit is contained in:
parent
d1ddd7be3b
commit
c124754c96
57
backend/.dockerignore
Normal file
57
backend/.dockerignore
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
### Gradle template
|
||||||
|
.gradle
|
||||||
|
**/build/
|
||||||
|
!src/**/build/
|
||||||
|
|
||||||
|
# Ignore Gradle GUI config
|
||||||
|
gradle-app.setting
|
||||||
|
|
||||||
|
# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
|
||||||
|
!gradle-wrapper.jar
|
||||||
|
|
||||||
|
# Avoid ignore Gradle wrappper properties
|
||||||
|
!gradle-wrapper.properties
|
||||||
|
|
||||||
|
# Cache of project
|
||||||
|
.gradletasknamecache
|
||||||
|
|
||||||
|
# Eclipse Gradle plugin generated files
|
||||||
|
# Eclipse Core
|
||||||
|
.project
|
||||||
|
# JDT-specific (Eclipse Java Development Tools)
|
||||||
|
.classpath
|
||||||
|
|
||||||
|
### Kotlin template
|
||||||
|
# Compiled class file
|
||||||
|
*.class
|
||||||
|
|
||||||
|
# Log file
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# BlueJ files
|
||||||
|
*.ctxt
|
||||||
|
|
||||||
|
# Mobile Tools for Java (J2ME)
|
||||||
|
.mtj.tmp/
|
||||||
|
|
||||||
|
# Package Files #
|
||||||
|
*.jar
|
||||||
|
*.war
|
||||||
|
*.nar
|
||||||
|
*.ear
|
||||||
|
*.zip
|
||||||
|
*.tar.gz
|
||||||
|
*.rar
|
||||||
|
|
||||||
|
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||||
|
hs_err_pid*
|
||||||
|
replay_pid*
|
||||||
|
|
||||||
|
|
||||||
|
### Custom
|
||||||
|
|
||||||
|
.idea/
|
||||||
|
.kotlin/
|
||||||
|
data/
|
||||||
|
compose.yaml
|
||||||
|
src/main/resources/.env
|
8
backend/Dockerfile
Normal file
8
backend/Dockerfile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
FROM gradle:jdk17
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --chown=gradle:gradle . .
|
||||||
|
|
||||||
|
RUN gradle buildFatJar
|
||||||
|
|
||||||
|
CMD ["gradle", "runFatJar"]
|
@ -23,7 +23,9 @@ fun main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun Application.module() {
|
fun Application.module() {
|
||||||
val dotenv = dotenv()
|
val dotenv = dotenv {
|
||||||
|
ignoreIfMissing = true
|
||||||
|
}
|
||||||
|
|
||||||
configureHTTP()
|
configureHTTP()
|
||||||
configureErrors()
|
configureErrors()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder>
|
<encoder>
|
||||||
<pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
|
<pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
<root level="INFO">
|
<root level="INFO">
|
||||||
@ -9,4 +9,4 @@
|
|||||||
</root>
|
</root>
|
||||||
<logger name="org.eclipse.jetty" level="INFO"/>
|
<logger name="org.eclipse.jetty" level="INFO"/>
|
||||||
<logger name="io.netty" level="INFO"/>
|
<logger name="io.netty" level="INFO"/>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -7,15 +7,14 @@ import kotlin.test.Test
|
|||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|
||||||
class ApplicationTest {
|
class ApplicationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testRoot() = testApplication {
|
fun testRoot() = testApplication {
|
||||||
application {
|
application {
|
||||||
module()
|
module()
|
||||||
}
|
}
|
||||||
|
|
||||||
client.get("/").apply {
|
client.get("/").apply {
|
||||||
assertEquals(HttpStatusCode.OK, status)
|
assertEquals(HttpStatusCode.OK, status)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import dev.svitan.antifed.ui.theme.AntiFedTheme
|
import dev.svitan.antifed.ui.theme.AntiFedTheme
|
||||||
|
import io.ktor.client.call.body
|
||||||
import io.ktor.client.request.get
|
import io.ktor.client.request.get
|
||||||
import io.ktor.http.HttpStatusCode
|
import io.ktor.http.HttpStatusCode
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
@ -56,6 +57,12 @@ class AuthActivity : ComponentActivity() {
|
|||||||
var checkingUrl by remember { mutableStateOf(false) }
|
var checkingUrl by remember { mutableStateOf(false) }
|
||||||
var isServerUrlOk by remember { mutableStateOf(false) }
|
var isServerUrlOk by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
var needToCheckToken by remember { mutableStateOf(false) }
|
||||||
|
var checkingToken by remember { mutableStateOf(false) }
|
||||||
|
var isTokenOk by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
var auths by remember { mutableStateOf(listOf<AuthDTO>()) }
|
||||||
|
|
||||||
val prefs = LocalContext.current.getSharedPreferences(
|
val prefs = LocalContext.current.getSharedPreferences(
|
||||||
stringResource(R.string.settings_prefs_key),
|
stringResource(R.string.settings_prefs_key),
|
||||||
MODE_PRIVATE
|
MODE_PRIVATE
|
||||||
@ -68,7 +75,7 @@ class AuthActivity : ComponentActivity() {
|
|||||||
|
|
||||||
fun serverUrlMatches(): Boolean {
|
fun serverUrlMatches(): Boolean {
|
||||||
var re = Regex(
|
var re = Regex(
|
||||||
"(?:http[s]?:\\/\\/.)?(?:www\\.)?[-a-zA-Z0-9@%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b(?:[-a-zA-Z0-9@:%_\\+.~#?&\\/\\/=]*)",
|
"""https?://[a-zA-Z0-9\\.]+\\.[a-zA-Z0-9]+""",
|
||||||
RegexOption.DOT_MATCHES_ALL
|
RegexOption.DOT_MATCHES_ALL
|
||||||
)
|
)
|
||||||
return re.containsMatchIn(serverUrl)
|
return re.containsMatchIn(serverUrl)
|
||||||
@ -89,7 +96,6 @@ class AuthActivity : ComponentActivity() {
|
|||||||
|
|
||||||
delay(1000)
|
delay(1000)
|
||||||
checkingUrl = true
|
checkingUrl = true
|
||||||
|
|
||||||
val response = client.get(serverUrl)
|
val response = client.get(serverUrl)
|
||||||
|
|
||||||
checkingUrl = false
|
checkingUrl = false
|
||||||
@ -101,11 +107,34 @@ class AuthActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LaunchedEffect(token) {
|
||||||
|
if (!needToCheckToken) return@LaunchedEffect
|
||||||
|
else isTokenOk = false
|
||||||
|
|
||||||
|
if (!isServerUrlOk) return@LaunchedEffect
|
||||||
|
if (token.isBlank()) return@LaunchedEffect
|
||||||
|
|
||||||
|
delay(1000)
|
||||||
|
checkingToken = true
|
||||||
|
|
||||||
|
val response = client.get("$serverUrl/auth")
|
||||||
|
if (response.status != HttpStatusCode.OK) {
|
||||||
|
checkingToken = false
|
||||||
|
needToCheckToken = false
|
||||||
|
isTokenOk = false
|
||||||
|
return@LaunchedEffect
|
||||||
|
}
|
||||||
|
|
||||||
|
auths = response.body<List<AuthDTO>>()
|
||||||
|
checkingToken = false
|
||||||
|
needToCheckToken = false
|
||||||
|
isTokenOk = true
|
||||||
|
}
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
topBar = {
|
topBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
colors = TopAppBarDefaults.topAppBarColors(
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
|
||||||
titleContentColor = MaterialTheme.colorScheme.primary
|
titleContentColor = MaterialTheme.colorScheme.primary
|
||||||
),
|
),
|
||||||
title = {
|
title = {
|
||||||
@ -159,13 +188,19 @@ class AuthActivity : ComponentActivity() {
|
|||||||
|
|
||||||
TextField(
|
TextField(
|
||||||
value = token,
|
value = token,
|
||||||
onValueChange = { token = it },
|
onValueChange = {
|
||||||
|
needToCheckToken = true
|
||||||
|
token = it
|
||||||
|
},
|
||||||
label = { Text(stringResource(R.string.token)) },
|
label = { Text(stringResource(R.string.token)) },
|
||||||
singleLine = true,
|
singleLine = true,
|
||||||
isError = token.isBlank(),
|
isError = token.isBlank(),
|
||||||
visualTransformation = PasswordVisualTransformation(),
|
visualTransformation = PasswordVisualTransformation(),
|
||||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
|
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
|
||||||
)
|
)
|
||||||
|
Spacer(modifier = Modifier.height(12.dp))
|
||||||
|
|
||||||
|
Text("auths: $auths")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,6 @@ class MainActivity : ComponentActivity() {
|
|||||||
topBar = {
|
topBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
colors = TopAppBarDefaults.topAppBarColors(
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
|
||||||
titleContentColor = MaterialTheme.colorScheme.primary
|
titleContentColor = MaterialTheme.colorScheme.primary
|
||||||
),
|
),
|
||||||
title = {
|
title = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user