mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-11-04 01:51:04 +01:00 
			
		
		
		
	Added cmd to expire preauth keys (requested in #78)
This commit is contained in:
		
							parent
							
								
									226cb89d97
								
							
						
					
					
						commit
						05e08e0ac7
					
				@ -19,6 +19,7 @@ func init() {
 | 
			
		||||
	}
 | 
			
		||||
	preauthkeysCmd.AddCommand(listPreAuthKeys)
 | 
			
		||||
	preauthkeysCmd.AddCommand(createPreAuthKeyCmd)
 | 
			
		||||
	preauthkeysCmd.AddCommand(expirePreAuthKeyCmd)
 | 
			
		||||
	createPreAuthKeyCmd.PersistentFlags().Bool("reusable", false, "Make the preauthkey reusable")
 | 
			
		||||
	createPreAuthKeyCmd.PersistentFlags().Bool("ephemeral", false, "Preauthkey for ephemeral nodes")
 | 
			
		||||
	createPreAuthKeyCmd.Flags().StringP("expiration", "e", "", "Human-readable expiration of the key (30m, 24h, 365d...)")
 | 
			
		||||
@ -119,3 +120,42 @@ var createPreAuthKeyCmd = &cobra.Command{
 | 
			
		||||
		fmt.Printf("Key: %s\n", k.Key)
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var expirePreAuthKeyCmd = &cobra.Command{
 | 
			
		||||
	Use:   "expire",
 | 
			
		||||
	Short: "Expire a preauthkey",
 | 
			
		||||
	Args: func(cmd *cobra.Command, args []string) error {
 | 
			
		||||
		if len(args) < 1 {
 | 
			
		||||
			return fmt.Errorf("missing parameters")
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	},
 | 
			
		||||
	Run: func(cmd *cobra.Command, args []string) {
 | 
			
		||||
		n, err := cmd.Flags().GetString("namespace")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("Error getting namespace: %s", err)
 | 
			
		||||
		}
 | 
			
		||||
		o, _ := cmd.Flags().GetString("output")
 | 
			
		||||
 | 
			
		||||
		h, err := getHeadscaleApp()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("Error initializing: %s", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		k, err := h.GetPreAuthKey(n, args[0])
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("Error getting the key: %s", err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = h.MarkExpirePreAuthKey(k)
 | 
			
		||||
		if strings.HasPrefix(o, "json") {
 | 
			
		||||
			JsonOutput(k, err, o)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println(err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		fmt.Println("Expired")
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -67,6 +67,19 @@ func (h *Headscale) GetPreAuthKeys(namespaceName string) (*[]PreAuthKey, error)
 | 
			
		||||
	return &keys, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h *Headscale) GetPreAuthKey(namespace string, key string) (*PreAuthKey, error) {
 | 
			
		||||
	pak, err := h.checkKeyValidity(key)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if pak.Namespace.Name != namespace {
 | 
			
		||||
		return nil, errors.New("Namespace mismatch")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return pak, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h *Headscale) MarkExpirePreAuthKey(k *PreAuthKey) error {
 | 
			
		||||
	if err := h.db.Model(&k).Update("Expiration", time.Now()).Error; err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user