Searching We.Love.Privacy.Club

Twts matching #0
Sort by: Newest, Oldest, Most Relevant

@prologic@twtxt.net

#!/bin/sh

# Validate environment
if ! command -v msgbus > /dev/null; then
    printf "missing msgbus command. Use:  go install git.mills.io/prologic/msgbus/cmd/msgbus@latest"
    exit 1
fi

if ! command -v salty > /dev/null; then
    printf "missing salty command. Use:  go install go.mills.io/salty/cmd/salty@latest"
    exit 1
fi

if ! command -v salty-keygen > /dev/null; then
    printf "missing salty-keygen command. Use:  go install go.mills.io/salty/cmd/salty-keygen@latest"
    exit 1
fi

if [ -z "$SALTY_IDENTITY" ]; then
    export SALTY_IDENTITY="$HOME/.config/salty/$USER.key"
fi

get_user () {
    user=$(grep user: "$SALTY_IDENTITY" | awk '{print $3}')
    if [ -z "$user" ]; then
        user="$USER"
    fi
    echo "$user"
}

stream () {
    if [ -z "$SALTY_IDENTITY" ]; then
        echo "SALTY_IDENTITY not set"
        exit 2
    fi

    jq -r '.payload' | base64 -d | salty -i "$SALTY_IDENTITY" -d
}

lookup () {
    if [ $# -lt 1 ]; then
    printf "Usage: %s nick@domain\n" "$(basename "$0")"
    exit 1
    fi

    user="$1"
    nick="$(echo "$user" | awk -F@ '{ print $1 }')"
    domain="$(echo "$user" | awk -F@ '{ print $2 }')"

    curl -qsSL "https://$domain/.well-known/salty/${nick}.json"
}

readmsgs () {
    topic="$1"

    if [ -z "$topic" ]; then
        topic=$(get_user)
    fi

    export SALTY_IDENTITY="$HOME/.config/salty/$topic.key"
    if [ ! -f "$SALTY_IDENTITY" ]; then
        echo "identity file missing for user $topic" >&2
        exit 1
    fi

    msgbus sub "$topic" "$0"
}

sendmsg () {
    if [ $# -lt 2 ]; then
        printf "Usage: %s nick@domain.tld <message>\n" "$(basename "$0")"
        exit 0
    fi

    if [ -z "$SALTY_IDENTITY" ]; then
        echo "SALTY_IDENTITY not set"
        exit 2
    fi

    user="$1"
    message="$2"

    salty_json="$(mktemp /tmp/salty.XXXXXX)"

    lookup "$user" > "$salty_json"

    endpoint="$(jq -r '.endpoint' < "$salty_json")"
    topic="$(jq -r '.topic' < "$salty_json")"
    key="$(jq -r '.key' < "$salty_json")"

    rm "$salty_json"

    message="[$(date +%FT%TZ)] <$(get_user)> $message"

    echo "$message" \
        | salty -i "$SALTY_IDENTITY" -r "$key" \
        | msgbus -u "$endpoint" pub "$topic"
}

make_user () {
    mkdir -p "$HOME/.config/salty"

    if [ $# -lt 1 ]; then
        user=$USER
    else
        user=$1
    fi

    identity_file="$HOME/.config/salty/$user.key"

    if [ -f "$identity_file" ]; then
        printf "user key exists!"
        exit 1
    fi

    # Check for msgbus env.. probably can make it fallback to looking for a config file?
    if [ -z "$MSGBUS_URI" ]; then
        printf "missing MSGBUS_URI in environment"
        exit 1
    fi


    salty-keygen -o "$identity_file"
    echo "# user: $user" >> "$identity_file"

    pubkey=$(grep key: "$identity_file" | awk '{print $4}')

    cat <<- EOF
Create this file in your webserver well-known folder. https://hostname.tld/.well-known/salty/$user.json

{
  "endpoint": "$MSGBUS_URI",
  "topic": "$user",
  "key": "$pubkey"
}

EOF
}

# check if streaming
if [ ! -t 1 ]; then
    stream
    exit 0
fi

# Show Help
if [ $# -lt 1 ]; then
    printf "Commands: send read lookup"
    exit 0
fi


CMD=$1
shift

case $CMD in
    send)
        sendmsg "$@"
    ;;
    read)
        readmsgs "$@"
    ;;
    lookup)
        lookup "$@"
    ;;
    make-user)
        make_user "$@"
    ;;
esac

⤋ Read More

Nix 2.7.0 released
We’re pleased to announce the availability of Nix 2.7.0. It will be
available from
NixOS - Getting Nix / NixOS.

Here are the release notes:

  • Nix will now make some helpful suggestions when you mistype something
    on the command line. For instance, if you type nix build
    nixpkgs#thunderbrd, it will suggest
    thunderbird.

  • A number of “default” flake output attributes have been renamed.
    These are:

    • defaultPackage.<system></system>packag ... ⌘ [Read more](https://nixos.org/blog/announcements.html#nix-2.7.0)

⤋ Read More

Prosodical Thoughts: Prosody 0.12.0 released
ÄNTLIGEN! It’s finally here! After 3 years of development and through some chaotic times, Prosody 0.12.0 is released!

What’s the significance of this release? Like many software projects, Prosody follows a “branch” development/release model. We frequently make minor releases with bug fixes and improvements from our stable branch, while we implement more adventurous changes in our development branch, ready for the next major release.

Well, this is one of those adventurous … ⌘ Read more

⤋ Read More

Ignite Realtime Blog: Smack 4.4.5 and 4.5.0-alpha1 released
We are happy to announce the release of Smack 4.4.5. Thanks to numerous contributors this patch level release includes many fixes and improvements.

For a high-level overview of what’s changed in Smack 4.4.4, check out Smack’s changelog

The shortlog for the 4.4.5 release is

”`lang-nohighlight
Florian Schmaus (21):

  Smack 4.4.5-SNAPSHOT
  [core] Remo ... ⌘ [Read more](https://discourse.igniterealtime.org/t/smack-4-4-5-and-4-5-0-alpha1-released/91437)```

⤋ Read More

** 2022-02-24 feature/6.0 Android test plan **

Overview

Will test the upgrade path from a known state to new version to ensure that settings and app state are maintained during upgrade process.

V. 6.0 of libro.fm android app introduces an entirely new local database. This testing is focused on ensuring that local data remains intact between versions.

Notes

This evening I was mostly focused on setting up a successful build of feature/6.0 on my test device or the emulator. So far, no dice. My next … ⌘ Read more

⤋ Read More

Ignite Realtime Blog: REST API Openfire plugin 1.7.1 released!
Moments ago, we’ve released version 1.7.1 of the Openfire REST API plugin. This version fixes changes to the API (notably the JSON representation of some entities) that inadvertently sneaked into the 1.7.0 release. The API in 1.7.0 should closely resemble that of releases prior to 1.7.0!

The updated plugin should become available for download in your Openfire admin console in the course of the next few hours. Alternative … ⌘ Read more

⤋ Read More

Dino: Dino 0.3 Release
Dino is a secure and privacy-friendly messaging application. It uses the XMPP (Jabber) protocol for decentralized communication. We aim to provide an intuitive, clean and modern user interface.

Image

Image

The 0.3 release is all about calls. Dino now supports calls between two or more people!

Calls are end-to-end encrypted and use a direct connection between … ⌘ Read more

⤋ Read More