package main

import (
	"crypto/x509"
	"encoding/json"
	"encoding/pem"
	"log"
	"os"

	"github.com/spf13/cobra"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	clientauthentication "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1"
)

var k8scredpluginCmd = &cobra.Command{
	Use:   "k8scredplugin",
	Short: "Kubernetes client-go credential plugin [internal use]",
	Long: `This implements a Kubernetes client-go credential plugin to
authenticate client-go based callers including kubectl against a Metropolis
cluster. This should never be directly called by end users.`,
	Args: cobra.ExactArgs(0),
	Run:  doK8sCredPlugin,
}

func doK8sCredPlugin(cmd *cobra.Command, args []string) {
	cert, key, err := getCredentials()
	if err == noCredentialsError {
		log.Fatal("No credentials found on your machine")
	}
	if err != nil {
		log.Fatalf("failed to get Metropolis credentials: %v", err)
	}

	pkcs8Key, err := x509.MarshalPKCS8PrivateKey(key)
	if err != nil {
		// We explicitly pass an Ed25519 private key in, so this can't happen
		panic(err)
	}

	cred := clientauthentication.ExecCredential{
		TypeMeta: metav1.TypeMeta{
			APIVersion: clientauthentication.SchemeGroupVersion.String(),
			Kind:       "ExecCredential",
		},
		Status: &clientauthentication.ExecCredentialStatus{
			ClientCertificateData: string(pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: cert.Raw})),
			ClientKeyData:         string(pem.EncodeToMemory(&pem.Block{Type: "PRIVATE KEY", Bytes: pkcs8Key})),
		},
	}
	if err := json.NewEncoder(os.Stdout).Encode(cred); err != nil {
		log.Fatalf("failed to encode ExecCredential: %v", err)
	}
}

func init() {
	rootCmd.AddCommand(k8scredpluginCmd)
}
