def test_try_30add_lonely_group():
    #logging.debug('isol = %s' % xc.db.conn.isolation_level)
    #xc.db.conn.dump('sqlite_master')
    #xc.db.conn.dump('rosterinfo')
    # Expected: groups calls
    global collect
    collect = []
    xc.session.post = make_rosterfunc(
        {'user1@domain1': {
            'name': 'Ce De',
            'groups': ['Lonely']
        }})
    xc.ejabberd_controller.execute = ctrl_collect
    assertEqual(sc.try_roster(async_=False), True)
    logging.info('collected = ' + str(collect))
    assertEqual(collect, [
        ['srg_create', 'Lonely', 'domain1', 'Lonely', 'Lonely', 'Lonely'],
        ['srg_get_members', 'Lonely', 'domain1'],
        ['srg_user_add', 'user1', 'domain1', 'Lonely', 'domain1'],
    ])
    #xc.db.conn.dump('sqlite_master')
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    assert_grouplist('user1@domain1', 'Lonely')
    assert_groupinfo('Lonely@domain1', 'user1@domain1')
def test_try_34login_other_user_again():
    global collect
    collect = []
    xc.session.post = make_rosterfunc({
        'user1@domain1': {
            'name': 'Ce De',
            'groups': ['Family'],
            'dummy': '1'
        },
        'user2@domain1': {
            'name': 'De Be',
            'groups': ['Family', 'Friends']
        },
        'user3@domain1': {
            'name': 'Xy Zzy',
            'groups': ['Friends']
        },
    })
    xc.ejabberd_controller.execute = ctrl_collect
    sc = sigcloud(xc, 'user2', 'domain1')
    assertEqual(sc.try_roster(async_=False), True)
    logging.info(collect)
    assertEqual(collect, [])
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    assert_grouplist('user1@domain1', 'Family\tLonely')
    assert_grouplist('user2@domain1', 'Family\tFriends')
    assert_grouplist('user3@domain1', None)
    assert_groupinfo('Lonely@domain1', 'user1@domain1')
    assert_groupinfo('Family@domain1', 'user1@domain1\tuser2@domain1')
    assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_try_40third_party_deletion():
    global collect
    collect = []
    xc.db.conn.dump('rosterinfo')
    xc.session.post = make_rosterfunc({
        'user2@domain1': {
            'name': 'De Be',
            'groups': ['Family', 'Friends']
        },
        'user3@domain1': {
            'name': 'Xy Zzy',
            'groups': ['Friends']
        },
    })
    xc.ejabberd_controller.execute = ctrl_collect
    sc = sigcloud(xc, 'user2', 'domain1')
    assertEqual(sc.try_roster(async_=False), True)
    logging.info(collect)
    assertEqual(collect,
                [['srg_user_del', 'user1', 'domain1', 'Family', 'domain1']])
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    assert_grouplist(
        'user1@domain1',
        'Family\tLonely')  # This is not touched by 3rd party deletion
    assert_grouplist('user2@domain1', 'Family\tFriends')
    assert_grouplist('user3@domain1', None)
    assert_groupinfo('Lonely@domain1', 'user1@domain1')
    assert_groupinfo('Family@domain1', 'user2@domain1')  # Only this
    assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_20_token_success():
    # ./generateTimeLimitedToken tuser tdomain 01234 3600 1000
    sc = sigcloud(xc, 'tuser', 'tdomain',
        'AMydsCzkh8-8vjcb9U2gqV/FZQAAEfg', now=utc(2000))
    sc.verbose_cloud_request = sc_trap
    assertEqual(sc.auth(), True)
    assertEqual(0, sql1('''SELECT COUNT(*) FROM authcache WHERE jid = 'tuser@tdomain' ''')[0])
def assert_groupinfo(groupname, userlist):
    for row in xc.db.conn.execute(
            'SELECT userlist FROM rostergroups WHERE groupname = ?',
        (groupname, )):
        assertEqual(userlist, row['userlist'])
        return
    assertEqual('groupname does not exist', groupname)  # Fail on empty list
def test_20_token_success():
    # ./generateTimeLimitedToken tuser tdomain 01234 3600 1000
    sc = sigcloud(xc, 'tuser', 'tdomain',
        'AMydsCzkh8-8vjcb9U2gqV/FZQAAEfg', now=2000)
    sc.verbose_cloud_request = sc_trap
    assertEqual(sc.auth(), True)
    assert 'tuser:tdomain' not in xc.cache_db
def test_try_35login_with_ignored_group():
    global collect
    collect = []
    xc.db.conn.dump('rosterinfo')
    xc.session.post = make_rosterfunc({
        'user1@domain1': {
            'name': 'Ce De',
            'groups': ['Family', 'Lonely', 'Hidden\u200b']
        },
        'user2@domain1': {
            'name': 'De Be',
            'groups': ['Family', 'Friends']
        },
        'user3@domain1': {
            'name': 'Xy Zzy',
            'groups': ['Friends']
        },
    })
    xc.ejabberd_controller.execute = ctrl_collect
    sc = sigcloud(xc, 'user1', 'domain1')
    assertEqual(sc.try_roster(async_=False), True)
    logging.info(collect)
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    assertEqual(
        collect,
        [
            # No add of Hidden
        ])
    assert_grouplist('user1@domain1', 'Family\tLonely')
    assert_grouplist('user2@domain1', 'Family\tFriends')
    assert_grouplist('user3@domain1', None)
    assert_groupinfo('Lonely@domain1', 'user1@domain1')
    assert_groupinfo('Family@domain1', 'user1@domain1\tuser2@domain1')
    assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_try_41self_deletion():
    global collect
    collect = []
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    xc.session.post = make_rosterfunc({'user1@domain1': {'name': 'Ce De'}})
    xc.ejabberd_controller.execute = ctrl_collect
    sc = sigcloud(xc, 'user1', 'domain1')
    assertEqual(sc.try_roster(async_=False), True)
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    logging.info(collect)
    assertEqual(
        collect,
        [
            # The first is unnecessary but harmless (idempotent) and not easily avoidable
            ['srg_user_del', 'user1', 'domain1', 'Family', 'domain1'],
            ['srg_user_del', 'user1', 'domain1', 'Lonely', 'domain1']
        ])
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    assert_grouplist('user1@domain1', '')
    assert_grouplist('user2@domain1', 'Family\tFriends')
    assert_grouplist('user3@domain1', None)
    assert_groupinfo('Lonely@domain1', 'user1@domain1')
    assert_groupinfo('Family@domain1', 'user2@domain1')
    assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
def test_try_20first_name():
    # Expected: a single set vcard
    sc.username = '******'
    sc.domain = 'domain1'
    xc.session.post = make_rosterfunc({'user1@domain1': {'name': 'Ah Be'}})
    xc.ejabberd_controller.execute = ctrl_setfn20
    assertEqual(sc.try_roster(async_=False), True)
    assertEqual(xc.ejabberd_controller.execute, ctrl_end)
Ejemplo n.º 10
0
 def test_input(self):
     self.stub_stdin('isuser:login:\n' + 'auth:log:dom:pass\n')
     tester = iter(prosody_io.read_request())
     output = next(tester)
     assertEqual(output, ('isuser', 'login', ''))
     output = next(tester)
     assertEqual(output, ('auth', 'log', 'dom', 'pass'))
     self.assertRaises(StopIteration, next, tester)
Ejemplo n.º 11
0
def test_unutf8_invalid_illegal():
    try:
        stderr = sys.stderr
        sys.stderr = io.StringIO()
        assertEqual(unutf8(b'Hall\x80chen', 'illegal'),
                    u'illegal-utf8-sequence-Hallchen')
    finally:
        sys.stderr = stderr
def test_20_token_fail():
    # ./generateTimeLimitedToken tuser tdomain 01234 3600 1000
    sc = sigcloud(xc, 'tuser', 'tdomain',
        'AMydsCzkh8-8vjcb9U2gqV/FZQAAEfg', now=utc(5000))
    sc.verbose_cloud_request = sc_noauth
    global cloud_count
    cloud_count = 0
    assertEqual(sc.auth(), False)
    assertEqual(cloud_count, 1)
Ejemplo n.º 13
0
 def test_02_put(self):
     ns = self.mkns(put=[u'example.net', u'dummy'])
     perform(ns)
     ns = self.mkns(get=u'example.net')
     perform(ns)
     dbfile = bsddb3.hashopen(dbname, 'c', 0o600)
     assert b'example.net' in dbfile
     assertEqual(dbfile[b'example.net'], b'dummy')
     dbfile.close()
def test_20_token_version():
    # Wrong version
    sc = sigcloud(xc, 'tuser', 'tdomain',
        'BMydsCzkh8-8vjcb9U2gqV/FZQAAEfg', now=utc(5000))
    sc.verbose_cloud_request = sc_noauth
    global cloud_count
    cloud_count = 0
    assertEqual(sc.auth(), False)
    assertEqual(cloud_count, 1)
def test_success():
    xc.session.post = post_200_ok
    roster, body = sc.roster_cloud()
    assertEqual(roster,
                {'user1@domain1': {
                    'name': 'Ah Be',
                    'groups': ['Lonely']
                }})
    assertEqual(body, 'fake body')
Ejemplo n.º 16
0
def post_200_ok_verify(url,
                       data='',
                       headers='',
                       allow_redirects=False,
                       timeout=5):
    assertEqual(url, 'https://nosuchhost')
    assert (data == b'username=usr&operation=isuser&domain=no.such.doma.in'
            or data == b'operation=isuser&username=usr&domain=no.such.doma.in')
    hash = hmac.new(b'999', msg=data, digestmod=hashlib.sha1).hexdigest()
    assertEqual(headers['X-JSXC-SIGNATURE'], 'sha1=' + hash)
    return post_200_ok(url, data, headers, allow_redirects, timeout)
Ejemplo n.º 17
0
 def test_05_unload(self):
     expected = [b'example.net', b'example.ch']
     self.stub_stdout(ioclass=io.StringIO)
     ns = self.mkns(unload=True)
     perform(ns)
     v = sys.stdout.getvalue()
     for line in v.split('\n'):
         if line != '':
             (k, delim, v) = line.partition('\t')
             expected.remove(utf8(k))
     assertEqual(expected, [])
def test_try_22same_name_uncached():
    # Expected: a get call
    xc.session.post = make_rosterfunc(
        {'user1@domain1': {
            'name': 'Ah Be',
            'dummy': '1'
        }})
    xc.ejabberd_controller.execute = ctrl_end
    assertEqual(sc.try_roster(async=False), True)
    logging.info(xc.ejabberd_controller.execute)
    assertEqual(xc.ejabberd_controller.execute, ctrl_end)
 def test_02_execute(self):
     paths = self.mkpaths()
     sqlconn = connection(paths)
     r = set()
     for row in sqlconn.conn.execute('select * from domains'):
         r.add(row[0:4])
     logging.error('r = %r', r)
     assertEqual(len(r), 2)
     assert ('example.ch', 'XmplScrt',
             'https://example.ch/index.php/apps/ojsxc/ajax/externalApi.php',
             'example.ch') in r
     assert ('example.de', 'NothrXampl', 'https://nothing', '') in r
 def test_01_load(self):
     self.stub_stdin(
         u'example.ch\tXmplScrt\thttps://example.ch/index.php/apps/ojsxc/ajax/externalApi.php\texample.ch\t\n'
         + u'example.de\tNothrXampl\thttps://nothing\t\n')
     ns = self.mkns(load=True)
     perform(ns)
     assertEqual(
         domfile[b'example.ch'],
         b'XmplScrt\thttps://example.ch/index.php/apps/ojsxc/ajax/externalApi.php\texample.ch\t'
     )
     assertEqual(domfile[b'example.de'], b'NothrXampl\thttps://nothing\t')
     assert b'example.net' not in domfile
def test_try_31login_again():
    # Expected: groups calls
    global collect
    collect = []
    xc.session.post = make_rosterfunc(
        {'user1@domain1': {
            'name': 'Ah Be',
            'groups': ['Lonely']
        }})
    xc.ejabberd_controller.execute = ctrl_collect
    assertEqual(sc.try_roster(async=False), True)
    logging.info(collect)
    assertEqual(collect, [])
def sc_params2(data):
    global cloud_count
    cloud_count += 1
    assertEqual(data['operation'], 'auth')
    assertEqual(data['username'], 'user2')
    assertEqual(data['domain'], 'domain2')
    assertEqual(data['password'], 'pass2')
    return (False, None, 'Connection refused', None)
def test_try_41self_deletion():
    global collect
    collect = []
    xc.session.post = make_rosterfunc({'user1@domain1': {'name': 'Ah Be'}})
    xc.ejabberd_controller.execute = ctrl_collect
    sc = sigcloud(xc, 'user1', 'domain1')
    assertEqual(sc.try_roster(async=False), True)
    logging.info(collect)
    assertEqual(
        collect,
        [
            # The first is unnecessary but harmless and not easily avoidable
            ['srg_user_del', 'user1', 'domain1', 'Family', 'domain1'],
            ['srg_user_del', 'user1', 'domain1', 'Lonely', 'domain1']
        ])
def test_try_30add_lonely_group():
    # Expected: groups calls
    global collect
    collect = []
    xc.session.post = make_rosterfunc(
        {'user1@domain1': {
            'name': 'Ah Be',
            'groups': ['Lonely']
        }})
    xc.ejabberd_controller.execute = ctrl_collect
    assertEqual(sc.try_roster(async=False), True)
    logging.info('collected = ' + str(collect))
    assertEqual(collect, [
        ['srg_create', 'Lonely', 'domain1', 'Lonely', 'Lonely', 'Lonely'],
        ['srg_get_members', 'Lonely', 'domain1'],
        ['srg_user_add', 'user1', 'domain1', 'Lonely', 'domain1'],
    ])
Ejemplo n.º 25
0
 def test_postfix_connection_error(self):
     self.stub_stdin('get [email protected]\n')
     self.stub_stdout()
     args = get_args(None,
                     None,
                     None,
                     'xcauth',
                     args=[
                         '-t', 'postfix', '-u',
                         'https://no-connection.jsxc.org/', '-s', '0', '-l',
                         dirname
                     ],
                     config_file_contents='#')
     perform(args)
     output = sys.stdout.getvalue().rstrip('\n')
     logging.debug(output)
     assertEqual(output[0:4], '400 ')
def test_try_40third_party_deletion():
    global collect
    collect = []
    xc.session.post = make_rosterfunc({
        'user2@domain1': {
            'name': 'De Be',
            'groups': ['Family', 'Friends']
        },
        'user3@domain1': {
            'name': 'Xy Zzy',
            'groups': ['Friends']
        },
    })
    xc.ejabberd_controller.execute = ctrl_collect
    sc = sigcloud(xc, 'user2', 'domain1')
    assertEqual(sc.try_roster(async=False), True)
    logging.info(collect)
    assertEqual(collect,
                [['srg_user_del', 'user1', 'domain1', 'Family', 'domain1']])
Ejemplo n.º 27
0
def test_try_33login_other_user():
    global collect
    collect = []
    xc.session.post = make_rosterfunc({
        'user1@domain1': {
            'name': 'Ce De',
            'groups': ['Family']
        },
        'user2@domain1': {
            'name': 'De Be',
            'groups': ['Family', 'Friends']
        },
        'user3@domain1': {
            'name': 'Xy Zzy',
            'groups': ['Friends']
        },
    })
    xc.ejabberd_controller.execute = ctrl_collect
    sc = sigcloud(xc, 'user2', 'domain1')
    assertEqual(sc.try_roster(async_=False), True)
    logging.info(collect)
    assert collect == [
        ['set_vcard', 'user3', 'domain1', 'FN', 'Xy Zzy'],
        ['srg_create', 'Friends', 'domain1', 'Friends', 'Friends', 'Friends'],
        ['srg_get_members', 'Friends', 'domain1'],
        ['srg_user_add', 'user3', 'domain1', 'Friends', 'domain1'],
        ['srg_user_add', 'user2', 'domain1', 'Friends', 'domain1'],
    ] or collect == [
        ['set_vcard', 'user3', 'domain1', 'FN', 'Xy Zzy'],
        ['srg_create', 'Friends', 'domain1', 'Friends', 'Friends', 'Friends'],
        ['srg_get_members', 'Friends', 'domain1'],
        ['srg_user_add', 'user2', 'domain1', 'Friends', 'domain1'],
        ['srg_user_add', 'user3', 'domain1', 'Friends', 'domain1'],
    ]
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    assert_grouplist('user1@domain1', 'Family\tLonely')
    assert_grouplist('user2@domain1', 'Family\tFriends')
    assert_grouplist('user3@domain1', None)
    assert_groupinfo('Lonely@domain1', 'user1@domain1')
    assert_groupinfo('Family@domain1', 'user1@domain1\tuser2@domain1')
    assert_groupinfo('Friends@domain1', 'user2@domain1\tuser3@domain1')
Ejemplo n.º 28
0
def test_verify():
    success, code, response = verify_with_isuser('https://nosuchhost', '999',
                                                 'no.such.doma.in', 'usr',
                                                 (5, 10), verify_hook)
    assertEqual(success, True)
    assertEqual(code, None)
    assertEqual(response, {'data': {'isUser': '******'}, 'result': 'success'})
def test_try_34login_other_user_again():
    global collect
    collect = []
    xc.session.post = make_rosterfunc({
        'user1@domain1': {
            'name': 'Ah Be',
            'groups': ['Family'],
            'dummy': '1'
        },
        'user2@domain1': {
            'name': 'De Be',
            'groups': ['Family', 'Friends']
        },
        'user3@domain1': {
            'name': 'Xy Zzy',
            'groups': ['Friends']
        },
    })
    xc.ejabberd_controller.execute = ctrl_collect
    sc = sigcloud(xc, 'user2', 'domain1')
    assertEqual(sc.try_roster(async=False), True)
    logging.info(collect)
    assertEqual(collect, [])
Ejemplo n.º 30
0
def test_try_32add_normal_group():
    # Expected: groups calls
    global collect
    collect = []
    xc.session.post = make_rosterfunc({
        'user1@domain1': {
            'name': 'Ce De',
            'groups': ['Lonely', 'Family']
        },
        'user2@domain1': {
            'name': 'De Be',
            'groups': ['Family']
        },
    })
    xc.ejabberd_controller.execute = ctrl_collect
    assertEqual(sc.try_roster(async_=False), True)
    logging.info(collect)
    assert collect == [
        ['set_vcard', 'user2', 'domain1', 'FN', 'De Be'],
        ['srg_create', 'Family', 'domain1', 'Family', 'Family', 'Family'],
        ['srg_get_members', 'Family', 'domain1'],
        ['srg_user_add', 'user1', 'domain1', 'Family', 'domain1'],
        ['srg_user_add', 'user2', 'domain1', 'Family', 'domain1'],
    ] or collect == [
        ['set_vcard', 'user2', 'domain1', 'FN', 'De Be'],
        ['srg_create', 'Family', 'domain1', 'Family', 'Family', 'Family'],
        ['srg_get_members', 'Family', 'domain1'],
        ['srg_user_add', 'user2', 'domain1', 'Family', 'domain1'],
        ['srg_user_add', 'user1', 'domain1', 'Family', 'domain1'],
    ]
    xc.db.conn.dump('rosterinfo')
    xc.db.conn.dump('rostergroups')
    assert_grouplist('user1@domain1', 'Family\tLonely')
    #assert_grouplist('user2@domain1', 'Family')
    assert_grouplist('user2@domain1', None)
    assert_groupinfo('Lonely@domain1', 'user1@domain1')
    assert_groupinfo('Family@domain1', 'user1@domain1\tuser2@domain1')