mirror of https://github.com/dexidp/dex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.5 KiB
64 lines
1.5 KiB
package server |
|
|
|
import ( |
|
"errors" |
|
"log" |
|
|
|
"golang.org/x/net/context" |
|
|
|
"github.com/coreos/dex/api" |
|
"github.com/coreos/dex/storage" |
|
) |
|
|
|
// NewAPI returns a server which implements the gRPC API interface. |
|
func NewAPI(s storage.Storage) api.DexServer { |
|
return dexAPI{s: s} |
|
} |
|
|
|
type dexAPI struct { |
|
s storage.Storage |
|
} |
|
|
|
func (d dexAPI) CreateClient(ctx context.Context, req *api.CreateClientReq) (*api.CreateClientResp, error) { |
|
if req.Client == nil { |
|
return nil, errors.New("no client supplied") |
|
} |
|
|
|
if req.Client.Id == "" { |
|
req.Client.Id = storage.NewID() |
|
} |
|
if req.Client.Secret == "" { |
|
req.Client.Secret = storage.NewID() + storage.NewID() |
|
} |
|
|
|
c := storage.Client{ |
|
ID: req.Client.Id, |
|
Secret: req.Client.Secret, |
|
RedirectURIs: req.Client.RedirectUris, |
|
TrustedPeers: req.Client.TrustedPeers, |
|
Public: req.Client.Public, |
|
Name: req.Client.Name, |
|
LogoURL: req.Client.LogoUrl, |
|
} |
|
if err := d.s.CreateClient(c); err != nil { |
|
log.Printf("api: failed to create client: %v", err) |
|
// TODO(ericchiang): Surface "already exists" errors. |
|
return nil, err |
|
} |
|
|
|
return &api.CreateClientResp{ |
|
Client: req.Client, |
|
}, nil |
|
} |
|
|
|
func (d dexAPI) DeleteClient(ctx context.Context, req *api.DeleteClientReq) (*api.DeleteClientResp, error) { |
|
err := d.s.DeleteClient(req.Id) |
|
if err != nil { |
|
if err == storage.ErrNotFound { |
|
return &api.DeleteClientResp{NotFound: true}, nil |
|
} |
|
log.Printf("api: failed to delete client: %v", err) |
|
return nil, err |
|
} |
|
return &api.DeleteClientResp{}, nil |
|
}
|
|
|