# passreload.py
# written by Danke
#
# Modified by TheLoneMilkMan to work with alternatelogin script

import commands
from commands import add, admin
import json

from pyspades.types import AttributeSet

@admin
def reloadconfig(connection):
    new_config = {}
    try:
        new_config = json.load(open('config.txt', 'r'))
        if not isinstance(new_config, dict):
            raise ValueError('config.txt is not a mapping type')
    except ValueError, v:
        print 'Error reloading config:', v
        return 'Error reloading config. Check pyspades log for details.'
    connection.protocol.config.update(new_config)
    connection.protocol.reload_passes()
    return 'Config reloaded!'

add(reloadconfig)

def apply_script(protocol, connection, config):
    class PassreloadProtocol(protocol):
        def reload_passes(self):
            self.users = config.get('users', {})
            self.usergroups = config.get('usergroups', {})
            for password in self.passwords.get('admin', []):
                if password == 'replaceme':
                    print 'REMEMBER TO CHANGE THE DEFAULT ADMINISTRATOR PASSWORD!'
                elif not password:
                    self.everyone_is_admin = True
            commands.rights.update(config.get('rights', {}))
            for connection in self.connections.values():
                connection.rights = AttributeSet()
                name = connection.username[:]
                connection.username = None
                if name != None:
                    if name in self.users.keys():
                        connection.on_user_login(name,True)
                    else:
                        connection.send_chat('You have been logged out. Your account name has changed or been deleted.')



    return PassreloadProtocol, connection