package group

import (
	"net/http"

	"github.com/openshift/origin/pkg/auth/api"
	"github.com/openshift/origin/pkg/auth/authenticator"
)

// GroupAdder wraps a request authenticator, and adds the specified groups to the returned user when authentication succeeds
type GroupAdder struct {
	Authenticator authenticator.Request
	Groups        []string
}

func (g *GroupAdder) AuthenticateRequest(req *http.Request) (api.UserInfo, bool, error) {
	user, ok, err := g.Authenticator.AuthenticateRequest(req)
	if err != nil || !ok {
		return nil, ok, err
	}
	return &api.DefaultUserInfo{
		Name:   user.GetName(),
		UID:    user.GetUID(),
		Groups: append(user.GetGroups(), g.Groups...),
		Scope:  user.GetScope(),
		Extra:  user.GetExtra(),
	}, true, nil
}

func NewGroupAdder(auth authenticator.Request, groups []string) *GroupAdder {
	return &GroupAdder{auth, groups}
}