From a9a854cba0ad85b005b730556a5972804e7f895a Mon Sep 17 00:00:00 2001 From: Eneko Nieto Date: Tue, 8 Feb 2022 19:33:01 +0100 Subject: [PATCH] Deleted Spring Boot, migrated to Trixnity --- README.md | 4 +- build.gradle.kts | 56 ++-- docker/synapse/okupamicoche-appservice.yaml | 1 - gradle.properties | 5 + gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 257 +++++++----------- settings.gradle.kts | 5 +- src/main/kotlin/eu/fosil/Application.kt | 112 ++++++++ .../OkupaMiCocheAppServiceApplication.kt | 11 - src/main/kotlin/eu/fosil/PingHandler.kt | 79 ------ src/main/resources/application.yml | 70 ----- src/main/resources/logback.xml | 12 + src/test/kotlin/eu/fosil/ApplicationTest.kt | 13 + .../OkupaMiCocheAppServiceApplicationTests.kt | 13 - 14 files changed, 280 insertions(+), 360 deletions(-) create mode 100644 gradle.properties create mode 100644 src/main/kotlin/eu/fosil/Application.kt delete mode 100644 src/main/kotlin/eu/fosil/OkupaMiCocheAppServiceApplication.kt delete mode 100644 src/main/kotlin/eu/fosil/PingHandler.kt delete mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/logback.xml create mode 100644 src/test/kotlin/eu/fosil/ApplicationTest.kt delete mode 100644 src/test/kotlin/eu/fosil/OkupaMiCocheAppServiceApplicationTests.kt diff --git a/README.md b/README.md index 507fb16..1beb9f0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ # Okupa mi coche - App Service -Matrix Application Service for Okupa mi coche \ No newline at end of file +Matrix Application Service for Okupa mi coche + +http://172.17.0.1:8080/_matrix/app/v1/users/@test34:okupamicoche-synapse?access_token=312df522183efd404ec1cd22d2ffa4bbc76a8c1ccf541dd692eef281356bb74e diff --git a/build.gradle.kts b/build.gradle.kts index 72adbb8..c1e8842 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,40 +1,42 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +val ktor_version: String by project +val kotlin_version: String by project +val trixnity_version: String by project +val logback_version: String by project + plugins { - id("org.springframework.boot") version "2.4.13" - id("io.spring.dependency-management") version "1.0.11.RELEASE" - kotlin("jvm") version "1.4.32" - kotlin("plugin.spring") version "1.4.32" + application + kotlin("jvm") version "1.6.10" } group = "eu.fosil" -version = "0.0.1-SNAPSHOT" -java.sourceCompatibility = JavaVersion.VERSION_11 +version = "0.0.1" +application { + mainClass.set("eu.fosil.ApplicationKt") +} repositories { - mavenCentral() + mavenCentral() + maven { url = uri("https://maven.pkg.jetbrains.space/public/p/ktor/eap") } } dependencies { - implementation("org.springframework.boot:spring-boot-starter") - implementation("org.jetbrains.kotlin:kotlin-reflect") - implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core") - implementation ("net.folivo:matrix-spring-boot-bot:0.4.8") -// implementation ("net.folivo:matrix-spring-boot-bot:0.5.2") - runtimeOnly("com.h2database:h2") - runtimeOnly("io.r2dbc:r2dbc-h2") - developmentOnly("org.springframework.boot:spring-boot-devtools") - testImplementation("org.springframework.boot:spring-boot-starter-test") + // Ktor + implementation("io.ktor:ktor-server-netty:$ktor_version") + implementation("io.ktor:ktor-client-cio:$ktor_version") + + // Trixnity + implementation("net.folivo:trixnity-appservice:$trixnity_version") + + // Logger + implementation("ch.qos.logback:logback-classic:$logback_version") + + testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version") } -tasks.withType { - kotlinOptions { - freeCompilerArgs = listOf("-Xjsr305=strict") - jvmTarget = "11" - } -} - -tasks.withType { - useJUnitPlatform() +tasks.withType { + kotlinOptions { +// freeCompilerArgs = listOf("-Xjsr305=strict") + jvmTarget = "11" + } } diff --git a/docker/synapse/okupamicoche-appservice.yaml b/docker/synapse/okupamicoche-appservice.yaml index cf92ca6..654cc3a 100644 --- a/docker/synapse/okupamicoche-appservice.yaml +++ b/docker/synapse/okupamicoche-appservice.yaml @@ -1,6 +1,5 @@ id: "Okupa mi coche" url: "http://172.17.0.1:8080" -#url: "http://172.17.0.1:8081" as_token: "30c05ae90a248a4188e620216fa72e349803310ec83e2a77b34fe90be6081f46" hs_token: "312df522183efd404ec1cd22d2ffa4bbc76a8c1ccf541dd692eef281356bb74e" sender_localpart: "okupamicoche" diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..3f2920b --- /dev/null +++ b/gradle.properties @@ -0,0 +1,5 @@ +ktor_version=1.6.7 +kotlin_version=1.6.10 +trixnity_version=1.1.6 +logback_version=1.2.10 +kotlin.code.style=official diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d2880ba..2e6e589 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..744e882 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/bin/sh +#!/usr/bin/env sh # -# Copyright © 2015-2021 the original authors. +# Copyright 2015 the original author or authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,101 +17,67 @@ # ############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# +## +## Gradle start up script for UN*X +## ############################################################################## # Attempt to set APP_HOME - # Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi done - -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null APP_NAME="Gradle" -APP_BASE_NAME=${0##*/} +APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum +MAX_FD="maximum" warn () { echo "$*" -} >&2 +} die () { echo echo "$*" echo exit 1 -} >&2 +} # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MSYS* | MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -121,9 +87,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java + JAVACMD="$JAVA_HOME/jre/sh/java" else - JAVACMD=$JAVA_HOME/bin/java + JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -132,7 +98,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD=java + JAVACMD="java" which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -140,95 +106,80 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi fi -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi # For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=$( cygpath --unix "$JAVACMD" ) + JAVACMD=`cygpath --unix "$JAVACMD"` - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" exec "$JAVACMD" "$@" diff --git a/settings.gradle.kts b/settings.gradle.kts index e6913c2..a1de5f8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1 @@ -rootProject.name = "okupamicoche" - -// Include matrix-spring-boot-sdk for local development of the sdk -//includeBuild("../matrix-spring-boot-sdk") +rootProject.name = "eu.fosil.okupamicoche" \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/Application.kt b/src/main/kotlin/eu/fosil/Application.kt new file mode 100644 index 0000000..1e79529 --- /dev/null +++ b/src/main/kotlin/eu/fosil/Application.kt @@ -0,0 +1,112 @@ +package eu.fosil + +import io.ktor.http.* +import io.ktor.server.engine.* +import io.ktor.server.netty.* +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import net.folivo.trixnity.appservice.rest.DefaultAppserviceService +import net.folivo.trixnity.appservice.rest.MatrixAppserviceProperties +import net.folivo.trixnity.appservice.rest.event.AppserviceEventTnxService +import net.folivo.trixnity.appservice.rest.matrixAppserviceModule +import net.folivo.trixnity.appservice.rest.room.AppserviceRoomService +import net.folivo.trixnity.appservice.rest.room.CreateRoomParameter +import net.folivo.trixnity.appservice.rest.user.AppserviceUserService +import net.folivo.trixnity.appservice.rest.user.RegisterUserParameter +import net.folivo.trixnity.client.api.MatrixApiClient +import net.folivo.trixnity.core.model.RoomAliasId +import net.folivo.trixnity.core.model.RoomId +import net.folivo.trixnity.core.model.UserId +import net.folivo.trixnity.core.model.events.m.room.RoomMessageEventContent + +val matrixClient = MatrixApiClient( + baseUrl = Url("http://okupamicoche-synapse:8008/"), +).apply { accessToken.value = "syt_dGVzdDM_OIheLExYmDBsfAeENWfF_3BwxFM" } +//).apply { accessToken.value = "30c05ae90a248a4188e620216fa72e349803310ec83e2a77b34fe90be6081f46" } // TODO Error 500 + +suspend fun main() { + + + coroutineScope { + matrixClient.sync.subscribe { println(it.content.body) } + + matrixClient.sync.subscribeAllEvents { // this is a shortcut for .subscribe { } +// println(it) + } + + launch { + matrixClient.sync.start(wait = true, scope = this) // you need to start the sync to receive messages + } + + val appserviceService = DefaultAppserviceService( + EventTnxService(), + UserService(), + RoomService() + ) + println(3) + launch { + embeddedServer(Netty, port = 8080, host = "0.0.0.0") { + matrixAppserviceModule( + properties = MatrixAppserviceProperties("312df522183efd404ec1cd22d2ffa4bbc76a8c1ccf541dd692eef281356bb74e"), + appserviceService = appserviceService + ) + }.start(wait = true) + } + println(4) + + } + +} + +class EventTnxService : AppserviceEventTnxService { + override suspend fun eventTnxProcessingState(tnxId: String): AppserviceEventTnxService.EventTnxProcessingState { + println("eventTnxProcessingState") + return AppserviceEventTnxService.EventTnxProcessingState.NOT_PROCESSED +// return AppserviceEventTnxService.EventTnxProcessingState.PROCESSED + } + + override suspend fun onEventTnxProcessed(tnxId: String) { + println("onEventTnxProcessed") + } +} + +class UserService : AppserviceUserService { + override val matrixApiClient: MatrixApiClient + get() = matrixClient + + override suspend fun getRegisterUserParameter(userId: UserId): RegisterUserParameter { + println("getRegisterUserParameter") + return RegisterUserParameter("user parameter") + } + + override suspend fun onRegisteredUser(userId: UserId) { + println("onRegisteredUser") + } + + override suspend fun userExistingState(userId: UserId): AppserviceUserService.UserExistingState { + println("userExistingState") + return AppserviceUserService.UserExistingState.CAN_BE_CREATED + } + +} + +class RoomService : AppserviceRoomService { + override val matrixApiClient: MatrixApiClient + get() = matrixClient + + override suspend fun getCreateRoomParameter(roomAlias: RoomAliasId): CreateRoomParameter { + println("getCreateRoomParameter") + return CreateRoomParameter() + } + + override suspend fun onCreatedRoom(roomAlias: RoomAliasId, roomId: RoomId) { + println("onCreatedRoom") + } + + override suspend fun roomExistingState(roomAlias: RoomAliasId): AppserviceRoomService.RoomExistingState { + println("roomExistingState") + return AppserviceRoomService.RoomExistingState.DOES_NOT_EXISTS + } + +} \ No newline at end of file diff --git a/src/main/kotlin/eu/fosil/OkupaMiCocheAppServiceApplication.kt b/src/main/kotlin/eu/fosil/OkupaMiCocheAppServiceApplication.kt deleted file mode 100644 index 58fa722..0000000 --- a/src/main/kotlin/eu/fosil/OkupaMiCocheAppServiceApplication.kt +++ /dev/null @@ -1,11 +0,0 @@ -package eu.fosil - -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.runApplication - -@SpringBootApplication -class OkupaMiCocheAppServiceApplication - -fun main(args: Array) { - runApplication(*args) -} diff --git a/src/main/kotlin/eu/fosil/PingHandler.kt b/src/main/kotlin/eu/fosil/PingHandler.kt deleted file mode 100644 index 189d16c..0000000 --- a/src/main/kotlin/eu/fosil/PingHandler.kt +++ /dev/null @@ -1,79 +0,0 @@ -//package eu.fosil -// -//import kotlinx.coroutines.flow.collect -//import kotlinx.coroutines.flow.filter -//import net.folivo.spring.matrix.bot.event.MatrixMessageHandler -//import net.folivo.spring.matrix.bot.event.MessageContext -//import net.folivo.spring.matrix.bot.user.MatrixUserService -//import net.folivo.spring.matrix.bot.util.BotServiceHelper -//import net.folivo.trixnity.client.rest.MatrixClient -//import net.folivo.trixnity.core.model.events.m.room.MessageEventContent -//import org.slf4j.LoggerFactory -//import org.springframework.stereotype.Component -// -//@Component -//class PingHandler( -// private val matrixClient: MatrixClient, -// private val helper: BotServiceHelper, -// private val userService: MatrixUserService -//) : MatrixMessageHandler { -// companion object { -// private val LOG = LoggerFactory.getLogger(this::class.java) -// } -// -// override suspend fun handleMessage(content: MessageEventContent, context: MessageContext) { -// println("EOEO") -// LOG.debug(content.body) -// LOG.debug(context.roomId.full) -// if (content is MessageEventContent.TextMessageEventContent) { -// if (content.body.contains("ping")) { -// userService.getUsersByRoom(context.roomId) -// .filter { it.isManaged } -// .collect { member -> -// val messageId = context.answer("pong", asUserId = member.id) -// LOG.info("pong (messageid: $messageId)") -// } -// } -// } -// } -//} - - -package eu.fosil - -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.flow.filter -import net.folivo.matrix.bot.event.MatrixMessageHandler -import net.folivo.matrix.bot.event.MessageContext -import net.folivo.matrix.bot.user.MatrixUserService -import net.folivo.matrix.bot.util.BotServiceHelper -import net.folivo.matrix.core.model.events.m.room.message.MessageEvent -import net.folivo.matrix.restclient.MatrixClient -import org.slf4j.LoggerFactory -import org.springframework.stereotype.Component - -@Component -class PingHandler( - private val matrixClient: MatrixClient, - private val helper: BotServiceHelper, - private val userService: MatrixUserService -) : MatrixMessageHandler { - companion object { - private val LOG = LoggerFactory.getLogger(this::class.java) - } - - override suspend fun handleMessage(content: MessageEvent.MessageEventContent, context: MessageContext) { - println("handle message content=${content.body}") - userService.getUsersByRoom(context.roomId).collect { member -> - println(member.id) - println(member.isManaged) - } - if (content.body.contains("ping")) { - userService.getUsersByRoom(context.roomId).filter { it.isManaged } - .collect { member -> - val messageId = context.answer("pong", asUserId = member.id) - LOG.info("pong (messageid: $messageId)") - } - } - } -} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml deleted file mode 100644 index b99f036..0000000 --- a/src/main/resources/application.yml +++ /dev/null @@ -1,70 +0,0 @@ -#server: -# port: 8080 -# port: 8081 - -#spring: -# datasource: -# driver-class-name: org.h2.Driver -# url: jdbc:h2:file:./okupamicoche;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE -# jpa: -# database-platform: org.hibernate.dialect.H2Dialect -# hibernate: -# ddl-auto: update -# jackson: -# serialization: -# write-dates-as-timestamps: false - -logging: - level: - org: - springframework: INFO - eu.fosil.okupamicoche: DEBUG - -matrix: - bot: - # The domain-part of matrix-ids.E.g. example.org when your userIds look like @unicorn:example.org - serverName: okupamicoche-synapse - # The localpart (username) of the user associated with the application service - # or just the username of your bot. - username: okupamicoche - # (optional) Display name for the bot user. - displayname: Okupa mi coche - # (optional) The mode you want to use to create a bot. Default is CLIENT. The other is APPSERVICE. - mode: APPSERVICE - # (optional) Configure how users managed by your bot do automatically join rooms. - # ENABLED allows automatic joins to every invited room. - # DISABLED disables this feature. - # Default is RESTRICTED, which means, that only automatic joins to serverName are allowed. - autoJoin: ENABLED - # (optional) Configure if ALL membership changes should be tracked/saved with help of MatrixAppserviceRoomService - # or only membership changes of users, which are MANAGED by the bridge. Default is ALL (no tracking/saving). - trackMembership: ALL - # Connection setting to the database for migration purpose only (only jdbc drivers ar supported) - migration: - url: jdbc:h2:file:./matrix - username: sa - password: - # Connection settings to the database (only r2dbc drivers are supported) - database: - url: r2dbc:h2:file:///./matrix - username: sa - password: - client: - homeServer: - # The hostname of your Homeserver. - hostname: okupamicoche-synapse - # (optional) The port of your Homeserver. Default is 443. - port: 8008 - # (optional) Use http or https. Default is true (so uses https). - secure: false - # The token to authenticate against the Homeserver. - token: "30c05ae90a248a4188e620216fa72e349803310ec83e2a77b34fe90be6081f46" - appservice: - # A unique token for Homeservers to use to authenticate requests to application services. - hsToken: "312df522183efd404ec1cd22d2ffa4bbc76a8c1ccf541dd692eef281356bb74e" - # A list of users, aliases and rooms namespaces that the application service controls. - namespaces: - users: [ ] - aliases: - - localpartRegex: "viaje_.*" - rooms: [ ] diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..e573f7d --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,12 @@ + + + + %d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + diff --git a/src/test/kotlin/eu/fosil/ApplicationTest.kt b/src/test/kotlin/eu/fosil/ApplicationTest.kt new file mode 100644 index 0000000..d5c0552 --- /dev/null +++ b/src/test/kotlin/eu/fosil/ApplicationTest.kt @@ -0,0 +1,13 @@ +package eu.fosil + +import io.ktor.server.routing.* +import io.ktor.http.* +import io.ktor.server.application.* +import io.ktor.server.response.* +import io.ktor.server.request.* +import kotlin.test.* +import io.ktor.server.testing.* +import eu.fosil.plugins.* + +class ApplicationTest { +} \ No newline at end of file diff --git a/src/test/kotlin/eu/fosil/OkupaMiCocheAppServiceApplicationTests.kt b/src/test/kotlin/eu/fosil/OkupaMiCocheAppServiceApplicationTests.kt deleted file mode 100644 index 92043bf..0000000 --- a/src/test/kotlin/eu/fosil/OkupaMiCocheAppServiceApplicationTests.kt +++ /dev/null @@ -1,13 +0,0 @@ -package eu.fosil.okupamicoche - -import org.junit.jupiter.api.Test -import org.springframework.boot.test.context.SpringBootTest - -@SpringBootTest -class OkupaMiCocheAppServiceApplicationTests { - - @Test - fun contextLoads() { - } - -}