summaryrefslogtreecommitdiff
path: root/images/znc
diff options
context:
space:
mode:
Diffstat (limited to 'images/znc')
-rw-r--r--images/znc/Dockerfile25
-rw-r--r--images/znc/privmsg.cpp40
-rw-r--r--images/znc/service/znc/run5
3 files changed, 70 insertions, 0 deletions
diff --git a/images/znc/Dockerfile b/images/znc/Dockerfile
new file mode 100644
index 0000000..6dfec6a
--- /dev/null
+++ b/images/znc/Dockerfile
@@ -0,0 +1,25 @@
+FROM alpine:3.5 AS builder
+
+RUN apk add --no-cache build-base git automake autoconf openssl-dev icu-dev
+
+RUN git clone --single-branch --depth=1 --recursive https://github.com/znc/znc.git /tmp/znc
+
+RUN mkdir -p /app /data
+RUN cd /tmp/znc \
+ && ./autogen.sh \
+ && ./configure --prefix="/app/znc" \
+ && make \
+ && make install
+
+ADD privmsg.cpp /tmp/
+RUN cd /tmp/ \
+ && /app/znc/bin/znc-buildmod /tmp/privmsg.cpp \
+ && mv privmsg.so /app/znc/lib/znc/
+
+FROM server_runit
+
+RUN apk add --no-cache sudo libcap openssl icu
+COPY --from=builder /app /app
+
+# -S: system, -h: home
+RUN adduser -S -h /data znc && chmod a+x /data
diff --git a/images/znc/privmsg.cpp b/images/znc/privmsg.cpp
new file mode 100644
index 0000000..0659f96
--- /dev/null
+++ b/images/znc/privmsg.cpp
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2004-2012 See the AUTHORS file for details.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <znc/IRCNetwork.h>
+#include <znc/Modules.h>
+
+class CPrivMsgMod : public CModule {
+public:
+ MODCONSTRUCTOR(CPrivMsgMod) {}
+
+ virtual EModRet OnUserMsg(CString& sTarget, CString& sMessage) {
+ if (m_pNetwork && m_pNetwork->GetIRCSock() && !m_pNetwork->IsChan(sTarget)) {
+ m_pNetwork->PutUser(":" + m_pNetwork->GetIRCNick().GetNickMask() + " PRIVMSG " + sTarget + " :" + sMessage, NULL, m_pClient);
+ }
+
+ return CONTINUE;
+ }
+
+ virtual EModRet OnUserAction(CString& sTarget, CString& sMessage) {
+ if (m_pNetwork && m_pNetwork->GetIRCSock() && !m_pNetwork->IsChan(sTarget)) {
+ m_pNetwork->PutUser(":" + m_pNetwork->GetIRCNick().GetNickMask() + " PRIVMSG " + sTarget + " :\x01" + "ACTION " + sMessage + "\x01", NULL, m_pClient);
+ }
+
+ return CONTINUE;
+ }
+};
+
+template<> void TModInfo<CPrivMsgMod>(CModInfo& Info) {
+ Info.SetWikiPage("privmsg");
+ Info.AddType(CModInfo::NetworkModule);
+ Info.AddType(CModInfo::GlobalModule);
+}
+
+USERMODULEDEFS(CPrivMsgMod, "Send outgoing PRIVMSGs and CTCP ACTIONs to other clients")
+
diff --git a/images/znc/service/znc/run b/images/znc/service/znc/run
new file mode 100644
index 0000000..14814ea
--- /dev/null
+++ b/images/znc/service/znc/run
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+chown -R znc /data
+setcap 'cap_net_bind_service=+ep' /app/znc/bin/znc
+exec sudo -u znc /app/znc/bin/znc --foreground --datadir /data