123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // Copyright 2011 Google Inc. All rights reserved.
- // Use of this source code is governed by the Apache 2.0
- // license that can be found in the LICENSE file.
- // Package user provides a client for App Engine's user authentication service.
- package user // import "google.golang.org/appengine/user"
- import (
- "strings"
- "github.com/golang/protobuf/proto"
- "golang.org/x/net/context"
- "google.golang.org/appengine/internal"
- pb "google.golang.org/appengine/internal/user"
- )
- // User represents a user of the application.
- type User struct {
- Email string
- AuthDomain string
- Admin bool
- // ID is the unique permanent ID of the user.
- // It is populated if the Email is associated
- // with a Google account, or empty otherwise.
- ID string
- // ClientID is the ID of the pre-registered client so its identity can be verified.
- // See https://developers.google.com/console/help/#generatingoauth2 for more information.
- ClientID string
- FederatedIdentity string
- FederatedProvider string
- }
- // String returns a displayable name for the user.
- func (u *User) String() string {
- if u.AuthDomain != "" && strings.HasSuffix(u.Email, "@"+u.AuthDomain) {
- return u.Email[:len(u.Email)-len("@"+u.AuthDomain)]
- }
- if u.FederatedIdentity != "" {
- return u.FederatedIdentity
- }
- return u.Email
- }
- // LoginURL returns a URL that, when visited, prompts the user to sign in,
- // then redirects the user to the URL specified by dest.
- func LoginURL(c context.Context, dest string) (string, error) {
- return LoginURLFederated(c, dest, "")
- }
- // LoginURLFederated is like LoginURL but accepts a user's OpenID identifier.
- func LoginURLFederated(c context.Context, dest, identity string) (string, error) {
- req := &pb.CreateLoginURLRequest{
- DestinationUrl: proto.String(dest),
- }
- if identity != "" {
- req.FederatedIdentity = proto.String(identity)
- }
- res := &pb.CreateLoginURLResponse{}
- if err := internal.Call(c, "user", "CreateLoginURL", req, res); err != nil {
- return "", err
- }
- return *res.LoginUrl, nil
- }
- // LogoutURL returns a URL that, when visited, signs the user out,
- // then redirects the user to the URL specified by dest.
- func LogoutURL(c context.Context, dest string) (string, error) {
- req := &pb.CreateLogoutURLRequest{
- DestinationUrl: proto.String(dest),
- }
- res := &pb.CreateLogoutURLResponse{}
- if err := internal.Call(c, "user", "CreateLogoutURL", req, res); err != nil {
- return "", err
- }
- return *res.LogoutUrl, nil
- }
- func init() {
- internal.RegisterErrorCodeMap("user", pb.UserServiceError_ErrorCode_name)
- }
|