summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColeman McFarland <coleman@de.limited>2024-04-19 18:27:47 -0400
committerColeman McFarland <coleman@de.limited>2024-04-19 18:27:47 -0400
commit78084ee76d6e6ac4b5e94e015b354bd3cfa8e934 (patch)
treef832de4ba0a4a35aa8c268eaf44f4ff8b47cf61a
parentf9ff75e1d38f43afe28953b7503aae59ad13eb6c (diff)
OpenBSD upload and packaging
-rw-r--r--main.cpp53
-rw-r--r--pkg/openbsd/chatops-wrapper7
-rw-r--r--pkg/openbsd/rc.d/chatops11
-rwxr-xr-xupload.sh9
4 files changed, 53 insertions, 27 deletions
diff --git a/main.cpp b/main.cpp
index 4febcb9..128fc7b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -3,9 +3,11 @@
#include <strophe.h>
#include <cstring>
#include <string>
+#include <fstream>
#include <map>
static int reconnect;
+
int handle_message(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, void *const userdata) {
printf("Received message!\n");
return 1;
@@ -19,7 +21,7 @@ enum StanzaType {
std::map<std::string, StanzaType> stanzaTypeMap = {
{"groupchat", GROUP_CHAT},
- {"chat", DIRECT_MESSAGE},
+ {"chat", DIRECT_MESSAGE},
};
StanzaType stanza_type_from_str(const char *s) {
@@ -32,8 +34,7 @@ StanzaType stanza_type_from_str(const char *s) {
return UNKNOWN;
}
-int version_handler(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata)
-{
+int version_handler(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata) {
xmpp_stanza_t *reply, *query, *name, *version, *text;
const char *ns;
xmpp_ctx_t *ctx;
@@ -79,15 +80,13 @@ int version_handler(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata)
return 1;
}
-static int _quit_handler(xmpp_conn_t *conn, void *userdata)
-{
- (void)userdata;
+static int _quit_handler(xmpp_conn_t *conn, void *userdata) {
+ (void) userdata;
xmpp_disconnect(conn);
return 0;
}
-int message_handler(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata)
-{
+int message_handler(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata) {
xmpp_ctx_t *ctx;
ctx = (xmpp_ctx_t *) userdata;
xmpp_stanza_t *body, *reply;
@@ -138,7 +137,7 @@ int message_handler(xmpp_conn_t *conn, xmpp_stanza_t *stanza, void *userdata)
reconnect = 1;
xmpp_timed_handler_add(conn, _quit_handler, 500, nullptr);
} else {
- replytext = (char *)malloc(strlen(" to you too!") + strlen(intext) + 1);
+ replytext = (char *) malloc(strlen(" to you too!") + strlen(intext) + 1);
strcpy(replytext, intext);
strcat(replytext, " to you too!");
}
@@ -181,13 +180,12 @@ void conn_handler(xmpp_conn_t *conn,
xmpp_conn_event_t status,
int error,
xmpp_stream_error_t *stream_error,
- void *userdata)
-{
+ void *userdata) {
xmpp_ctx_t *ctx;
ctx = (xmpp_ctx_t *) userdata;
- (void)error;
- (void)stream_error;
+ (void) error;
+ (void) stream_error;
if (status == XMPP_CONN_CONNECT) {
xmpp_stanza_t *pres;
@@ -210,16 +208,37 @@ void conn_handler(xmpp_conn_t *conn,
}
}
+std::string read_single_line_file(const std::string &filename) {
+ std::ifstream file(filename);
+ std::string line;
+
+ if (!file) {
+ return ""; // Return an empty string or handle error appropriately
+ }
+
+ if (std::getline(file, line)) {
+ return line;
+ } else {
+ return ""; // Handle failure to read line
+ }
+}
+
int main(int argc, char **argv) {
- char *pass;
+ const char *pass;
+ // first, try env var
if ((pass = getenv("CHATOPS_PASSWORD")) == nullptr) {
- printf("must set CHATOPS_PASSWORD\n");
- exit(2);
+ // next, try password file
+ auto pass_from_file = read_single_line_file("/etc/chatops/password");
+ if (pass_from_file.empty()) {
+ printf("error: must set password via CHATOPS_PASSWORD or /etc/chatops/password file\n");
+ exit(2);
+ }
+ pass = pass_from_file.c_str();
}
char *jid;
if ((jid = getenv("CHATOPS_JID")) == nullptr) {
- jid = (char *)"devil@de.limited";
+ jid = (char *) "devil@de.limited";
}
xmpp_ctx_t *ctx;
diff --git a/pkg/openbsd/chatops-wrapper b/pkg/openbsd/chatops-wrapper
new file mode 100644
index 0000000..7bab300
--- /dev/null
+++ b/pkg/openbsd/chatops-wrapper
@@ -0,0 +1,7 @@
+#!/bin/ksh
+
+. /etc/chatops/env
+
+export CHATOPS_PASSWORD
+
+/usr/local/bin/chatops
diff --git a/pkg/openbsd/rc.d/chatops b/pkg/openbsd/rc.d/chatops
index d232bdb..11ef847 100644
--- a/pkg/openbsd/rc.d/chatops
+++ b/pkg/openbsd/rc.d/chatops
@@ -1,18 +1,9 @@
#!/bin/ksh
daemon="/usr/local/bin/chatops"
-daemon_flags="" # Add any flags if needed
-#daemon_user="_chatops" # Run the daemon under a specific user
. /etc/rc.d/rc.subr
-rc_reload=NO # Set this if your daemon does not support reloading
-
-#pexp="/usr/local/bin/chatops" # Process name to look for
-
-# Read environment variables from a file
-if [ -f /etc/chatops/env ]; then
- . /etc/chatops/env
-fi
+# /etc/chatops/env must exist and set CHATOPS_PASSWORD
rc_cmd $1
diff --git a/upload.sh b/upload.sh
new file mode 100755
index 0000000..2e3399c
--- /dev/null
+++ b/upload.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+
+rsync -aP \
+ --exclude=.git \
+ --exclude=buildDir \
+ --exclude=.idea \
+ ./ coleman@mammoth:~/Code/chatops/
+