Пример #1
0
func CmdRemove(name, privateKeyPath string, ik IKeys, id deploykeys.IDeployKeys) error {
	if privateKeyPath != "" {
		// if ssh key auth is being used, don't let the key used for key auth be removed
		b, err := ioutil.ReadFile(privateKeyPath)
		if err != nil {
			return err
		}
		privKey, err := id.ParsePrivateKey(b)
		if err != nil {
			return err
		}
		pubKey, err := id.ExtractPublicKey(privKey)
		if err != nil {
			return err
		}
		pubKeyString := string(ssh.MarshalAuthorizedKey(pubKey))
		userKeys, err := ik.List()
		if err != nil {
			return err
		}
		for _, uk := range *userKeys {
			if strings.TrimSpace(pubKeyString) == strings.TrimSpace(uk.Key) {
				return errors.New("You cannot remove the key that is currently being used for authentication. Run \"catalyze clear --private-key\" to remove your SSH key authentication settings.")
			}
		}
	}
	if strings.ContainsAny(name, config.InvalidChars) {
		return fmt.Errorf("Invalid key name. Names must not contain the following characters: %s", config.InvalidChars)
	}
	err := ik.Remove(name)
	if err != nil {
		return err
	}
	logrus.Printf("Key '%s' has been removed from your account.", name)
	return nil
}