new network daemon(not finished)
This commit is contained in:
136
awesome/src/tools/network/settings.lua
Normal file
136
awesome/src/tools/network/settings.lua
Normal file
@@ -0,0 +1,136 @@
|
||||
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
|
||||
Reference in New Issue
Block a user