Files
Alex ShtinandGitHub 8e8f1b0f7c Remove license header from every file (#7689)
## What changed?
<!-- Describe what has changed in this PR -->
Remove license header from every file. Because it is really hard to
follow in this PR here is the summary:
1. License header is removed from all `.go` and `.proto` files
:fireworks::fireworks:🎆.
2. `LICENSE` file in the root directory has only Temporal and Uber
copyrights.
3. 5 other `LICENSE` files added to the packages which have copyrights
different from Temporal and Uber: Datadog, Xargin, "Mat Ryer, Tyler
Bunnell and contributors".
4. `license_file` flag is removed from all code generation tools.
5. `copyright_file` flag is removed from `go:generate mockgen`
directive.
6. All copyright related targets are removed from `Makefile`.
7. Updated Temporal copyright year to 2025 everywhere.

## Why?
<!-- Tell your future self why have you made these changes -->
I double checked with legal department that it is not needed to have
license header in every file. One file per repo is enough. I put all
copyrights to the root `LICENSE` file and removed header from all other
files. Also updated tools and `Makefile`.
2025-05-01 18:50:21 -07:00

187 lines
4.1 KiB
Go

package testutils
import (
"bytes"
"crypto/tls"
"crypto/x509"
"encoding/base64"
"encoding/pem"
"fmt"
"os"
)
type CertChain struct {
CertPubFile string
CertKeyFile string
CaPubFile string
}
func CertFilePath(dir string) string {
return dir + "/cert_pub.pem"
}
func KeyFilePath(dir string) string {
return dir + "/cert_priv.pem"
}
func CAFilePath(dir string) string {
return dir + "/ca_pub.pem"
}
func ConvertFileToBase64(file string) string {
fileBytes, err := os.ReadFile(file)
if err != nil {
panic(err)
}
return base64.StdEncoding.EncodeToString(fileBytes)
}
func GenerateTestChain(tempDir string, commonName string) (CertChain, error) {
chain, _, err := GenerateTestChainWithSN(tempDir, commonName, 0)
return chain, err
}
func GenerateTestChainWithSN(tempDir string, commonName string, serialNumber int64,
) (CertChain, *tls.Certificate, error) {
caPubFile := CAFilePath(tempDir)
certPubFile := CertFilePath(tempDir)
certPrivFile := KeyFilePath(tempDir)
caCert, err := GenerateSelfSignedCA(caPubFile)
if err != nil {
return CertChain{}, nil, err
}
if _, err = GenerateServerCert(caCert, commonName, serialNumber, certPubFile, certPrivFile); err != nil {
return CertChain{}, nil, err
}
return CertChain{CaPubFile: caPubFile, CertPubFile: certPubFile, CertKeyFile: certPrivFile}, caCert, err
}
func GenerateTestCerts(tempDir string, commonName string, num int) ([]*tls.Certificate, *x509.CertPool, *x509.CertPool, error) {
caCert, err := GenerateSelfSignedCA(CAFilePath(tempDir))
if err != nil {
return nil, nil, nil, err
}
caPool, err := GenerateSelfSignedCAPool(caCert)
if err != nil {
return nil, nil, nil, err
}
chains := make([]*tls.Certificate, num)
for i := 0; i < num; i++ {
certPubFile := tempDir + fmt.Sprintf("/cert_pub_%d.pem", i)
certPrivFile := tempDir + fmt.Sprintf("/cert_priv_%d.pem", i)
cert, err := GenerateServerCert(caCert, commonName, int64(i+100), certPubFile, certPrivFile)
if err != nil {
return nil, nil, nil, err
}
chains[i] = cert
}
wrongCACert, err := GenerateSelfSignedCA(CAFilePath(tempDir))
if err != nil {
return nil, nil, nil, err
}
wrongCAPool, err := GenerateSelfSignedCAPool(wrongCACert)
return chains, caPool, wrongCAPool, err
}
func GenerateSelfSignedCAPool(caCert *tls.Certificate) (*x509.CertPool, error) {
caPEM := &pem.Block{
Type: "CERTIFICATE",
Bytes: caCert.Certificate[0],
}
caPool := x509.NewCertPool()
caPem, err := pemEncodeToBytes(caPEM)
if err != nil {
return nil, err
}
caPool.AppendCertsFromPEM(caPem)
return caPool, nil
}
func GenerateSelfSignedCA(filePath string) (*tls.Certificate, error) {
caCert, err := generateSelfSignedX509CA("undefined", nil, 1024)
if err != nil {
return nil, err
}
if err := pemEncodeToFile(filePath, &pem.Block{
Type: "CERTIFICATE",
Bytes: caCert.Certificate[0],
}); err != nil {
return nil, err
}
return caCert, nil
}
func GenerateServerCert(
caCert *tls.Certificate,
commonName string,
serialNumber int64,
certPubFile string,
certPrivFile string,
) (*tls.Certificate, error) {
serverCert, privKey, err := generateServerX509UsingCAAndSerialNumber(commonName, serialNumber, caCert)
if err != nil {
return nil, err
}
certPEM := &pem.Block{
Type: "CERTIFICATE",
Bytes: serverCert.Certificate[0],
}
if err := pemEncodeToFile(certPubFile, certPEM); err != nil {
return nil, err
}
keyPEM := &pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(privKey),
}
err = pemEncodeToFile(certPrivFile, keyPEM)
if err != nil {
return nil, err
}
certPem, err := pemEncodeToBytes(certPEM)
if err != nil {
return nil, err
}
keyPem, err := pemEncodeToBytes(keyPEM)
if err != nil {
return nil, err
}
cert, err := tls.X509KeyPair(certPem, keyPem)
return &cert, err
}
func pemEncodeToFile(file string, block *pem.Block) error {
bytes, err := pemEncodeToBytes(block)
if err != nil {
return err
}
return os.WriteFile(file, bytes, os.FileMode(0644))
}
func pemEncodeToBytes(block *pem.Block) ([]byte, error) {
pemBuffer := new(bytes.Buffer)
err := pem.Encode(pemBuffer, block)
if err != nil {
return nil, err
}
return pemBuffer.Bytes(), nil
}