Skip to content
Snippets Groups Projects
api.go 1.5 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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
    }