|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- package webfinger
-
- import (
- "net/http"
-
- "github.com/captncraig/cors"
- )
-
- // Service is the webfinger service containing the required
- // HTTP handlers and defaults for webfinger implementations.
- type Service struct {
-
- // PreHandlers are invoked at the start of each HTTP method, used to
- // setup things like CORS, caching, etc. You can delete or replace
- // a handler by setting service.PreHandlers[name] = nil
- PreHandlers map[string]http.Handler
-
- // NotFoundHandler is the handler to invoke when a URL is not matched. It does NOT
- // handle the case of a non-existing users unless your Resolver.DummyUser returns
- // an error that matches Resolver.IsNotFoundError(err) == true.
- NotFoundHandler http.Handler
-
- // MethodNotSupportedHandler is the handler invoked when an unsupported
- // method is called on the webfinger HTTP service.
- MethodNotSupportedHandler http.Handler
-
- // MalformedRequestHandler is the handler invoked if the request routes
- // but is malformed in some way. The default behavior is to return 400 BadRequest,
- // per the webfinger specification
- MalformedRequestHandler http.Handler
-
- // NoTLSHandler is the handler invoked if the request is not
- // a TLS request. The default behavior is to redirect to the TLS
- // version of the URL, per the webfinger specification. Setting
- // this to nil will allow nonTLS connections, but that is not advised.
- NoTLSHandler http.Handler
-
- // ErrorHandler is the handler invoked when an error is called. The request
- // context contains the error in the webfinger.ErrorKey and can be fetched
- // via webfinger.ErrorFromContext(ctx)
- ErrorHandler http.Handler
-
- // Resolver is the interface for resolving user details
- Resolver Resolver
- }
-
- // Default creates a new service with the default registered handlers
- func Default(ur Resolver) *Service {
- var c = cors.Default()
-
- s := &Service{}
- s.Resolver = ur
- s.ErrorHandler = http.HandlerFunc(s.defaultErrorHandler)
- s.NotFoundHandler = http.HandlerFunc(s.defaultNotFoundHandler)
- s.MethodNotSupportedHandler = http.HandlerFunc(s.defaultMethodNotSupportedHandler)
- s.MalformedRequestHandler = http.HandlerFunc(s.defaultMalformedRequestHandler)
- s.NoTLSHandler = http.HandlerFunc(s.defaultNoTLSHandler)
-
- s.PreHandlers = make(map[string]http.Handler)
- s.PreHandlers[NoCacheMiddleware] = http.HandlerFunc(noCache)
- s.PreHandlers[CorsMiddleware] = http.HandlerFunc(c.HandleRequest)
- s.PreHandlers[ContentTypeMiddleware] = http.HandlerFunc(jrdSetup)
-
- return s
- }
|