examples/privacy.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 31 Mar 2010 00:12:21 +0300
changeset 97 b00f9ce82016
parent 68 742878c74b8e
child 99 ed4676536ed9
permissions -rw-r--r--
Update hooks interface according to upstream
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
local lm      = require 'lm'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
local privacy = require 'lm.privacy'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
privacy.handler (
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
	function ( name )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
		print ( 'Privacy list changed: ' .. name )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
	end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
main.command ( 'blocklist',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
	function ( args )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
		local action = args[1]
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
		local conn   = lm.connection.bless ( main.connection () )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
		local who    = main.current_buddy ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
		privacy.list ( conn, 'mcabber',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
			function ( list )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
				if action == 'add' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
					for i, item in ipairs ( list ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
						item.order = nil
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
					table.insert ( list, 1, { type = 'jid', value = args[2] or who, action = 'deny' } )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
				elseif action == 'del' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
					for i, item in ipairs ( list ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
						if item.value == ( args[2] or who ) then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
							table.remove ( list, i )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
							break
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
						end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
				else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
					local text = ''
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
					for i, item in ipairs ( list ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
						text = text .. '\n - <' .. ( list.order or '?' ) .. '> ' .. ( list.value or '*' ) .. ' [' .. ( list.type or 'unspecified' ) .. '] ' .. ( list.action or 'unspecified' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
					if text ~= '' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
						print ( 'Blocking list: ' .. text )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
					return
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
				privacy.set ( conn, 'mcabber', list,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
					function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
						print ( 'Blocking list saved' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
					end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
					function ( mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
						print ( 'Error saving blocking list: ' .. mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
					end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
			end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
			function ( mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
				if action == 'add' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
					privacy.set ( conn, 'mcabber',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
						{{ type = 'jid', value = args[2] or who, action = 'deny' },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
						 { action = 'allow' }},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
						function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
							print ( 'New blocking list created' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
						end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
						function ( message )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
							print ( 'Error obtaining/creatieng blocking list: ' .. mesg .. ' / ' .. message )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
						end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
				else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
					print ( 'Cannot obtain privacy list from server: ' .. mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
			end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
	end, true )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
commands_help['blocklist'] = '[[add | del] [jid]]\n\nRetrieves list, adds or removes buddies to/from mcabber\'s server blocklist.\nAny stanzas from buddy in list are blocked by server.'
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
local privacy_handler            = lm.message_handler.new ( privacy.iq_handler )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
local privacy_handler_registered = false
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
hooks_d['hook-post-connect'].privacy =
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
	function ( args )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
		privacy.active ( lm.connection.bless ( main.connection () ), 'mcabber',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
			function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
				print ( 'Server blocklist activated' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
			end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
			function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
				-- list may be absent, so, we will not pollute log with errors
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
			end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
		lm.connection.bless( main.connection () ):handler ( privacy_handler, 'iq', 'normal' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
		privacy_handler_registered = true
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
		hooks_d['hook-post-connect'].privacy =
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
			function ( args )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
				privacy.active ( lm.connection.bless ( main.connection () ), 'mcabber',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
					function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
						print ( 'Server blocklist activated' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
					end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
					function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
						-- list may be absent, so, we will not pollute log with errors
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
					end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
		hooks_d['hook-quit'].privacy =
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
			function ( args )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
				if privacy_handler_registered then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
					lm.connection.bless( main.connection () ):handler ( privacy_handler, 'iq' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
			end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
	end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
-- vim: se ts=4: --