Files
crylia-theme/awesome/src/tools/network/settings.lua
2023-05-13 21:58:38 +02:00

137 lines
4.2 KiB
Lua

local gobject = require('gears.object')
local gtable = require('gears.table')
local lgi = require('lgi')
local NM = require('lgi').NM
local dbus_proxy = require('src.lib.lua-dbus_proxy.src.dbus_proxy')
local settings = gobject {}
---Get a connection path by uuid
---@param uuid string
---@return string connection_path
function settings:GetConnectionByUUID(uuid)
return self.NetworkManagerSettings:GetConnectionByUuid(uuid) or ''
end
function settings:GetConnectionForSSID(ssid)
for _, con in pairs(self.ConnectionList) do
if con:GetSettings().connection.id == ssid then
return con
end
end
end
--! For some reason not working, using AddAndActivateConnection instead works and adds the connection just fine
---Tries to add a new connection to the connections and returns the path if successfull
---@param con table connection
---@return string?
function settings:AddConnection(con)
--[[ local c = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.NetworkManager.Settings.Connection',
path = '/org/freedesktop/NetworkManager/Settings/',
} ]]
--[[ c:Update(con)
print('No Problem')
print(c:GetSettings().connection.id) ]]
--local path = self.NetworkManagerSettings:AddConnection(con)
--print(path)
--return path
end
function settings:RemoveConnection(con)
if not con then return end
con:Delete()
end
---Returns a new and valid connection table
---@param args {passwd: string, security: string, autoconnect: boolean, ssid: string}
---@return table
function settings:NewConnectionProfile(args)
local security = {}
if args.security:match('WPA') then
security = {
['key-mgmt'] = lgi.GLib.Variant('s', 'wpa-psk'),
['auth-alg'] = lgi.GLib.Variant('s', 'open'),
['psk'] = lgi.GLib.Variant('s', args.passwd),
}
else
security = {
['key-mgmt'] = lgi.GLib.Variant('s', 'wpa-psk'),
['wep-key-type'] = lgi.GLib.Variant('s', NM.WepKeyType.PASSPHRASE),
['wep-key0'] = lgi.GLib.Variant('s', args.passwd),
}
end
return {
['connection'] = {
['uuid'] = lgi.GLib.Variant('s', string.gsub('xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx', '[xy]', function(c)
local v = (c == 'x') and math.random(0, 0xf) or math.random(8, 0xb)
return string.format('%x', v)
end)),
['id'] = lgi.GLib.Variant('s', args.ssid),
['type'] = lgi.GLib.Variant('s', '802-11-wireless'),
['autoconnect'] = lgi.GLib.Variant('b', args.autoconnect),
},
['ipv4'] = {
['method'] = lgi.GLib.Variant('s', 'auto'),
},
['ipv6'] = {
['method'] = lgi.GLib.Variant('s', 'auto'),
},
['802-11-wireless'] = {
['mode'] = lgi.GLib.Variant('s', 'infrastructure'),
},
['802-11-wireless-security'] = security,
}
end
local instance = nil
if not instance then
instance = setmetatable(settings, {
__call = function(self)
self.NetworkManagerSettings = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.NetworkManager.Settings',
path = '/org/freedesktop/NetworkManager/Settings',
}
self.ConnectionList = {}
for _, value in pairs(self.NetworkManagerSettings:ListConnections()) do
local c = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.NetworkManager.Settings.Connection',
path = value,
}
if c then self.ConnectionList[value] = c end
end
self.NetworkManagerSettings:connect_signal(function(_, con)
print('New!', con)
local c = dbus_proxy.Proxy:new {
bus = dbus_proxy.Bus.SYSTEM,
name = 'org.freedesktop.NetworkManager',
interface = 'org.freedesktop.NetworkManager.Settings.Connection',
path = con,
}
self.ConnectionList[con] = c
end, 'NewConnection')
self.NetworkManagerSettings:connect_signal(function(_, con)
print('Removed!', con)
self.ConnectionList[con] = nil
end, 'ConnectionRemoved')
return self
end,
})
end
return instance