Misfin problems - send from capsule
Created: 2025-03-28 Copyright: CC-BY-SA 4.0 Language: en
I was very happy because I got running my misfin server from cipres[1]. It is written in python, so I can understand the code as 20 years ago I was python developer and still use it for my own stuff.
Installation was not so simple because I did it through docker under traefik proxy. What can I say - sending from lagrange works. From gemini interfase - no. Misfin messages came and I was good with it for the beginning.
Now I wanted to implement sending misfin message to myself from my capsules when gemini mention was made. In bbs[2] I asked for help and clseibold come with the help by redirecting to golang lib for misfin client lib[3]. It is very awesome.
Tried implement by code:
message := "# TEST\nTuri gautÄ—"
certFile, err := os.ReadFile("./identities/alkierios_misfin.pem")
if err != nil {
fmt.Printf("[gemini-mentions] couldn't read misfin sert: %s", err)
}
client := misfin_client.Client{}
resp, err := client.SendWithCert("misfin://zordsdavini@arns.lt", certFile, certFile, message)
if err != nil {
fmt.Printf(
"[gemini-mentions] couldn't send misfin message\n%s\n%s\n%s",
message,
certFile,
err,
)
}
fmt.Printf(
"[Misfin] %d %s\n",
resp.Status,
resp.Meta,
) // Should print `20 ` if server is running
but got respone:
[Misfin] 50 Cannot allocate mailbox
In misfin server side I got:
DEBUG:misfin.misfin:Incoming connection from ('172.25.0.29', 55000) at 2025-03-28 13:43:12.492030
INFO:misfin:zordsdavini@arns.lt OK: cafffdfddc8bc52f96909e3202e618e777d6c973081af1b71b2b3f27b4ef2176 is valid
INFO:misfin:Delivery: 168d8b06540069b890ce70b74765eede024414ca70b41157902619e897c7dba4 (alkierios@arns.lt) => cafffdfddc8bc52f96909e3202e618e777d6c973081af1b71b2b3f27b4ef2176 (zordsdavini@arns.lt)
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/misfin/service.py", line 794, in serve_multi
letter = Letter.incoming(peer, request)
File "/usr/local/lib/python3.9/site-packages/misfin/letter.py", line 181, in incoming
sident = Letter._parse_identity(s.lstrip())
File "/usr/local/lib/python3.9/site-packages/misfin/letter.py", line 115, in _parse_identity
return Identity(address, blurb=blurb)
File "/usr/local/lib/python3.9/site-packages/misfin/identity.py", line 31, in __init__
self.mailbox, self.hostname = address.split("@", 1)
ValueError: not enough values to unpack (expected 2, got 1)
I have no idea what is wrong yet. It looks like both are running under Misfin(C). Needs to debug deeper
Solved
Changed client to Misfin(B) and it works.
client := misfin_client.Client{MisfinB: true}
Solved #2
In bbs clseibold explained main difference between Misfin(b) and Misfin(c). 3 spaces. And as I gave message body by myself it was treated as Misfin(b) format.
I was told to use gemmail lib to format message and BOOM - it works.
So, last all code:
package main
import (
"fmt"
"os"
"gitlab.com/clseibold/misfin-server/gemmail"
"gitlab.com/clseibold/misfin-server/misfin_client"
)
const ZORDSDAVINI_MISFIN = "misfin://zordsdavini@arns.lt"
func SendMisfinMessage(body string, recipient string) error {
certFile, err := os.ReadFile("./identities/alkierios_misfin.pem")
if err != nil {
return fmt.Errorf("[Misfin-send] couldn't read misfin certificate: %s", err)
}
client := misfin_client.Client{}
message := gemmail.CreateGemMailFromBody(body)
resp, err := client.SendWithCert(
recipient,
certFile,
certFile,
message.String(),
)
if err != nil {
return fmt.Errorf("[Misfin-send] %s", err)
}
fmt.Printf(
"[Misfin-send] %d %s\n",
resp.Status,
resp.Meta,
) // Should print `20 ` if server is running
return nil
}
Page counter: 3m