Пример #1
0
func MapSchemaClientToClient(sc Client) (client.Client, error) {
	c := client.Client{
		Credentials: oidc.ClientCredentials{
			ID:     sc.Id,
			Secret: sc.Secret,
		},
		Metadata: oidc.ClientMetadata{
			RedirectURIs: make([]url.URL, len(sc.RedirectURIs)),
		},
		Public: sc.Public,
	}
	for i, ru := range sc.RedirectURIs {
		if ru == "" {
			return client.Client{}, ErrorNoRedirectURI
		}

		u, err := url.Parse(ru)
		if err != nil {
			return client.Client{}, ErrorInvalidRedirectURI
		}

		c.Metadata.RedirectURIs[i] = *u
	}

	c.Metadata.ClientName = sc.ClientName

	if sc.LogoURI != "" {
		logoURI, err := url.Parse(sc.LogoURI)
		if err != nil {
			return client.Client{}, ErrorInvalidLogoURI
		}
		c.Metadata.LogoURI = logoURI
	}

	if sc.ClientURI != "" {
		clientURI, err := url.Parse(sc.ClientURI)
		if err != nil {
			return client.Client{}, ErrorInvalidClientURI
		}
		c.Metadata.ClientURI = clientURI
	}

	c.Admin = sc.IsAdmin
	return c, nil
}
Пример #2
0
func (m *ClientManager) generateClientCredentials(cli client.Client) (client.Client, error) {
	// Generate Client ID
	if len(cli.Metadata.RedirectURIs) < 1 {
		return cli, errors.New("no client redirect url given")
	}
	clientID, err := m.clientIDGenerator(cli.Metadata.RedirectURIs[0].Host)
	if err != nil {
		return cli, err
	}

	// Generate Secret
	secret, err := m.secretGenerator()
	if err != nil {
		return cli, err
	}
	clientSecret := base64.URLEncoding.EncodeToString(secret)
	cli.Credentials = oidc.ClientCredentials{
		ID:     clientID,
		Secret: clientSecret,
	}
	return cli, nil
}
Пример #3
0
func (m *ClientManager) addClientCredentials(cli *client.Client) error {
	var seed string
	if cli.Public {
		seed = cli.Metadata.ClientName
	} else {
		seed = cli.Metadata.RedirectURIs[0].Host
	}

	var err error
	var clientID string
	if cli.Credentials.ID != "" {
		clientID = cli.Credentials.ID
	} else {
		// Generate Client ID
		clientID, err = m.clientIDGenerator(seed)
		if err != nil {
			return err
		}
	}

	var clientSecret string
	if cli.Credentials.Secret != "" {
		clientSecret = cli.Credentials.Secret
	} else {
		// Generate Secret
		secret, err := m.secretGenerator()
		if err != nil {
			return err
		}
		clientSecret = base64.URLEncoding.EncodeToString(secret)
	}

	cli.Credentials = oidc.ClientCredentials{
		ID:     clientID,
		Secret: clientSecret,
	}
	return nil
}