https://github.com/reiver/go-webfinger
Package webfinger provides tools for working with the WebFinger protocol, for the Go programming language.
https://github.com/reiver/go-webfinger
fediverse webfinger
Last synced: 7 months ago
JSON representation
Package webfinger provides tools for working with the WebFinger protocol, for the Go programming language.
- Host: GitHub
- URL: https://github.com/reiver/go-webfinger
- Owner: reiver
- License: mit
- Created: 2024-03-20T16:15:45.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-02-04T15:24:02.000Z (8 months ago)
- Last Synced: 2025-02-04T16:28:14.563Z (8 months ago)
- Topics: fediverse, webfinger
- Language: Go
- Homepage:
- Size: 23.4 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-webfinger
Package **webfinger** provides tools for working with the **WebFinger** protocol, for the Go programming language.
WebFinger is a protocol, building on top of HTTP/HTTPS, that allows for discovery of things (such as people, users, objects, etc) that can be identified by a URI.
## Documention
Online documentation, which includes examples, can be found at: http://godoc.org/github.com/reiver/go-webfinger
[](https://godoc.org/github.com/reiver/go-webfinger)
## Client Examples
Here is an example on how to make a WebFinger request:
```golang
host := "example.com"
resource := "acct:reiver@mastodon.social"var response webfinger.Response
err := webfinger.Get(&response, host, resource)
```Alternatively, if you want to specify the example HTTPS URL, you can instead do something similar to:
```golang
url := "https://example.com/.well-known/webfinger?resource=acct:reiver@mastodon.social"var response webfinger.Response
err := webfinger.GetRaw(&response, url)
```## Server Examples
If you want to create a WebFinger server, you can either do something similar to:
```golang
func ServeHTTP(responseWriter http.ResponseWriter, request *http.Request) {// ...
var jrdBytes []byte = ???
// ...
webfinger.ServeJRDBytes(responseWriter, request, jrdBytes)
}
```Note that you can create the `jrdBytes` in the example by using `webfinger.Response`'s `MarshalJSON()` method.
I.e.,:```golang
func ServeHTTP(responseWriter http.ResponseWriter, request *http.Request) {// ...
var response webfinger.Response
response.Subject = ???
response.Aliases = ???
response.Properties = ???
response.Links = ???// ...
var jrdBytes []byte
var err errorjrdBytes, err = response.MarshalJSON()
// ...
webfinger.ServeJRDBytes(responseWriter, request, jrdBytes)
}
```Or, alternatively, you can do something similar to:
```golang
func serveWebFinger(responseWriter http.ResponseWriter, resource string, rels ...string) {
//@TODOvar response webfinger.Response
// ...
err := json.NewEncoder(responseWriter).Encode(response)
//@TODO
}var webFingerHandler webfinger.Handler = webfinger.HandlerFunc(serveWebFinger)
var httpHandler http.Handler = webfinger.HTTPHandler(webFingerHandler)
// ...
var path string = webfinger.webFingerHandler // == "/.well-known/webfinger"
// Replace this line of code with however you register handlers with your favorite HTTP mux.
http.Handle(path, httpHandler)
```## Import
To import package **webfinger** use `import` code like the follownig:
```
import "github.com/reiver/go-webfinger"
```## Installation
To install package **webfinger** do the following:
```
GOPROXY=direct go get github.com/reiver/go-webfinger
```## Author
Package **webfinger** was written by [Charles Iliya Krempeaux](http://reiver.link)