Esempio n. 1
0
    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,
                    })
Esempio n. 2
0
	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}.")
Esempio n. 3
0
	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}].")
Esempio n. 4
0
	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}].")
Esempio n. 5
0
    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)
Esempio n. 6
0
    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.")
Esempio n. 7
0
    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}")
Esempio n. 8
0
    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.")
Esempio n. 9
0
    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,
        })
Esempio n. 10
0
    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.")
Esempio n. 11
0
	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,
		})
Esempio n. 12
0
	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,
		})
Esempio n. 13
0
	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,
		})
Esempio n. 14
0
	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}].")