about summary refs log tree commit diff
path: root/weechat/.weechat/python/autosavekey.py
diff options
context:
space:
mode:
Diffstat (limited to 'weechat/.weechat/python/autosavekey.py')
-rw-r--r--weechat/.weechat/python/autosavekey.py263
1 files changed, 0 insertions, 263 deletions
diff --git a/weechat/.weechat/python/autosavekey.py b/weechat/.weechat/python/autosavekey.py
deleted file mode 100644
index 2a3b0ad..0000000
--- a/weechat/.weechat/python/autosavekey.py
+++ /dev/null
@@ -1,263 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright (c) 2013-2018 by nils_2 <weechatter@arcor.de>
-#
-# save channel key from protected channel(s) to autojoin or secure data
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-# idea by freenode.elsae
-#
-# 2018-05-11: nils_2, (freenode.#weechat)
-#       0.4 : make script python3 compatible
-#           : add /help text
-#
-# 2015-05-09: nils_2, (freenode.#weechat)
-#       0.3 : fix: ValueError (reported by: Darpa)
-#
-# 2014-12-20: nils_2, (freenode.#weechat)
-#       0.2 : add option "add" to automatically add channel/key to autojoin option after a /join (idea by Prezident)
-#
-# 2013-10-03: nils_2, (freenode.#weechat)
-#       0.1 : initial release
-#
-# requires: WeeChat version 0.3.2
-#
-# Development is currently hosted at
-# https://github.com/weechatter/weechat-scripts
-
-try:
-    import weechat,re
-
-except Exception:
-    print("This script must be run under WeeChat.")
-    print("Get WeeChat now at: http://www.weechat.org/")
-    quit()
-
-SCRIPT_NAME     = "autosavekey"
-SCRIPT_AUTHOR   = "nils_2 <weechatter@arcor.de>"
-SCRIPT_VERSION  = "0.4"
-SCRIPT_LICENSE  = "GPL"
-SCRIPT_DESC     = "save channel key from protected channel(s) to autojoin option or secure data"
-
-OPTIONS         = { 'mute'        : ('off','execute command silently, only error messages will be displayed.'),
-                    'secure'      : ('off','change channel key in secure data.'),
-                    'add'         : ('off','adds channel and key to autojoin list on /join, if channel/key does not already exists'),
-                  }
-# /join #channel key
-# signal = freenode,irc_raw_in_324
-# signal_data = :asimov.freenode.net 324 nick #channel +modes key
-def irc_raw_in_324_cb(data, signal, signal_data):
-    parsed = get_hashtable(signal_data)
-    server = signal.split(',',1)[0]
-    argv = parsed['arguments'].split(" ")
-
-    # buffer without channel key
-    if len(argv) < 4:
-        return weechat.WEECHAT_RC_OK
-
-    channel = argv[1]
-    new_key = argv[3]
-
-    autojoin_list = get_autojoin(server)
-    if not autojoin_list:
-        return weechat.WEECHAT_RC_OK
-
-    # check autojoin for space
-    if len(re.findall(r" ", autojoin_list)) > 1:
-        weechat.prnt('', '%s%s: autojoin format for server "%s" invalid (two or more spaces).' % (weechat.prefix('error'),SCRIPT_NAME,server) )
-        return weechat.WEECHAT_RC_OK
-
-    # no keylist, only channels in autojoin option
-    if len(re.findall(r" ", autojoin_list)) == 0:
-        argv_channels = autojoin_list.split(',')
-        argv_keys = []
-    else:
-        # split autojoin option to a channel and a key list
-        arg_channel,arg_keys = autojoin_list.split(' ')
-        argv_channels = arg_channel.split(',')
-        argv_keys = arg_keys.split(',')
-
-    # check channel position
-    try:
-        channel_position = argv_channels.index(channel)
-    except ValueError:
-        channel_position = -1
-
-    sec_data = 0
-    # does buffer already exist in autojoin list?
-    if channel_position >= 0:
-        # remove channel from list
-        argv_channels.pop(channel_position)
-        # check if there is at least one key in list
-        if len(argv_keys) >= 1:
-            # check channel position and number of keys
-            if channel_position <= len(argv_keys):
-                # remove key from list
-                sec_data = check_key_for_secure(argv_keys,channel_position)
-                sec_data_name = argv_keys[channel_position][11:-1]
-                argv_keys.pop(channel_position)
-    else:
-        if OPTIONS['add'].lower() == 'off':
-            return weechat.WEECHAT_RC_OK
-
-    # add channel and key at first position
-    argv_channels.insert(0, channel)
-    argv_keys.insert(0,new_key)
-
-
-    # check weechat version and if secure option is on and secure data will be used for this key?
-    if int(version) >= 0x00040200 and OPTIONS['secure'].lower() == 'on' and sec_data == 1:
-        weechat.command('','%s/secure set %s %s' % (use_mute(),sec_data_name,new_key))
-    else:
-        if sec_data == 1:
-            weechat.prnt('', '%s%s: key for channel "%s.%s" not changed! option "plugins.var.python.%s.secure" is off and you are using secured data for key.' % (weechat.prefix('error'),SCRIPT_NAME,server,channel,SCRIPT_NAME) )
-            return weechat.WEECHAT_RC_OK
-        new_joined_option = '%s %s' % (','.join(argv_channels),','.join(argv_keys))
-        save_autojoin_option(server,new_joined_option)
-    return weechat.WEECHAT_RC_OK
-
-# replace an already existing channel key with an new one
-# when OP changes channel key
-def irc_raw_in_mode_cb(data, signal, signal_data):
-    parsed = get_hashtable(signal_data)
-
-    server = signal.split(',',1)[0]
-    argv = parsed['arguments'].split(" ")
-
-    if argv[1] != "+k":
-        return weechat.WEECHAT_RC_OK
-
-    channel = argv[0]
-    new_key = argv[2]
-
-    add_key_to_list(server,channel,new_key)
-    return weechat.WEECHAT_RC_OK
-
-def add_key_to_list(server,channel,new_key):
-    autojoin_list = get_autojoin(server)
-    if not autojoin_list:
-        return weechat.WEECHAT_RC_OK
-
-    # check autojoin for space
-    if len(re.findall(r" ", autojoin_list)) == 0:
-        weechat.prnt('', '%s%s: no password(s) set in autojoin for server "%s".' % (weechat.prefix('error'),SCRIPT_NAME,server) )
-        return weechat.WEECHAT_RC_OK
-    if len(re.findall(r" ", autojoin_list)) > 1:
-        weechat.prnt('', '%s%s: autojoin format for server "%s" invalid (two or more spaces).' % (weechat.prefix('error'),SCRIPT_NAME,server) )
-        return weechat.WEECHAT_RC_OK
-
-
-    # split autojoin option to a channel and a key list
-    arg_channel,arg_keys = autojoin_list.split(' ')
-    argv_channels = arg_channel.split(',')
-    argv_keys = arg_keys.split(',')
-
-    # search for channel name in list of channels and get position
-    if channel in argv_channels:
-        channel_pos_in_list = argv_channels.index(channel)
-        # enough keys in list? list counts from 0!
-        if channel_pos_in_list + 1 > len(argv_keys):
-            weechat.prnt('', '%s%s: not enough keys in list or channel position is not valid. check out autojoin option for server "%s".' % (weechat.prefix('error'),SCRIPT_NAME,server) )
-            return weechat.WEECHAT_RC_OK
-
-        sec_data = check_key_for_secure(argv_keys,channel_pos_in_list)
-
-        # check weechat version and if secure option is on and secure data will be used for this key?
-        if int(version) >= 0x00040200 and OPTIONS['secure'].lower() == 'on' and sec_data == 1:
-            sec_data_name = argv_keys[channel_pos_in_list][11:-1]
-            weechat.command('','%s/secure set %s %s' % (use_mute(),sec_data_name,new_key))
-        else:
-            if sec_data == 1:
-                weechat.prnt('', '%s%s: key for channel "%s.%s" not changed! option "plugins.var.python.%s.secure" is off and you are using secured data for key.' % (weechat.prefix('error'),SCRIPT_NAME,server,channel,SCRIPT_NAME) )
-                return weechat.WEECHAT_RC_OK
-            argv_keys[channel_pos_in_list] = new_key
-            new_joined_option = '%s %s' % (','.join(argv_channels),','.join(argv_keys))
-            save_autojoin_option(server,new_joined_option)
-    return weechat.WEECHAT_RC_OK
-
-def get_hashtable(string):
-    parsed = weechat.info_get_hashtable('irc_message_parse', dict(message=string))
-    try:
-        parsed['message'] = parsed['arguments'].split(' :', 1)[1]
-    except:
-        parsed['message'] = ""
-    return parsed
-
-def get_autojoin(server):
-    return weechat.config_string(weechat.config_get('irc.server.%s.autojoin' % server))
-
-def find_element_in_list(element,list_element):
-        try:
-            index_element=list_element.index(element)
-            return index_element
-        except ValueError:
-            return -1
-
-def save_autojoin_option(server,new_joined_option):
-    weechat.command('','%s/set irc.server.%s.autojoin %s' % (use_mute(),server,new_joined_option))
-
-def use_mute():
-    use_mute = ''
-    if OPTIONS['mute'].lower() == 'on':
-        use_mute = '/mute '
-    return use_mute
-
-# check key for "${sec.data."
-def check_key_for_secure(argv_keys,position):
-    sec_data = 0
-    if argv_keys[position][0:11] == '${sec.data.':
-        sec_data = 1
-    return sec_data
-
-def cmd_autosavekey(data, buffer, args):
-    weechat.command('', '/help %s' % SCRIPT_NAME)
-    return weechat.WEECHAT_RC_OK
-
-# ================================[ weechat options & description ]===============================
-def init_options():
-    for option,value in OPTIONS.items():
-        if not weechat.config_is_set_plugin(option):
-            weechat.config_set_plugin(option, value[0])
-            OPTIONS[option] = value[0]
-        else:
-            OPTIONS[option] = weechat.config_get_plugin(option)
-        weechat.config_set_desc_plugin(option, '%s (default: "%s")' % (value[1], value[0]))
-
-def toggle_refresh(pointer, name, value):
-    global OPTIONS
-    option = name[len('plugins.var.python.' + SCRIPT_NAME + '.'):]        # get optionname
-    OPTIONS[option] = value                                               # save new value
-    return weechat.WEECHAT_RC_OK
-
-# ================================[ main ]===============================
-if __name__ == "__main__":
-    if weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION, SCRIPT_LICENSE, SCRIPT_DESC, '', ''):
-        weechat.hook_command(SCRIPT_NAME,SCRIPT_DESC,
-                             '',
-                             'You have to edit options with: /set *autosavekey*\n'
-                             'I suggest using /iset script or /fset plugin.\n',
-                             '',
-                             'cmd_autosavekey',
-                             '')
-        version = weechat.info_get("version_number", "") or 0
-
-        if int(version) >= 0x00030200:
-            init_options()
-            weechat.hook_config( 'plugins.var.python.' + SCRIPT_NAME + '.*', 'toggle_refresh', '' )
-            weechat.hook_signal("*,irc_raw_in_mode","irc_raw_in_mode_cb","")
-            weechat.hook_signal("*,irc_raw_in_324","irc_raw_in_324_cb","")
-        else:
-            weechat.prnt("","%s%s %s" % (weechat.prefix("error"),SCRIPT_NAME,": needs version 0.3.2 or higher"))
-            weechat.command("","/wait 1ms /python unload %s" % SCRIPT_NAME)