Package webfinger provides tools for working with the WebFinger protocol, for the Go programming language.
Find a file
2025-08-20 06:49:28 -07:00
contenttypes.go webfinger.ContentTypeJRD 2025-02-05 16:02:06 -08:00
defaulthttpsurl.go webfinger.DefaultHTTPSURL() 2025-02-06 02:08:31 -08:00
defaulthttpsurl_example_test.go correct func name in test-example 2025-08-20 06:11:04 -07:00
errhttp.go http error 2024-11-30 06:04:05 -08:00
get.go github -> codeberg 2025-08-20 06:06:29 -07:00
go.mod github -> codeberg 2025-08-20 06:06:29 -07:00
go.sum go.* 2025-04-03 04:26:15 -07:00
handler.go refactor 2024-11-30 03:10:55 -08:00
handlerfunc.go refactor 2024-11-30 03:10:55 -08:00
httperror.go webfinger.httpError 2024-03-20 09:33:22 -07:00
httphandler.go webfinger.ServeJRDBytes() 2025-02-04 07:23:58 -08:00
jsonmarshalmap.go webfinger.Link 2024-11-29 07:39:53 -08:00
jsonmarshalnameoptionalvalue.go webfinger.Link 2024-11-29 07:39:53 -08:00
jsonmarshalnameoptionalvalue_test.go webfinger.Link 2024-11-29 07:39:53 -08:00
jsonmarshalnamestringsvalue.go webfinger.Response 2024-11-29 22:14:30 -08:00
jsonmarshalnamestringvalue.go webfinger.Link 2024-11-29 07:39:53 -08:00
LICENSE initial commits 2024-03-20 09:17:21 -07:00
link.go docs 2025-02-06 02:53:29 -08:00
link_marshaljson_test.go github -> codeberg 2025-08-20 06:06:29 -07:00
link_unmarshaljson_test.go github -> codeberg 2025-08-20 06:06:29 -07:00
path.go improved docs 2025-08-20 06:49:28 -07:00
README.md github -> codeberg 2025-08-20 06:06:29 -07:00
response.go added compile type check 2025-08-20 06:44:19 -07:00
response_marshaljson_examples_test.go examples 2025-08-20 06:40:20 -07:00
response_marshaljson_test.go github -> codeberg 2025-08-20 06:06:29 -07:00
response_unmarshaljson_test.go github -> codeberg 2025-08-20 06:06:29 -07:00
servejrd.go webfinger.ContentTypeJRD 2025-02-05 16:02:06 -08:00

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/codeberg.org/reiver/go-webfinger

GoDoc

Client Examples

Here is an example on how to make a WebFinger request:

host := "example.com"
resource := "acct:[email protected]"


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:

url := "https://example.com/.well-known/webfinger?resource=acct:[email protected]"

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:

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.,:

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 error

	jrdBytes, err = response.MarshalJSON()


	// ...

	webfinger.ServeJRDBytes(responseWriter, request, jrdBytes)
}

Or, alternatively, you can do something similar to:

func serveWebFinger(responseWriter http.ResponseWriter, resource string, rels ...string) {
	//@TODO

	var 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 "codeberg.org/reiver/go-webfinger"

Installation

To install package webfinger do the following:

GOPROXY=direct go get codeberg.org/reiver/go-webfinger

Author

Package webfinger was written by Charles Iliya Krempeaux