mirror of
https://github.com/pomerium/pomerium.git
synced 2025-05-05 13:26:03 +02:00
proxy: Add user dashboard. [GH-123] proxy/authenticate: Add manual refresh of their session. [GH-73] authorize: Add administrator (super user) account support. [GH-110] internal/policy: Allow administrators to impersonate other users. [GH-110]
49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
package authenticate
|
|
|
|
import (
|
|
fmt "fmt"
|
|
|
|
"github.com/golang/protobuf/ptypes"
|
|
"github.com/pomerium/pomerium/internal/sessions"
|
|
)
|
|
|
|
// SessionFromProto converts a converts a protocol buffer session into a pomerium session state.
|
|
func SessionFromProto(p *Session) (*sessions.SessionState, error) {
|
|
if p == nil {
|
|
return nil, fmt.Errorf("proto/authenticate: SessionFromProto session cannot be nil")
|
|
}
|
|
|
|
refreshDeadline, err := ptypes.Timestamp(p.RefreshDeadline)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("proto/authenticate: couldn't parse refresh deadline %v", err)
|
|
}
|
|
return &sessions.SessionState{
|
|
AccessToken: p.AccessToken,
|
|
RefreshToken: p.RefreshToken,
|
|
IDToken: p.IdToken,
|
|
Email: p.Email,
|
|
User: p.User,
|
|
Groups: p.Groups,
|
|
RefreshDeadline: refreshDeadline,
|
|
}, nil
|
|
}
|
|
|
|
// ProtoFromSession converts a pomerium user session into a protocol buffer struct.
|
|
func ProtoFromSession(s *sessions.SessionState) (*Session, error) {
|
|
if s == nil {
|
|
return nil, fmt.Errorf("proto/authenticate: ProtoFromSession session cannot be nil")
|
|
}
|
|
refreshDeadline, err := ptypes.TimestampProto(s.RefreshDeadline)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("proto/authenticate: couldn't parse refresh deadline %v", err)
|
|
}
|
|
return &Session{
|
|
AccessToken: s.AccessToken,
|
|
RefreshToken: s.RefreshToken,
|
|
IdToken: s.IDToken,
|
|
Email: s.Email,
|
|
User: s.User,
|
|
Groups: s.Groups,
|
|
RefreshDeadline: refreshDeadline,
|
|
}, nil
|
|
}
|