_humanID "github.com/bluenumberfoundation/humanid-golang-sdk"
type HTTPHandler struct {
func RespondJSON(w http.ResponseWriter, status int, payload interface{}) {
response, err := json.Marshal(payload)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
w.Header().Set("Content-Type", "application/json")
w.Write([]byte(response))
func (handler HTTPHandler) Authenticate(w http.ResponseWriter, r *http.Request) {
tokenArr, ok := r.URL.Query()["et"]
code, ok := r.URL.Query()["code"]
redirectSuccessURL := "[YOUR_FAIL_REDIRECT_URL]"
http.Redirect(w, r, redirectSuccessURL, 301)
verifyTokenResp, err := handler.humanID.VerifyToken(token)
if verifyTokenResp.Code == "OK" {
redirectSuccessURL := "[YOUR_SUCCCESS_REDIRECT_URL]"
http.Redirect(w, r, redirectSuccessURL, 301)
redirectSuccessURL := "[YOUR_FAIL_REDIRECT_URL]"
http.Redirect(w, r, redirectSuccessURL, 301)
func (handler HTTPHandler) RequestLoginURL(w http.ResponseWriter, r *http.Request) {
loginResp, err := handler.humanID.Login("ID", "")
payload := AuthenticateResponse{
Message: "Internal Server Error",
RespondJSON(w, http.StatusInternalServerError, payload)
if loginResp.Code == "OK" {
loginURL := loginResp.Data.WebLoginUrl
http.Redirect(w, r, loginURL, 301)
payload := AuthenticateResponse{
Message: "Internal Server Error",
RespondJSON(w, http.StatusInternalServerError, payload)
func NewHandler(publicRouter *mux.Router, humanID _humanID.HumanID) {
publicRouter.HandleFunc("/authenticate", handler.Authenticate).Methods("GET")
publicRouter.HandleFunc("/request", handler.RequestLoginURL).Methods("GET")