{"repo":"kyleterry/tenyks","free":true,"listed":false,"github":"https://github.com/kyleterry/tenyks","clone":"git clone https://github.com/kyleterry/tenyks.git","description":"The Tenyks IRC bot.","language":"Go","stars":176,"topics":["irc","go","bot","tenyks","irc-bot","json-payload","golang"],"license":null,"category":"chat-messaging","readme_excerpt":"tenyks An IRC bot written in Go. Tenyks relays IRC messages to external service clients over a bidirectional gRPC stream secured with mutual TLS (mTLS). Services authenticate using client certificates that encode the channel paths they are permitted to access. Architecture - tenyks — connects to IRC, fans messages out to every registered service client, and routes replies back to the appropriate channel. - service clients — long-lived processes that connect to tenyks, receive matched messages, and optionally send replies. - tenyksctl — administration CLI for issuing client certificates. Getting started Prerequisites Run Build Test Live reload Service client certificates Tenyks requires every service client to present a valid mTLS certificate signed by the same CA as the server. Certificates embed a custom X.509 extension that encodes the destination paths the client is allowed to access. Use tenyksctl generate-client-certificate to issue certificates. Basic usage (files written to disk) Writes weather-service.crt and weather-service.key to the current directory. Encrypted bundle for safe delivery When issuing a certificate for someone else, use -bundle to encrypt the certificate, private key, and CA cert into a single age-encrypted archive. The private key never needs to travel in plaintext. Step 1 — recipient generates an age keypair (one time): The recipient shares only the public key ( age1abc123... ) with you. Step 2 — issue and encrypt the certificate: Writes weather-ser","default_branch":null,"files":null,"tree":[],"storefront":"/r/kyleterry","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/kyleterry/tenyks/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}