🐳 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() {
|
||||
val dotenv = dotenv()
|
||||
val dotenv = dotenv {
|
||||
ignoreIfMissing = true
|
||||
}
|
||||
|
||||
configureHTTP()
|
||||
configureErrors()
|
||||
|
@ -1,7 +1,7 @@
|
||||
<configuration>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<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>
|
||||
</appender>
|
||||
<root level="INFO">
|
||||
@ -9,4 +9,4 @@
|
||||
</root>
|
||||
<logger name="org.eclipse.jetty" level="INFO"/>
|
||||
<logger name="io.netty" level="INFO"/>
|
||||
</configuration>
|
||||
</configuration>
|
||||
|
@ -7,15 +7,14 @@ import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
class ApplicationTest {
|
||||
|
||||
@Test
|
||||
fun testRoot() = testApplication {
|
||||
application {
|
||||
module()
|
||||
}
|
||||
|
||||
client.get("/").apply {
|
||||
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.sp
|
||||
import dev.svitan.antifed.ui.theme.AntiFedTheme
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.request.get
|
||||
import io.ktor.http.HttpStatusCode
|
||||
import kotlinx.coroutines.delay
|
||||
@ -56,6 +57,12 @@ class AuthActivity : ComponentActivity() {
|
||||
var checkingUrl 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(
|
||||
stringResource(R.string.settings_prefs_key),
|
||||
MODE_PRIVATE
|
||||
@ -68,7 +75,7 @@ class AuthActivity : ComponentActivity() {
|
||||
|
||||
fun serverUrlMatches(): Boolean {
|
||||
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
|
||||
)
|
||||
return re.containsMatchIn(serverUrl)
|
||||
@ -89,7 +96,6 @@ class AuthActivity : ComponentActivity() {
|
||||
|
||||
delay(1000)
|
||||
checkingUrl = true
|
||||
|
||||
val response = client.get(serverUrl)
|
||||
|
||||
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(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
colors = TopAppBarDefaults.topAppBarColors(
|
||||
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
||||
titleContentColor = MaterialTheme.colorScheme.primary
|
||||
),
|
||||
title = {
|
||||
@ -159,13 +188,19 @@ class AuthActivity : ComponentActivity() {
|
||||
|
||||
TextField(
|
||||
value = token,
|
||||
onValueChange = { token = it },
|
||||
onValueChange = {
|
||||
needToCheckToken = true
|
||||
token = it
|
||||
},
|
||||
label = { Text(stringResource(R.string.token)) },
|
||||
singleLine = true,
|
||||
isError = token.isBlank(),
|
||||
visualTransformation = PasswordVisualTransformation(),
|
||||
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
|
||||
)
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
|
||||
Text("auths: $auths")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -90,7 +90,6 @@ class MainActivity : ComponentActivity() {
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
colors = TopAppBarDefaults.topAppBarColors(
|
||||
containerColor = MaterialTheme.colorScheme.primaryContainer,
|
||||
titleContentColor = MaterialTheme.colorScheme.primary
|
||||
),
|
||||
title = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user