Mastodon é um serviço de rede social gratuito e de código aberto que é descentralizado e distribuído. Foi criado em 2016 como uma alternativa às plataformas de mídia social centralizadas, como Twitter e Fb.
Um dos principais recursos do Mastodon é o uso do protocolo WebFinger, que permite que os usuários descubram e acessem informações sobre outros usuários na rede Mastodon. O WebFinger é um protocolo simples baseado em HTTP que permite que um usuário descubra informações sobre outros usuários ou recursos na web usando seu endereço de e-mail ou outras informações de identificação. O protocolo WebFinger é importante para o Mastodon porque permite que os usuários encontrem e sigam uns aos outros na rede, independentemente de onde estejam hospedados.
O WebFinger usa uma estrutura de caminho “bem conhecida” ao chamar um domínio. Você pode estar familiarizado com a convenção robots.txt. Todos nós concordamos que robots.txt ficará no caminho superior do domínio de todos.
O protocolo WebFinger é um protocolo simples baseado em HTTP que permite que um usuário ou pesquisa descubra informações sobre outros usuários ou recursos na web usando seu endereço de e-mail ou outras informações de identificação. Meu é primeiro nome com sobrenome .com, então… meu ponto de extremidade pessoal da API WebFinger está aqui https://www.hanselman.com/.well-known/webfinger
A ideia é que…
Um usuário envia uma solicitação WebFinger para um servidor, usando o endereço de e-mail ou outras informações de identificação do usuário ou recurso que ele está tentando descobrir.
O servidor procura as informações solicitadas em seu banco de dados e retorna um objeto JSON contendo as informações sobre o usuário ou recurso. Esse objeto JSON é chamado de “useful resource descriptor”.
O cliente do usuário recebe o descritor de recurso e exibe as informações ao usuário.
O descritor de recurso contém vários tipos de informações sobre o usuário ou recurso, como seu nome, foto de perfil e hyperlinks para suas contas de mídia social ou outros recursos on-line. Ele também pode incluir outros tipos de informações, como a chave pública do usuário, que pode ser usada para estabelecer uma conexão segura com o usuário.
Há um ótimo explicador aqui também. Daquela página:
Quando alguém procura por você no Mastodon, seu servidor será consultado em busca de contas usando um endpoint parecido com este:
Word que os nomes de usuário do Mastodon começam com @, então eles são @username@someserver.com. Assim como o twiter seria @shanselman@twitter.com, eu posso ser @shanselman@hanselman.com agora!
Então talvez https://www.hanselman.com/.well-known/webfinger?useful resource=acct:FRED@HANSELMAN.COM
O meu retorna
{
"topic":"acct:shanselman@hachyderm.io",
"aliases":
(
"https://hachyderm.io/@shanselman",
"https://hachyderm.io/customers/shanselman"
),
"hyperlinks":
(
{
"rel":"http://webfinger.web/rel/profile-page",
"kind":"textual content/html",
"href":"https://hachyderm.io/@shanselman"
},
{
"rel":"self",
"kind":"software/exercise+json",
"href":"https://hachyderm.io/customers/shanselman"
},
{
"rel":"http://ostatus.org/schema/1.0/subscribe",
"template":"https://hachyderm.io/authorize_interaction?uri={uri}"
}
)
}
Este arquivo deve ser retornado como um tipo MIME de aplicação/jrd+json
Meu web site é um web site ASP.NET Razor Pages, então fiz isso no Startup.cs para mapear aquela URL conhecida para uma página/rota que retorna o JSON necessário.
companies.AddRazorPages().AddRazorPagesOptions(choices =>
{
choices.Conventions.AddPageRoute("/robotstxt", "/Robots.Txt"); //i did this earlier than, not wanted
choices.Conventions.AddPageRoute("/webfinger", "/.well-known/webfinger");
choices.Conventions.AddPageRoute("/webfinger", "/.well-known/webfinger/{val?}");
});
então eu fiz um webfinger.cshtml assim. Word que eu tenho que fazer escape duplo dos websites @@ porque é Razor.
@web page
@{
Format = null;
this.Response.ContentType = "software/jrd+json";
}
{
"topic":"acct:shanselman@hachyderm.io",
"aliases":
(
"https://hachyderm.io/@@shanselman",
"https://hachyderm.io/customers/shanselman"
),
"hyperlinks":
(
{
"rel":"http://webfinger.web/rel/profile-page",
"kind":"textual content/html",
"href":"https://hachyderm.io/@@shanselman"
},
{
"rel":"self",
"kind":"software/exercise+json",
"href":"https://hachyderm.io/customers/shanselman"
},
{
"rel":"http://ostatus.org/schema/1.0/subscribe",
"template":"https://hachyderm.io/authorize_interaction?uri={uri}"
}
)
}
Esta é uma resposta estática, mas se eu estivesse hospedando páginas para mais de uma pessoa, eu gostaria de pegar a URL com o nome do usuário e então mapeá-la para seus aliases e retorná-los corretamente.
Ainda mais fácil, você pode simplesmente usar o arquivo JSON da resposta do webfinger do seu próprio servidor Mastodon e SALVÁ-LO como um arquivo JSON estático e copiá-lo para seu próprio servidor!
Contanto que seu servidor retorne o JSON correto daquela URL conhecida, funcionará.
Então é isso meu modelo https://hachyderm.io/.well-known/webfinger?useful resource=acct:shanselman@hachyderm.io de onde estou hospedado agora.
Se você quiser começar a usar o Mastodon, comece aqui. https://github.com/joyeusenoelle/GuideToMastodon/ parece o Twitter de 2007, exceto que não é de propriedade de ninguém e é baseado em padrões da net como o ActivityPub.
Espero que isto ajude!
Sobre Scott
Scott Hanselman é um ex-professor, ex-arquiteto-chefe em finanças, agora palestrante, consultor, pai, diabético e funcionário da Microsoft. Ele é um comediante de stand-up fracassado, um cornrower e um autor de livros.