def status(self, log_level=defaults.options.log_level): # loader. loader = None if log_level >= 0: loader = Loader(f"Retrieving the status of {self.id}") # launchd. if defaults.vars.os in ["macos"]: output = code.execute(f"sudo launchctl list | grep {self.id}") if not output.success: if loader != None: loader.stop(success=False) return output else: if loader != None: loader.stop() return _response_.success( f"Successfully retrieved the status of {self.id}", { "status": output.output, }) # systemd. else: #output = code.execute(f"sudo systemctl status {self.id}") output = code.execute( f"sudo systemctl status {self.id} > /tmp/status && cat /tmp/status && rm -fr /tmp/status" ) if not output.success: if loader != None: loader.stop(success=False) return output else: if loader != None: loader.stop() return _response_.success( f"Successfully retrieved the status of {self.id}", { "status": output.output, })
def connect(self, # the network's ssid. ssid=None, # the network's password. password=None, ): # linux. if defaults.vars.os in ["linux"]: path = f"/etc/netplan/{ssid}.yaml" Files.Save(path, f"""network: wifis: wlan0: dhcp4: true optional: true access-points: "{ssid}": password: "******" """, sudo=True) response = code.execute("sudo netplan generate") if not response.success: return response response = code.execute("sudo netplan apply") if not response.success: return response return _response_.success(f"Successfully connected with {ssid}.") # invalid os. else: return _response_.error(f"Invalid operating system {defaults.vars.os}.")
def create(self): # check duplicates. l_response = self.check() if l_response["error"] != None: return l_response if l_response["exists"]: return _response_.error(f"User [{self.username}] already exists.") # check home dir. if Files.exists(self.home_directory): return _response_.error(f"Home directory [{self.home_directory}] already exists.") # handle linux. if OS in ["linux"]: # ubuntu. output = code.execute(f"sudo useradd -s /bin/bash -m {self.username}") # success. if output == "": return _response_.success(f"Successfully created user [{self.username}].") else: return _response_.error(String(output.output.replace("useradd: ", "").replace("\n", ". ")).capitalized_word()) # handle macos. elif OS in ["macos"]: return _response_.error(f"Unsupported operating system [{OS}].")
def set_password(self, password=None): # check params. response = _response_.parameters.check( parameters={ "password":password, }) if not response.success: return response # handle linux. if OS in ["linux"]: # get output. output = code.execute(f"export HISTIGNORE='*sudo -S*' && echo '{password}\n{password}\n' | sudo -S -k sudo passwd {self.username}") # success. if "password updated successfully" in output: return _response_.success(f"Successfully edited the password of user [{self.username}].") # fail. else: print(output) return _response_.error(f"Failed to edit the password of user [{self.username}].") # handle macos. elif OS in ["macos"]: return _response_.error(f"Unsupported operating system [{OS}].")
def ping(self, ip, timeout=1): # set info. info = { "ip": None, "up": False, } # execute. response = code.execute(f"ping {ip}", async_=True, wait=False) if not response.success: return response process = response.process time.sleep(timeout) response = process.kill() if not response.success: return response response = process.read() if not response.success: return response output = response.output # handle. info["dns"] = ip try: info["ip"] = output.split(f"PING {ip} (")[1].split("):")[0] except: info["ip"] = None if "Request timeout for" in output: info["up"] = False elif " bytes from " in output: info["up"] = True else: info["up"] = None # success. return _response_.success(f"Successfully pinged [{ip}].", info)
def ram(self): # linux. if defaults.vars.os in ["linux"]: path = f"/tmp/ram_cleanup.sh" Files.save( path, ''' #!/bin/bash ## Bash Script to clear cached memory on (Ubuntu/Debian) Linux ## By Philipp Klaus ## see <http://blog.philippklaus.de/2011/02/clear-cached-memory-on-ubuntu/> if [ "$(whoami)" != "root" ] then echo "You have to run this script as Superuser!" exit 1 fi # Get Memory Information freemem_before=$(cat /proc/meminfo | grep MemFree | tr -s ' ' | cut -d ' ' -f2) && freemem_before=$(echo "$freemem_before/1024.0" | bc) cachedmem_before=$(cat /proc/meminfo | grep "^Cached" | tr -s ' ' | cut -d ' ' -f2) && cachedmem_before=$(echo "$cachedmem_before/1024.0" | bc) # Output Information #echo -e "This script will clear cached memory and free up your ram.\\n\\nAt the moment you have $cachedmem_before MiB cached and $freemem_before MiB free memory." # Test sync if [ "$?" != "0" ] then echo "Something went wrong, It's impossible to sync the filesystem." exit 1 fi # Clear Filesystem Buffer using "sync" and Clear Caches sync && echo 3 > /proc/sys/vm/drop_caches freemem_after=$(cat /proc/meminfo | grep MemFree | tr -s ' ' | cut -d ' ' -f2) && freemem_after=$(echo "$freemem_after/1024.0" | bc) # Output Summadry #echo -e "This freed $(echo "$freemem_after - $freemem_before" | bc) MiB, so now you have $freemem_after MiB of free RAM." ''') Files.chmod(path, "+x") output = code.execute(f"sudo {path}") #Files.delete(path, forced=True) if not output.success: return output # macos. #elif defaults.vars.os in ["linux"]: # invalid os. else: raise ValueError( f"Unsupported operating system: {defaults.vars.os}.") # handler. return _response_.success("Successfully cleared the RAM memory.")
def stop(self, log_level=defaults.options.log_level): # loader. loader = None if log_level >= 0: loader = Loader(f"Stopping {self.id}") # launchd. if defaults.vars.os in ["macos"]: command = "" for i in [self.id]: command += f"sudo launchctl stop {i} &&" command = command[:-3] output = code.execute(command) if not output.success: if loader != None: loader.stop(success=False) return output elif output.output in ["", "\n"]: if loader != None: loader.stop() return _response_.success(f"Successfully stopped {self.id}") else: if loader != None: loader.stop(success=False) return _response_.error(f"Failed to stop {self.id}") # systemd. else: command = "" for i in [self.id]: command += f"sudo systemctl stop {i} &&" command = command[:-3] output = code.execute(command) if not output.success: if loader != None: loader.stop(success=False) return output elif output.output in ["", "\n"]: if loader != None: loader.stop() return _response_.success(f"Successfully stopped {self.id}") else: if loader != None: loader.stop(success=False) return _response_.error(f"Failed to stop {self.id}")
def disable(self): # check os. response = self.__check_os__() if response["error"] != None: return response # do. output = code.execute( "printf 'y\\ny\\ny\\ny\\ny\\ny\\n' | sudo ufw disable") if "Firewall stopped and disabled on system startup" in output: return _response_.success(f"Successfully disabled the firewall.") else: return _response_.error(f"Failed to disable the firewall.")
def tail(self, global_=False, debug=False): # load logs. if defaults.vars.os in ["macos"] and global_: data = code.execute(f"cat /var/log/system.log | grep {self.id}") if not data.success: return data data = str(data) elif debug: data = self.logs.load() else: data = self.errors.load() # handler. return _response_.success(f"Successfully tailed the {self.id} logs.", { "logs": data, })
def swap(self): # linux. if defaults.vars.os in ["linux"]: output = code.execute(f""" sudo swapoff -a sudo swapon -a """) if not output.success: return output # macos. #elif defaults.vars.os in ["linux"]: # invalid os. else: raise ValueError( f"Unsupported operating system: {defaults.vars.os}.") # handler. return _response_.success("Successfully cleared the swap memory.")
def delete_users(self, users=[]): # check existance. l_response = self.check() if l_response["error"] != None: return l_response elif not l_response["exists"]: return _response_.error(f"Group [{self.name}] does not exists.") # handle linux. if OS in ["linux"]: for user in users: output = code.execute(f"sudo deluser {user} {self.name}") if output != "" and "Removing user " not in output: return _response_.error(String(output.output.replace("deluser: "******"").replace("\n", ". ")).capitalized_word()) # handle macos. elif OS in ["macos"]: return _response_.error(f"Unsupported operating system [{OS}].") # success. return _response_.success(f"Successfully deleted {len(users)} users from group [{self.name}].", { "users":users, })
def ram(self, percentages=True): # vars. info = {} # get memory & swap. response = code.execute("""free -m | awk '{print $2"|"$3"|"$4"|"$5"|"$6}' """) if not response: return response output = response.output.split("\n")[1:] for index, type in [ [0, "memory"], [1, "swap"], ]: if type == "memory": total, used, free, shared, cache = output[index].split("|") else: total, used, free, _, _, = output[index].split("|") cache = 0.0 if percentages: info[type] = { "free":round( (float(free) / float(total)) * 100, 2), "used":round( (float(used) / float(total)) * 100, 2), "cache":round( (float(cache) / float(total)) * 100, 2), "total":f"{total} MB", } else: info[type] = { "free":f"{free} MB", "used":f"{used} MB", "cache":f"{cache} MB", "total":f"{total} MB", } # handler. return _response_.success("Successfully retrieved the ram metrics.", { "info":info, })
def add_users(self, users=[]): # check existance. l_response = self.check() if l_response["error"] != None: return l_response elif not l_response["exists"]: return _response_.error(f"Group [{self.name}] does not exists.") # handle linux. if OS in ["linux"]: for user in users: output = code.execute(f"sudo usermod -a -G {self.name} {user}") if not output.success: return output if output.output != "": return _response_.error(String(output.output.replace("usermod: ", "").replace("\n", ". ")).capitalized_word()) # handle macos. elif OS in ["macos"]: return _response_.error(f"Unsupported operating system [{OS}].") # success. return _response_.success(f"Successfully added {len(users)} users to group [{self.name}].", { "users":users, })
def create(self, users=None): # initialize default response. if users == None: users = self.users # check existance. l_response = self.check() if l_response["error"] != None: return l_response elif l_response["exists"]: return _response_.error(f"Group [{self.name}] already exists.") # handle linux. if OS in ["linux"]: output = code.execute(f"sudo groupadd {self.name}",) # success. if output.output == "": return _response_.success(f"Successfully created group [{self.name}].") else: return _response_.error(String(output.output.replace("groupadd: ", "").replace("\n", ". ")).capitalized_word()) # handle macos. elif OS in ["macos"]: return _response_.error(f"Unsupported operating system [{OS}].")