github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/modules/disable.go (about)

     1  package modules
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"strings"
     8  
     9  	"github.com/lmorg/murex/config/profile"
    10  	"github.com/lmorg/murex/lang"
    11  	"github.com/lmorg/murex/utils/json"
    12  )
    13  
    14  const noModulesToAble = "missing package or package/module names to "
    15  
    16  func disableModules(p *lang.Process) error {
    17  	if p.Parameters.Len() < 2 {
    18  		return errors.New(noModulesToAble + "disable")
    19  	}
    20  
    21  	var disabled []string
    22  	if err := profile.ReadJson(profile.ModulePath()+profile.DisabledFile, &disabled); err != nil {
    23  		return err
    24  	}
    25  
    26  	defer writeDisabled(&disabled)
    27  
    28  	for _, pack := range p.Parameters.StringArray()[1:] {
    29  		switch strings.Count(pack, "/") {
    30  		case 0:
    31  			if err := disablePack(pack); err != nil {
    32  				return err
    33  			}
    34  		case 1:
    35  			if err := disableMod(pack, &disabled); err != nil {
    36  				return err
    37  			}
    38  		default:
    39  			return fmt.Errorf("`%s` is not a valid package/module format", pack)
    40  		}
    41  	}
    42  
    43  	return nil
    44  }
    45  
    46  func disablePack(pack string) error {
    47  	modulePath := profile.ModulePath()
    48  	return os.Rename(modulePath+pack, modulePath+pack+profile.IgnoredExt)
    49  }
    50  
    51  func disableMod(mod string, disabled *[]string) error {
    52  	for i := range *disabled {
    53  		if (*disabled)[i] == mod {
    54  			return fmt.Errorf("`%s` has already been disabled", mod)
    55  		}
    56  	}
    57  
    58  	*disabled = append(*disabled, mod)
    59  	return nil
    60  }
    61  
    62  func writeDisabled(disabled *[]string) error {
    63  	file, err := os.OpenFile(profile.ModulePath()+profile.DisabledFile, os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0640)
    64  	if err != nil {
    65  		return err
    66  	}
    67  	defer file.Close()
    68  
    69  	b, err := json.Marshal(*disabled, true)
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	_, err = file.Write(b)
    75  	return err
    76  }