examples/privacy.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Wed, 28 Nov 2012 20:17:53 +0200
changeset 146 04d19c9c1196
parent 121 75a7d595817c
permissions -rw-r--r--
Fix module loading problem
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 )
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    12
		local connection = main.connection ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    13
		if not connection then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    14
			print "You are not online!"
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    15
			return
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    16
		end
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
		local action = args[1]
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    18
		local conn   = lm.connection.bless ( connection )
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
		local who    = main.current_buddy ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
		privacy.list ( conn, 'mcabber',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
			function ( list )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
				if action == 'add' 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
						item.order = nil
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
					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
    27
				elseif action == 'del' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
					for i, item in ipairs ( list ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
						if item.value == ( args[2] or who ) then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
							table.remove ( list, i )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
							break
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
						end
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
				else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
					local text = ''
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
					for i, item in ipairs ( list ) do
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
						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
    38
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
					if text ~= '' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
						print ( 'Blocking list: ' .. text )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
					end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
					return
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
				privacy.set ( conn, 'mcabber', list,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
					function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
						print ( 'Blocking list saved' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
					end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
					function ( mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
						print ( 'Error saving blocking list: ' .. mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
					end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
			end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
			function ( mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
				if action == 'add' then
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
					privacy.set ( conn, 'mcabber',
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
						{{ type = 'jid', value = args[2] or who, action = 'deny' },
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
						 { action = 'allow' }},
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
						function ()
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
							print ( 'New blocking list created' )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
						end,
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
						function ( message )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
							print ( 'Error obtaining/creatieng blocking list: ' .. mesg .. ' / ' .. message )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
						end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
				else
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
					print ( 'Cannot obtain privacy list from server: ' .. mesg )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
				end
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
			end )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
	end, true )
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
local privacy_handler            = lm.message_handler.new ( privacy.iq_handler )
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
local privacy_handler_registered = false
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    72
privacy_pc_handler =
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
	function ( args )
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    74
		local connection = main.connection ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    75
		if connection then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    76
			privacy.active ( lm.connection.bless ( connection ), 'mcabber',
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    77
				function ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    78
					print ( 'Server blocklist activated' )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    79
				end,
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    80
				function ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    81
					-- list may be absent, so, we will not pollute log with errors
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    82
				end )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    83
			lm.connection.bless( connection ):handler ( privacy_handler, 'iq', 'normal' )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    84
			privacy_handler_registered = true
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    85
		end
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    86
	end
111
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 100
diff changeset
    87
privacy_pd_handler = 
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    88
	function ( args )
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    89
		if privacy_handler_registered then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    90
			local connection = main.connection ()
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    91
			if connection then
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    92
				lm.connection.bless( connection ):handler ( privacy_handler, 'iq' )
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
			end
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    94
			privacy_handler_registered = false
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
    95
		end
111
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 100
diff changeset
    96
	end
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 100
diff changeset
    97
main.hook ( 'hook-post-connect',   privacy_pc_handler )
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 100
diff changeset
    98
main.hook ( 'hook-pre-disconnect', privacy_pd_handler )
5bcdb71ef2f2 Fix some example scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 100
diff changeset
    99
main.hook ( 'hook-lua-quit',       privacy_pd_handler )
68
742878c74b8e Lm separation, privacy
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
99
ed4676536ed9 Update most useful scripts
Myhailo Danylenko <isbear@ukrpost.net>
parents: 68
diff changeset
   101
-- vim: se ts=4 sw=4: --