#social 2017-08-17

2017-08-17 UTC
timbl joined the channel
#
xmpp-social
[ajordan] tantak: curious why you want the most-reposted/liked thing?
#
xmpp-social
[ajordan] Also I've been reading the logs and just... lolwut
#
xmpp-social
[ajordan] tantek: > (that we know of obv - others could be lurking out there - hard to discovery of course in a decentralized system)
#
xmpp-social
[ajordan] Sounds like a problem for snarfed's IndieMap!
xmpp-social joined the channel
#
ajordan
so I heard u liek acknowledgments ;)
#
ben_thatmustbeme
ajordan: I think reviewing how people have handled ui on heavily liked/replied to posts is a good question.
#
puckipedia
we really really need to specify exactly how http signatures need to work
#
jaywink
puckipedia++
#
Loqi
puckipedia has 12 karma
#
jaywink
The spec is very incomplete without the full details
#
puckipedia
like, just specify the key object format; the way key IDs work, and the keyId value of http signatures
#
saranix
true it should be specified, but it's not as if it's a paradox. One can safely assume that if they resolved the keyId, and it contains a publicKeyPem attribute, that is the key to use, if it further dereferences to a publicKey object, then that should be dereferenced to look for a publicKeyPem
#
puckipedia
one big reason to specify keyId as the key's ID and not the owner's ID:
#
puckipedia
you could specify that keys should be atomic
#
puckipedia
eh nvm that's not going to work
#
puckipedia
as you still have to verify the key belongs
#
saranix
not sure what that means, but the only caveat I can see is if there are multiple keys, you'd want to point to the specific correct one.
#
puckipedia
think about systems that want to have e.g. keys that are only valid for 1 week
#
puckipedia
or, maybe, 1 month
#
puckipedia
(or you want the client to be in control of their keys, so they have one key per device)
#
saranix
I still don't see any ambiguity or problems
#
puckipedia
imagine a client that has e.g. 20 keys
#
puckipedia
so "publicKey": [a, b, c, ..., z]
#
puckipedia
then you sign a message with one of those keys, and you specify keyId="your user ID"
#
puckipedia
... do you have to verify that message with all 20 keys?
#
puckipedia
until you find one key that validates
#
saranix
"if there are multiple keys, you'd want to point to the specific correct one"
#
saranix
a search would be insecure
#
puckipedia
what if you don't
#
saranix
reject it
#
saranix
sig is only valid if the right key is pointed
#
puckipedia
like, would you say "if there's only one public key, you may replace the key ID with the actor ID"
#
saranix
like that yeah
#
puckipedia
why make that exception
#
saranix
cause it's a common case, and because there isn't really a type:Key
#
puckipedia
hmmm, ok
#
saranix
there should be a type:Key, but there isn't
#
saranix
only a "magick" publicKeyPem property :-P
timbl and tantek joined the channel
#
Gargron
puckipedia: the only reason why i am doing an account fetch on the keyId property is to cut corners because i expect it to be a fragment URI
#
puckipedia
it isn't for me
#
Gargron
i'll fix it eventually, it's just an annoying little detail where you have to resolve the URI, find its type, then connect it back to an actor
#
puckipedia
also do you refetch the account every time?
#
Gargron
no
#
puckipedia
I think you might, because fragment URI
#
puckipedia
at least... I thought that might happen
#
Gargron
hmm
#
Gargron
it might actually, yeah
#
puckipedia
maybe you should store the last used key ID separately?
#
puckipedia
(maybe if it's a fragment you can store a nil, and when looking for key ID first try the key ID field and else try matching it without fragment to a user id?)
#
puckipedia
this would also make it support keyId being a user ID directly
#
puckipedia
Gargron: also, the accept/reject handling needs some fixing on the receiving end as well
#
puckipedia
for the _:atomUri property; you could probably make up an equivalent for this for pointing towards the activitypub ID from OStatus
#
puckipedia
like <link rel="alternate" type="application/activity+json" href="https://[..]" />
#
puckipedia
seeing as you're fetching the status anyways
wilkie joined the channel
#
Gargron
puckipedia: https://github.com/tootsuite/mastodon/pull/4616 does this fix it, because i think it does
#
Loqi
[Gargron] #4616 Fix #4607 - Accept/reject activities use FollowRequest, which has inv…
#
Gargron
submitted it yesterday but nobody reviewed
#
Gargron
puckipedia: and yes i already did that here: https://github.com/tootsuite/mastodon/pull/4623 though not sure if it's enough
#
Loqi
[Gargron] #4623 Put ActivityPub alternate link into Atom, prefer it when processing Atom
#
puckipedia
if I'm correct, @account is the account that the request was signed with
#
puckipedia
I just double checked that and that seems to be right
#
puckipedia
this means that it tries to find a follow request that has as account the actor, and as target account the account it was signed for
#
puckipedia
and also, e.g. {"type": "Accept", "object": {"type": "Follow", "object": "userB", "actor": "userA"}, "actor": "userB"}
#
Gargron
signed by
#
puckipedia
the account the server signed it for*
#
Gargron
no the signature belongs to the actor
#
Gargron
e.g. who is sending the accept
#
Gargron
@account would be "alice", who sends an "accept" because she accepts that "bob" will follow her
#
Gargron
she sends it to "bob" who is the local user and the original actor of the "follow"
#
puckipedia
the follow for that would be e.g. {"type": "Accept", "object": {"type": "Follow", "object": "alice", "actor": "bob"}, "actor": "alice"}
#
Gargron
yes
#
puckipedia
wait no I'm reading this wrong? but it still doesn't work for me
#
Gargron
the PR is not working for you?
#
puckipedia
I mean, maybe it's on my side, one sec...
#
puckipedia
sorry. assumed that @object was the root object, aka the activity
#
puckipedia
anyways, you might want to do the ['actor'] if string, ['actor']['id'] elsewise dance there as well
#
Gargron
yeah
#
Gargron
agreed
#
Gargron
and yeah it's confusing
#
Gargron
@json = root, @object = @json['object']
#
Gargron
and then we have @object['object']
#
Gargron
how many layers of object are you on
#
puckipedia
hm. at the end, I can't get account_from_uri to work
#
Gargron
huh
#
Gargron
because of the ID thing?
#
puckipedia
well, I kiiinda hard-coded it to see if I could figure out why it broke
#
Gargron
show me your fix
#
puckipedia
well, I mean, I'm basically doing account_from_uri("http://localhost:3000/users/admin")
#
Gargron
try Account.first
#
Gargron
(for testing purposes)
#
puckipedia
I found the Other Issue(TM)
#
puckipedia
Addressable::URI.parse().normalized_host doesn't contain the port part
#
puckipedia
and local_domain for me is localhost:3000
#
puckipedia
so ActivityPub::TagManager#local_uri? returns false for local URIs
#
Gargron
ah
#
Gargron
hm
#
Gargron
hwhat do we do about that
#
Gargron
check if the result of parse contains a port part, and concatenate it before comparison?
#
puckipedia
I think there might be more locations that don't like this
#
puckipedia
and, like, it might be best to implicitly warn this I guess
#
puckipedia
\o/ Account.first hackery works
tantek joined the channel
#
puckipedia
the follow was properly accepted
#
puckipedia
I have one Mastodon follower now :D
#
puckipedia
it's myself though :<
#
puckipedia
going to try to send {"type": "Note", "content": "ActivityPub FTW", "to": "https://lol.puckipedia.com/users/puckipedia/followers", "cc": "https://www.w3.org/ns/activitystreams#Public"}
#
puckipedia
IT WORKED
#
Gargron
that's unlisted innit
#
puckipedia
cc to public
#
Gargron
yeah i think we codify "unlisted" that way
#
Gargron
great to hear
#
puckipedia
hmm, I assumed unlisted was without public
#
puckipedia
anyways I can't click the time to go to the original place
#
Gargron
oh
#
Gargron
you didn't include a url?
#
puckipedia
the json has no url: attribute
#
Gargron
yeah
#
Gargron
it should
#
puckipedia
hmm
#
Gargron
or maybe we should fall back to id?
#
puckipedia
the frontend should fall back to URI
#
puckipedia
anyways \o/
#
Gargron
the frontend should have no knowledge of protocol stuff tbh
#
Gargron
but yes we should fallback the url property in db to the id attribute from the json
#
puckipedia
it... it sent a message back and worked?
#
Gargron
it worked as intended?
#
puckipedia
yes!
#
Gargron
great to hear!!
#
puckipedia
for reference, the Note itself has to: followers; cc: public, mentioned
#
Gargron
so to summarize: 1) elaborate keyId resolving 2) make TagManager recognize ports for dev environments purposes 3) fallback url to id when processing
#
puckipedia
yes
#
puckipedia
\o/ \o/
#
puckipedia
now I will Like this object
#
puckipedia
it didn't like properly
#
puckipedia
because of the port number bug :<
#
puckipedia
yep likes work as well :D
#
Gargron
\o/
#
puckipedia
let's like it the other way
#
puckipedia
... woops, error
#
puckipedia
Kroeg side that is
cwebber2 joined the channel
#
puckipedia
ah I think it doesn't like the authorization
#
puckipedia
which, I bet, is caused by a bug in KRoeg
#
puckipedia
cwebber2: I sent an ActivityPub Note to Mastodon and it worked!
#
Loqi
[Eugen] @puckipedia testing Mastodon against his own ActivityPub implementation <puckipedia> it... it sent a message back and worked? <Gargron> it worked as intended? <puckipedia> yes!
#
cwebber2
:D :D :D
#
cwebber2
:D :D :D :D :D :D :D
#
Gargron
loqi is capable of extracting the right text out of our links?
#
xmpp-social
[ajordan] Gargron: Loqi parses microformats2
#
Gargron
cool
#
xmpp-social
[ajordan] ?
#
puckipedia
yep. something went wrong reading the user id
#
xmpp-social
[ajordan] I think Loqi's ability to do that is a testament to mf2's flexibility
#
puckipedia
guess who forgot to add "publicKey" to their things that should be flattened
#
puckipedia
it's me
#
xmpp-social
[ajordan] Lol
#
xmpp-social
[ajordan] puckipedia++
#
puckipedia
signature died somehow :<
#
puckipedia
System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters
#
puckipedia
something in the publicKeyPem was not nice
#
puckipedia
ah, way too much newlines
#
Gargron
on my side?
#
Gargron
i dont think i put any newlines in, did i
#
puckipedia
nah, I should be able to handle it
#
puckipedia
I have really shoddy PEM handling
#
puckipedia
... it says it tried to like a non-existant object
#
Gargron
o.O
tantek joined the channel
#
puckipedia
okay so somehow the like isn't stored properly
#
puckipedia
:D: issues with port numbers on my side
#
puckipedia
hey the like worked
#
Gargron
\o/