1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-04-27 13:48:49 +08:00
b1ackd0t 408eabaaa6
MF-1699 - Enrich SDK and CLI (#1719)
* initial commit update api docs

Signed-off-by: rodneyosodo <socials@rodneyosodo.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* initial commit enrich sdk

Signed-off-by: rodneyosodo <socials@rodneyosodo.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* initial commit enrich cli

Signed-off-by: rodneyosodo <socials@rodneyosodo.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* add consumers test

Signed-off-by: rodneyosodo <socials@rodneyosodo.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* remove dead code

Signed-off-by: rodneyosodo <socials@rodneyosodo.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* add certs sdk tests

Signed-off-by: rodneyosodo <socials@rodneyosodo.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* change contact name

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* fix tests

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Rename Disconnect

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Fix subscription typo

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Fix Swagger File

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Add Tests

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Change Limit to 10

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

* Remove empty line

Signed-off-by: rodneyosodo <blackd0t@protonmail.com>

---------

Signed-off-by: rodneyosodo <socials@rodneyosodo.com>
Signed-off-by: rodneyosodo <blackd0t@protonmail.com>
Co-authored-by: rodneyosodo <socials@rodneyosodo.com>
2023-05-25 00:02:46 +02:00

86 lines
2.2 KiB
Go

// Copyright (c) Mainflux
// SPDX-License-Identifier: Apache-2.0
package certs
import (
"context"
"crypto/tls"
"crypto/x509"
"encoding/pem"
"io/ioutil"
"os"
"github.com/mainflux/mainflux/pkg/errors"
)
// ConfigsPage contains page related metadata as well as list
type Page struct {
Total uint64
Offset uint64
Limit uint64
Certs []Cert
}
var ErrMissingCerts = errors.New("CA path or CA key path not set")
// Repository specifies a Config persistence API.
type Repository interface {
// Save saves cert for thing into database
Save(ctx context.Context, cert Cert) (string, error)
// RetrieveAll retrieve issued certificates for given owner ID
RetrieveAll(ctx context.Context, ownerID string, offset, limit uint64) (Page, error)
// Remove removes certificate from DB for a given thing ID
Remove(ctx context.Context, ownerID, thingID string) error
// RetrieveByThing retrieves issued certificates for a given thing ID
RetrieveByThing(ctx context.Context, ownerID, thingID string, offset, limit uint64) (Page, error)
// RetrieveBySerial retrieves a certificate for a given serial ID
RetrieveBySerial(ctx context.Context, ownerID, serialID string) (Cert, error)
}
func LoadCertificates(caPath, caKeyPath string) (tls.Certificate, *x509.Certificate, error) {
if caPath == "" || caKeyPath == "" {
return tls.Certificate{}, &x509.Certificate{}, ErrMissingCerts
}
_, err := os.Stat(caPath)
if os.IsNotExist(err) || os.IsPermission(err) {
return tls.Certificate{}, &x509.Certificate{}, err
}
_, err = os.Stat(caKeyPath)
if os.IsNotExist(err) || os.IsPermission(err) {
return tls.Certificate{}, &x509.Certificate{}, err
}
tlsCert, err := tls.LoadX509KeyPair(caPath, caKeyPath)
if err != nil {
return tlsCert, &x509.Certificate{}, err
}
b, err := ioutil.ReadFile(caPath)
if err != nil {
return tlsCert, &x509.Certificate{}, err
}
caCert, err := ReadCert(b)
if err != nil {
return tlsCert, &x509.Certificate{}, err
}
return tlsCert, caCert, nil
}
func ReadCert(b []byte) (*x509.Certificate, error) {
block, _ := pem.Decode(b)
if block == nil {
return nil, errors.New("failed to decode PEM data")
}
return x509.ParseCertificate(block.Bytes)
}