rbus 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.txt +9 -0
- data/COPYING.txt +341 -0
- data/HACKING.txt +104 -0
- data/Manifest.txt +58 -0
- data/README.txt +17 -0
- data/Rakefile +97 -0
- data/TUTORIAL.txt +303 -0
- data/bin/rbus-send +165 -0
- data/examples/async_rb_and_notify.rb +56 -0
- data/examples/async_rb_loop.rb +52 -0
- data/examples/glib_async_rb_loop.rb +57 -0
- data/examples/glib_rhythmbox.rb +54 -0
- data/examples/hal_device_info.rb +54 -0
- data/examples/listnames.rb +37 -0
- data/examples/network_manager_get_properties.rb +50 -0
- data/examples/notification_bubble.rb +46 -0
- data/examples/rhythmbox_print_playing_uri.rb +41 -0
- data/examples/rhythmbox_signal_print_playing.rb +54 -0
- data/examples/rhythmbox_start_service.rb +39 -0
- data/examples/rhythmbox_toggle_playing.rb +46 -0
- data/lib/rbus.rb +25 -0
- data/lib/rbus/auth/auth.rb +53 -0
- data/lib/rbus/auth/dbus_cookie_sha1.rb +66 -0
- data/lib/rbus/auth/dummy.rb +37 -0
- data/lib/rbus/auth/external.rb +34 -0
- data/lib/rbus/auth/state_machine.rb +168 -0
- data/lib/rbus/bus/bus.rb +101 -0
- data/lib/rbus/bus/proxy.rb +137 -0
- data/lib/rbus/bus/transport.rb +125 -0
- data/lib/rbus/default.rb +29 -0
- data/lib/rbus/etc/exception.rb +44 -0
- data/lib/rbus/etc/log.rb +100 -0
- data/lib/rbus/etc/types.rb +56 -0
- data/lib/rbus/etc/version.rb +34 -0
- data/lib/rbus/glib.rb +29 -0
- data/lib/rbus/mainloop/glib.rb +77 -0
- data/lib/rbus/mainloop/mainloop.rb +84 -0
- data/lib/rbus/mainloop/observers.rb +149 -0
- data/lib/rbus/mainloop/thread.rb +78 -0
- data/lib/rbus/message/constants.rb +51 -0
- data/lib/rbus/message/marshal.rb +139 -0
- data/lib/rbus/message/message.rb +110 -0
- data/lib/rbus/message/reader.rb +108 -0
- data/lib/rbus/message/serial_generator.rb +48 -0
- data/lib/rbus/message/unmarshal.rb +171 -0
- data/lib/rbus/message/writer.rb +69 -0
- data/setup.rb +1608 -0
- data/spec/auth_spec.rb +123 -0
- data/spec/bus_spec.rb +178 -0
- data/spec/helpers/bus_mocks.rb +64 -0
- data/spec/helpers/spec_helper.rb +24 -0
- data/spec/mainloop_spec.rb +74 -0
- data/spec/marshal_spec.rb +91 -0
- data/spec/message_spec.rb +61 -0
- data/spec/observers_spec.rb +28 -0
- data/spec/proxy_spec.rb +120 -0
- data/spec/transport_spec.rb +187 -0
- data/spec/unmarshal_spec.rb +186 -0
- metadata +118 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
5
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program; if not, write to the Free Software
|
19
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
20
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
21
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
22
|
+
#
|
23
|
+
#++
|
24
|
+
#
|
25
|
+
#
|
26
|
+
# RBus Example:
|
27
|
+
# Get properties from Network Manager interface
|
28
|
+
# From the Python D-Bus tutorial
|
29
|
+
#
|
30
|
+
# I have no idea what most of those values are, though :)
|
31
|
+
#
|
32
|
+
|
33
|
+
|
34
|
+
# Add lib to load path during developmennt
|
35
|
+
$: << '../lib/'
|
36
|
+
|
37
|
+
require 'pp'
|
38
|
+
require 'rbus'
|
39
|
+
|
40
|
+
# eth1 is the wireless on my machine,
|
41
|
+
# eth0 may be the most common one to try
|
42
|
+
dev = 'eth1'
|
43
|
+
|
44
|
+
bus = RBus.system_bus()
|
45
|
+
|
46
|
+
device = bus.get_object('org.freedesktop.NetworkManager', "/org/freedesktop/NetworkManager/Devices/#{dev}")
|
47
|
+
device.interface!('org.freedesktop.NetworkManager.Devices')
|
48
|
+
|
49
|
+
# Pretty print
|
50
|
+
pp device.getProperties()
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
5
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program; if not, write to the Free Software
|
19
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
20
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
21
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
22
|
+
#
|
23
|
+
#++
|
24
|
+
#
|
25
|
+
#
|
26
|
+
# RBus Example:
|
27
|
+
# Display notification bubble
|
28
|
+
#
|
29
|
+
|
30
|
+
|
31
|
+
# Add lib to load path during developmennt
|
32
|
+
$: << '../lib/'
|
33
|
+
|
34
|
+
require 'rbus'
|
35
|
+
|
36
|
+
session_bus = RBus.session_bus()
|
37
|
+
|
38
|
+
notify = session_bus.get_object('org.freedesktop.Notifications','/org/freedesktop/Notifications')
|
39
|
+
notify.interface!('org.freedesktop.Notifications')
|
40
|
+
|
41
|
+
# app_name, id, icon, summary, body, actions, hints, timeout
|
42
|
+
# icon should be able to be the name of a stock-icon, an url or a pixmap,
|
43
|
+
# but I have only tried stock so far, in this case stock-info.
|
44
|
+
return_id =
|
45
|
+
notify.Notify('R-Bus',0,'info','R-Bus Notification',
|
46
|
+
'A test example to see that everything works.',[],{},-1)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
5
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program; if not, write to the Free Software
|
19
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
20
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
21
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
22
|
+
#
|
23
|
+
#++
|
24
|
+
#
|
25
|
+
#
|
26
|
+
# RBus Example:
|
27
|
+
# Print the URI of the currently playing song in Rhythmbox.
|
28
|
+
#
|
29
|
+
|
30
|
+
|
31
|
+
# Add lib to load path during developmennt
|
32
|
+
$: << '../lib/'
|
33
|
+
|
34
|
+
require 'rbus'
|
35
|
+
|
36
|
+
session_bus = RBus.session_bus()
|
37
|
+
|
38
|
+
rb = session_bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Player')
|
39
|
+
rb.interface!('org.gnome.Rhythmbox.Player')
|
40
|
+
|
41
|
+
puts rb.getPlayingUri()
|
@@ -0,0 +1,54 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
5
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program; if not, write to the Free Software
|
19
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
20
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
21
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
22
|
+
#
|
23
|
+
#++
|
24
|
+
#
|
25
|
+
#
|
26
|
+
# RBus Example:
|
27
|
+
# Print some info about the song each time a new is played in Rhythmbox.
|
28
|
+
#
|
29
|
+
|
30
|
+
|
31
|
+
# Add lib to load path during developmennt
|
32
|
+
$: << '../lib/'
|
33
|
+
|
34
|
+
require 'rbus'
|
35
|
+
Thread.abort_on_exception=true
|
36
|
+
|
37
|
+
session_bus = RBus.session_bus()
|
38
|
+
|
39
|
+
rb_player = session_bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Player')
|
40
|
+
rb_player.interface!('org.gnome.Rhythmbox.Player')
|
41
|
+
|
42
|
+
rb_shell = session_bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Shell')
|
43
|
+
rb_shell.interface!('org.gnome.Rhythmbox.Shell')
|
44
|
+
|
45
|
+
rb_player.connect!("playingUriChanged") { |uri|
|
46
|
+
properties = rb_shell.getSongProperties(uri)
|
47
|
+
duration = Time.at(properties['duration'].to_i).strftime("%M:%S")
|
48
|
+
artist = properties['artist']
|
49
|
+
title = properties['title']
|
50
|
+
puts "Now playing: #{artist} - #{title} (#{duration})"
|
51
|
+
printf "File-size: %.2f MB\n", properties['file-size'].to_f/1024/1024
|
52
|
+
}
|
53
|
+
|
54
|
+
RBus.mainloop
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
5
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program; if not, write to the Free Software
|
19
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
20
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
21
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
22
|
+
#
|
23
|
+
#++
|
24
|
+
#
|
25
|
+
#
|
26
|
+
# RBus Example:
|
27
|
+
# Start Rhythmbox and "press play"
|
28
|
+
#
|
29
|
+
|
30
|
+
# Add lib to load path during developmennt
|
31
|
+
$: << '../lib/'
|
32
|
+
|
33
|
+
require 'rbus'
|
34
|
+
|
35
|
+
session_bus = RBus.session_bus()
|
36
|
+
retval = session_bus.StartServiceByName('org.gnome.Rhythmbox', 0)
|
37
|
+
|
38
|
+
rb = session_bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Player')
|
39
|
+
rb.playPause(true)
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#--
|
3
|
+
#
|
4
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
5
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
6
|
+
#
|
7
|
+
# This program is free software; you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation; either version 2 of the License, or
|
10
|
+
# (at your option) any later version.
|
11
|
+
#
|
12
|
+
# This program is distributed in the hope that it will be useful,
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
# GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
# You should have received a copy of the GNU General Public License
|
18
|
+
# along with this program; if not, write to the Free Software
|
19
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
20
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
21
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
22
|
+
#
|
23
|
+
#++
|
24
|
+
#
|
25
|
+
#
|
26
|
+
# RBus Example:
|
27
|
+
# Toggle play/pause in Rhythmbox.
|
28
|
+
#
|
29
|
+
|
30
|
+
|
31
|
+
# Add lib to load path during developmennt
|
32
|
+
$: << '../lib/'
|
33
|
+
|
34
|
+
require 'rbus'
|
35
|
+
|
36
|
+
session_bus = RBus.session_bus()
|
37
|
+
rb = session_bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Player')
|
38
|
+
rb.interface!('org.gnome.Rhythmbox.Player')
|
39
|
+
|
40
|
+
# Get current status and print what we are about to do
|
41
|
+
puts rb.getPlaying() ? 'Pausing...' : 'Playing...'
|
42
|
+
|
43
|
+
# playPause takes a mandatory boolean, but just
|
44
|
+
# toggles play/pause regardless of the value.
|
45
|
+
# This might be a bug.
|
46
|
+
rb.playPause(true)
|
data/lib/rbus.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
4
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation; either version 2 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with this program; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
20
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
21
|
+
#
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
|
25
|
+
require File.dirname(__FILE__) + '/rbus/default'
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
4
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation; either version 2 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with this program; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
20
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
21
|
+
#
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
Dir[File.join(File.dirname(__FILE__), '*.rb')].sort.each { |lib| require lib }
|
25
|
+
|
26
|
+
module RBus
|
27
|
+
module Auth
|
28
|
+
|
29
|
+
MECHANISMS = {
|
30
|
+
'EXTERNAL' => External,
|
31
|
+
'DBUS_COOKIE_SHA1' => DBusCookieSHA1
|
32
|
+
}
|
33
|
+
FIRST_MECHANISM = Dummy
|
34
|
+
|
35
|
+
# Authorize with the bus via its Transport object.
|
36
|
+
def self.authorize(transport)
|
37
|
+
raise AuthException, 'transport is nil' if transport.nil?
|
38
|
+
|
39
|
+
# Init Auth process
|
40
|
+
transport.send("\0")
|
41
|
+
|
42
|
+
# use a statemachine as the spec suggests
|
43
|
+
state_machine = StateMachine.new(transport)
|
44
|
+
begin
|
45
|
+
# return server guid on success - not used today though.
|
46
|
+
return state_machine.authorize
|
47
|
+
rescue AuthException
|
48
|
+
transport.close
|
49
|
+
raise
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
4
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation; either version 2 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with this program; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
20
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
21
|
+
#
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
module RBus
|
25
|
+
module Auth
|
26
|
+
|
27
|
+
# Implements the AUTH DBUS_COOKIE_SHA1 mechanism.
|
28
|
+
class DBusCookieSHA1
|
29
|
+
|
30
|
+
def auth
|
31
|
+
require 'etc'
|
32
|
+
|
33
|
+
['DBUS_COOKIE_SHA1', Etc.getlogin, :DATA]
|
34
|
+
end
|
35
|
+
|
36
|
+
def data(data)
|
37
|
+
require 'digest/sha1'
|
38
|
+
|
39
|
+
# name of cookie file, id of cookie in file, servers random challenge
|
40
|
+
context, id, s_challenge = data.split(' ')
|
41
|
+
|
42
|
+
# Random client challenge
|
43
|
+
c_challenge = Array.new(s_challenge.length/2).map{|obj|obj=rand(255).to_s}.join
|
44
|
+
|
45
|
+
# Search cookie file for id
|
46
|
+
path = File.join(ENV['HOME'], '.dbus-keyrings', context)
|
47
|
+
File.foreach(path) do |line|
|
48
|
+
if line.index(id) == 0
|
49
|
+
|
50
|
+
# Right line of file, read cookie
|
51
|
+
cookie = line.split(' ')[2].chomp
|
52
|
+
|
53
|
+
# Concatenate and encrypt
|
54
|
+
to_encrypt = [s_challenge, c_challenge, cookie].join(':')
|
55
|
+
sha = Digest::SHA1.hexdigest(to_encrypt)
|
56
|
+
|
57
|
+
# Return response
|
58
|
+
return ["#{c_challenge} #{sha}", :OK]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
raise AuthException, 'Unable to locate cookie'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# R-Bus is a native Ruby implementation of the D-Bus protocol.
|
4
|
+
# Copyright (C) 2007 Kristoffer Lundén (kristoffer.lunden@gmail.com)
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation; either version 2 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with this program; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
19
|
+
# MA 02110-1301, USA. A copy of the GNU General Public License is
|
20
|
+
# also available at http://www.gnu.org/copyleft/gpl.html.
|
21
|
+
#
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
module RBus
|
25
|
+
module Auth
|
26
|
+
|
27
|
+
# This is a Dummy Auth mechanism used first to get supported
|
28
|
+
# mechanisms from server. It's possible to just chance it
|
29
|
+
# and start with one of the other directly.
|
30
|
+
# Set RBus::Auth::FIRST_MECHANISM to proper class to override
|
31
|
+
class Dummy
|
32
|
+
def auth(data = nil)
|
33
|
+
[nil, nil, :REJECTED]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|