Misfin problems - send from capsule

🏷 misfin
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
}
1: cipres
2: bbs
3: misfin client lib
🌿 gemini
🏠 home
Page counter: 3m

Mentions

➕ New gemini mention