func WithAdapterWrapper(a Adapter, h *gin.RouterGroup) *AdapterWrapper {
	aw := &AdapterWrapper{a}
	h.GET("/login", aw.HandleLogin)
	h.GET("/callback", aw.HandleCallback)
	return aw
}
WithAdapterWrapper creates an adapterWrapper out of the oAuth Adapter and an gin.RouterGroup
package auth
import (
	"crypto/rand"
	"encoding/base64"
	"fmt"
	"net/http"
	"time"
	jwt "github.com/dgrijalva/jwt-go"
	"github.com/gin-contrib/sessions"
	"github.com/gin-gonic/gin"
	"github.com/mxschmitt/golang-url-shortener/internal/util"
	"github.com/pkg/errors"
	"github.com/sirupsen/logrus"
)
type Adapter interface {
	GetRedirectURL(state string) string
	GetUserData(state, code string) (*user, error)
	GetOAuthProviderName() string
}
type user struct {
	ID, Name, Picture string
}
type JWTClaims struct {
	jwt.StandardClaims
	OAuthProvider string
	OAuthID       string
	OAuthName     string
	OAuthPicture  string
}
type AdapterWrapper struct{ Adapter }