github.com/louisevanderlith/droxolite@v1.20.2/mix/mods.go (about)

     1  package mix
     2  
     3  import (
     4  	"github.com/coreos/go-oidc"
     5  	"net/http"
     6  )
     7  
     8  //ModFunc can be used to add additional values to the view bag before rendering
     9  type ModFunc func(b Bag, r *http.Request)
    10  
    11  func EndpointMod(endpoints map[string]string) ModFunc {
    12  	return func(b Bag, r *http.Request) {
    13  		b.SetValue("Endpoints", endpoints)
    14  	}
    15  }
    16  
    17  func IdentityMod(clientId string) ModFunc {
    18  	return func(b Bag, r *http.Request) {
    19  		b.SetValue("ClientID", clientId)
    20  
    21  		tkn := r.Context().Value("Token")
    22  
    23  		if tkn == nil {
    24  			return
    25  		}
    26  
    27  		b.SetValue("Token", tkn)
    28  
    29  		tknVal := r.Context().Value("IDToken")
    30  
    31  		if tknVal == nil {
    32  			return
    33  		}
    34  
    35  		idToken := tknVal.(*oidc.IDToken)
    36  		claims := make(map[string]interface{})
    37  		err := idToken.Claims(&claims)
    38  
    39  		if err != nil {
    40  			panic(err)
    41  			return
    42  		}
    43  
    44  		b.SetValue("User", claims)
    45  	}
    46  }