diff options
Diffstat (limited to '')
| -rw-r--r-- | Dockerfile | 6 | ||||
| -rw-r--r-- | docker-compose.yaml | 2 | ||||
| -rw-r--r-- | go.mod | 1 | ||||
| -rw-r--r-- | go.sum | 2 | ||||
| -rw-r--r-- | main.go | 63 | 
5 files changed, 69 insertions, 5 deletions
@@ -1,4 +1,4 @@ -FROM alpine:3.18 as builder +FROM alpine:3.19 as builder  RUN apk update && apk upgrade && \        apk add go git  RUN git clone https://github.com/terminaldweller/sms-webhook @@ -9,12 +9,12 @@ RUN go mod download  ENV CGO_ENABLED=0  RUN go build -FROM alpine:3.18 as certbuilder +FROM alpine:3.19 as certbuilder  RUN apk add openssl  WORKDIR /certs  RUN openssl req -nodes -new -x509 -subj="/C=US/ST=Denial/L=springfield/O=Dis/CN=sms-webhook" -keyout server.key -out server.cert -FROM alpine:3.18 +FROM alpine:3.19  COPY --from=certbuilder /certs /certs  COPY --from=builder /sms-webhook/sms-webhook /sms-webhook/  ENTRYPOINT ["/sms-webhook/sms-webhook"] diff --git a/docker-compose.yaml b/docker-compose.yaml index b019e9e..a9b5dfb 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -31,7 +31,7 @@ services:      volumes:        - pb-vault:/sms-webhook/pb_data    redis: -    image: redis:7.2-alpine +    image: redis:7.2.3-alpine3.18      deploy:        resources:          limits: @@ -5,6 +5,7 @@ go 1.21  require (  	github.com/go-redis/redis/v8 v8.11.5  	github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 +	github.com/lrstanley/girc v0.0.0-20230911164840-f47717952bf9  	github.com/pocketbase/pocketbase v0.18.9  ) @@ -164,6 +164,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=  github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=  github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61 h1:FwuzbVh87iLiUQj1+uQUsuw9x5t9m5n5g7rG7o4svW4=  github.com/labstack/echo/v5 v5.0.0-20230722203903-ec5b858dab61/go.mod h1:paQfF1YtHe+GrGg5fOgjsjoCX/UKDr9bc1DoWpZfns8= +github.com/lrstanley/girc v0.0.0-20230911164840-f47717952bf9 h1:Kgp9FtxM8VZr2wDmXhCkd/f2EW5NeXJzZSWMYQB4M4s= +github.com/lrstanley/girc v0.0.0-20230911164840-f47717952bf9/go.mod h1:lgrnhcF8bg/Bd5HA5DOb4Z+uGqUqGnp4skr+J2GwVgI=  github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=  github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=  github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= @@ -1,6 +1,7 @@  package main  import ( +	"crypto/tls"  	"flag"  	"fmt"  	"log" @@ -8,6 +9,7 @@ import (  	"github.com/go-redis/redis/v8"  	"github.com/labstack/echo/v5" +	"github.com/lrstanley/girc"  	"github.com/pocketbase/pocketbase"  	"github.com/pocketbase/pocketbase/core"  ) @@ -28,6 +30,15 @@ type SMSInfo struct {  	Sim           string `json:"sim"`  } +type IRCInfo struct { +	ircServer   string +	ircPort     int +	ircNick     string +	ircSaslUser string +	ircSaslPass string +	ircChannel  string +} +  func postHandler(context echo.Context) error {  	smsInfo := new(SMSInfo)  	if err := context.Bind(smsInfo); err != nil { @@ -47,7 +58,55 @@ func postHandler(context echo.Context) error {  	return context.JSON(http.StatusOK, smsInfo)  } +func runIRC(ircInfo IRCInfo) *girc.Client { +	irc := girc.New(girc.Config{ +		Server:    ircInfo.ircServer, +		Port:      ircInfo.ircPort, +		Nick:      ircInfo.ircNick, +		User:      "soulshack", +		Name:      "soulshack", +		SSL:       true, +		TLSConfig: &tls.Config{InsecureSkipVerify: false}, +	}) + +	saslUser := ircInfo.ircSaslUser +	saslPass := ircInfo.ircSaslPass +	if saslUser != "" && saslPass != "" { +		irc.Config.SASL = &girc.SASLPlain{ +			User: ircInfo.ircSaslUser, +			Pass: ircInfo.ircSaslPass, +		} +	} + +	irc.Handlers.AddBg(girc.PRIVMSG, func(c *girc.Client, e girc.Event) { +	}) + +	if err := irc.Connect(); err != nil { +		log.Fatal(err) +		return nil +	} +	return irc +} +  func main() { +	ircServer := flag.String("ircserver", "irc.terminaldweller.com", "the address of the irc server to connect to") +	ircPort := flag.Int("ircport", 6697, "the port of the irc server to connect to") +	ircNick := flag.String("ircnick", "soulhack", "the nick to use on the irc server") +	ircSaslUser := flag.String("ircsasluser", "soulhack", "the sasl user to use on the irc server") +	ircSaslPass := flag.String("ircsaslpass", "", "the sasl password to use on the irc server") +	ircChannel := flag.String("ircchannel", "#soulhack", "the channel to join on the irc server") + +	ircInfo := IRCInfo{ +		ircServer:   *ircServer, +		ircPort:     *ircPort, +		ircNick:     *ircNick, +		ircSaslUser: *ircSaslUser, +		ircSaslPass: *ircSaslPass, +		ircChannel:  *ircChannel, +	} + +	ircClient := runIRC(ircInfo) +  	redisAddress := flag.String("redisaddress", "redis:6379", "determines the address of the redis instance")  	redisPassword := flag.String("redispassword", "", "determines the password of the redis db")  	redisDB := flag.Int64("redisdb", 0, "determines the db number") @@ -66,7 +125,9 @@ func main() {  	app := pocketbase.New()  	app.OnBeforeServe().Add(func(e *core.ServeEvent) error { -		e.Router.POST("/sms/*", postHandler) +		e.Router.POST("/sms", postHandler) + +		ircClient.Handlers.AddBg(girc.PRIVMSG, func(c *girc.Client, e girc.Event) {})  		return nil  	})  | 
