コード例 #1
0
ファイル: test_iterator.py プロジェクト: soitun/LinOTP
    def test_user_search(self):
        """
        Verify that if 'user' is passed in as a parameter, username and realm
        are added to the search parameters.
        """
        from linotp.lib.audit.iterator import AuditQuery

        user = MagicMock(spec=["login", "realm"])
        user.login = "******"
        user.realm = "myrealm"
        audit = MagicMock(spec=["searchQuery"])
        audit.searchQuery.return_value = iter([])
        audit_query = AuditQuery({
            "qtype": "action",
            "query": "audit/search"
        },
                                 audit,
                                 user=user)
        audit_iterator = iter(audit_query.get_query_result())

        assert len(list(audit_iterator)) == 0
        audit.searchQuery.assert_called_once_with(
            {
                "action": "audit/search",
                "realm": "myrealm",
                "user": "******"
            },
            rp_dict={
                #                'rp': '15',
                "sortname": None,
                "sortorder": "asc",
            },
        )

        return
コード例 #2
0
ファイル: test_iterator.py プロジェクト: eespinosa/Elm
    def test_row2dict_called(self):
        """
        Verify that audit.row2dict is called when some element returned by
        the searchQuery is no dictionary
        """
        from linotp.lib.audit.iterator import AuditQuery
        audit = MagicMock(spec=["searchQuery", "row2dict"])
        audit.searchQuery.return_value = [None, {'key': 'value'}]
        audit_query = AuditQuery({}, audit)
        audit_iterator = iter(audit_query.get_query_result())

        rows = 0
        for row in audit_iterator:
            audit_query.get_entry(row)
            rows = rows + 1

        self.assertEqual(rows, 2)
        audit.searchQuery.assert_called_once_with(
            {},
            rp_dict={
                'sortname': None,
                'sortorder': None
                }
            )
        audit.row2dict.assert_called_once_with(None)
        return
コード例 #3
0
ファイル: test_iterator.py プロジェクト: soitun/LinOTP
    def test_searchQuery_3(self):
        """
        Verify searchQuery parameters.
        Unicode
        """
        from linotp.lib.audit.iterator import AuditQuery

        param = {
            "rp": "15",
            "sortname": "number",
            "session": "deadbeef00174df8e77bde249de541d132903568b767"
            "706bb84b59b3fa5ad523",
            "sortorder": "desc",
            "query": "حافظ",
            "qtype": "user",
            "page": "1",
        }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        assert len(list(audit_iterator)) == 0
        audit.searchQuery.assert_called_once_with(
            {"user": "******"},
            rp_dict={
                "sortorder": "desc",
                "rp": "15",
                "page": 1,
                "sortname": "number",
            },
        )
コード例 #4
0
ファイル: test_iterator.py プロジェクト: ae-m/LinOTP
    def test_user_search(self):
        """
        Verify that if 'user' is passed in as a parameter, username and realm
        are added to the search parameters.
        """
        user = MagicMock(spec=["login", "realm"])
        user.login = "******"
        user.realm = "myrealm"
        audit = MagicMock(spec=["searchQuery"])
        audit.searchQuery.return_value = iter([])
        audit_query = AuditQuery(
            {
                'qtype': 'action',
                'query': 'audit/search'
                },
            audit,
            user=user
            )
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with(
            {
                'action': 'audit/search',
                'realm': 'myrealm',
                'user': '******'
                },
            rp_dict={
#                'rp': '15',
                'sortname': None,
                'sortorder': None
                }
            )

        return
コード例 #5
0
ファイル: test_iterator.py プロジェクト: soitun/LinOTP
    def test_searchQuery_2(self):
        """
        Verify searchQuery parameters.
        Search in realm, 10 per page, second page
        """
        from linotp.lib.audit.iterator import AuditQuery

        param = {
            "rp": "10",
            "sortname": "number",
            "session": "deadbeef00174df8e77bde249de541d132903568b767"
            "706bb84b59b3fa5ad523",
            "sortorder": "desc",
            "query": "se_test_auth",
            "qtype": "realm",
            "page": "2",
        }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        assert len(list(audit_iterator)) == 0
        audit.searchQuery.assert_called_once_with(
            {"realm": "se_test_auth"},
            rp_dict={
                "sortorder": "desc",
                "rp": "10",
                "page": 2,
                "sortname": "number",
            },
        )
コード例 #6
0
ファイル: test_iterator.py プロジェクト: ae-m/LinOTP
    def test_searchQuery_3(self):
        """
        Verify searchQuery parameters.
        Unicode
        """
        param = {
            'rp': u'15',
            'sortname': u'number',
            'session': u'deadbeef00174df8e77bde249de541d132903568b767'
                        '706bb84b59b3fa5ad523',
            'sortorder': u'desc',
            'query': u'حافظ',
            'qtype': u'user',
            'page': u'1'
            }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with(
            {u'user': u'حافظ'},
            rp_dict={
                'sortorder': u'desc',
                'rp': u'15',
                'page': 1,
                'sortname': u'number'
                }
            )
コード例 #7
0
ファイル: test_iterator.py プロジェクト: soitun/LinOTP
    def test_00_searchQuery_1(self):
        """
        Simply verifies that the external method searchQuery is invoked with
        the right parameters. On a real system the call would most probably
        be received by linotp.lib.audit.SQLAudit
        """
        from linotp.lib.audit.iterator import AuditQuery

        param = {
            "rp": "15",
            "sortname": "number",
            "session": "deadbeef00174df8e77bdf249de"
            "541d132903568b763306bb84b59b3fa5ad111",
            "sortorder": "desc",
            "query": "",
            "qtype": "serial",
            "page": "1",
        }
        audit = MagicMock(spec=["searchQuery", "getTotal"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        assert len(list(audit_iterator)) == 0
        audit.searchQuery.assert_called_once_with(
            {"serial": ""},
            rp_dict={
                "sortorder": "desc",
                "rp": "15",
                "page": 1,
                "sortname": "number",
            },
        )
コード例 #8
0
ファイル: test_iterator.py プロジェクト: soitun/LinOTP
    def test_searchQuery_4(self):
        """
        Verify searchQuery parameters.
        extended search (extsearch)
        """
        from linotp.lib.audit.iterator import AuditQuery

        param = {
            "rp": "15",
            "sortname": "number",
            "session":
            "deadbeef00174df8e77bde249de541d132903568b767706bb84b59b3fa5ad523",
            "sortorder": "desc",
            "query": "action=audit/search;success=1;number=730",
            "qtype": "extsearch",
            "page": "1",
        }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        assert len(list(audit_iterator)) == 0
        audit.searchQuery.assert_called_once_with(
            {
                "action": "audit/search",
                "number": "730",
                "success": "1"
            },
            rp_dict={
                "sortorder": "desc",
                "rp": "15",
                "page": 1,
                "sortname": "number",
            },
        )
コード例 #9
0
    def test_00_searchQuery_1(self):
        """
        Simply verifies that the external method searchQuery is invoked with
        the right parameters. On a real system the call would most probably
        be received by linotp.lib.audit.SQLAudit
        """
        from linotp.lib.audit.iterator import AuditQuery
        param = {
            'rp': u'15',
            'sortname': u'number',
            'session': u'deadbeef00174df8e77bdf249de'
            '541d132903568b763306bb84b59b3fa5ad111',
            'sortorder': u'desc',
            'query': u'',
            'qtype': u'serial',
            'page': u'1'
        }
        audit = MagicMock(spec=["searchQuery", "getTotal"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with({u'serial': u''},
                                                  rp_dict={
                                                      'sortorder': u'desc',
                                                      'rp': u'15',
                                                      'page': 1,
                                                      'sortname': u'number'
                                                  })
コード例 #10
0
    def test_user_search(self):
        """
        Verify that if 'user' is passed in as a parameter, username and realm
        are added to the search parameters.
        """
        from linotp.lib.audit.iterator import AuditQuery
        user = MagicMock(spec=["login", "realm"])
        user.login = "******"
        user.realm = "myrealm"
        audit = MagicMock(spec=["searchQuery"])
        audit.searchQuery.return_value = iter([])
        audit_query = AuditQuery({
            'qtype': 'action',
            'query': 'audit/search'
        },
                                 audit,
                                 user=user)
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with(
            {
                'action': 'audit/search',
                'realm': 'myrealm',
                'user': '******'
            },
            rp_dict={
                #                'rp': '15',
                'sortname': None,
                'sortorder': None
            })

        return
コード例 #11
0
ファイル: test_iterator.py プロジェクト: eespinosa/Elm
    def test_00_searchQuery_1(self):
        """
        Simply verifies that the external method searchQuery is invoked with
        the right parameters. On a real system the call would most probably
        be received by linotp.lib.audit.SQLAudit
        """
        from linotp.lib.audit.iterator import AuditQuery
        param = {
            'rp': u'15',
            'sortname': u'number',
            'session': u'deadbeef00174df8e77bdf249de'
                         '541d132903568b763306bb84b59b3fa5ad111',
            'sortorder': u'desc',
            'query': u'',
            'qtype': u'serial',
            'page': u'1'
            }
        audit = MagicMock(spec=["searchQuery", "getTotal"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with(
            {u'serial': u''},
            rp_dict={
                'sortorder': u'desc',
                'rp': u'15',
                'page': 1,
                'sortname': u'number'
                }
            )
コード例 #12
0
    def test_row2dict_called(self):
        """
        Verify that audit.row2dict is called when some element returned by
        the searchQuery is no dictionary
        """
        from linotp.lib.audit.iterator import AuditQuery
        audit = MagicMock(spec=["searchQuery", "row2dict"])
        audit.searchQuery.return_value = [None, {'key': 'value'}]
        audit_query = AuditQuery({}, audit)
        audit_iterator = iter(audit_query.get_query_result())

        rows = 0
        for row in audit_iterator:
            audit_query.get_entry(row)
            rows = rows + 1

        assert rows == 2
        audit.searchQuery.assert_called_once_with(
            {},
            rp_dict={
                'sortname': None,
                'sortorder': 'asc'
                }
            )
        audit.row2dict.assert_called_once_with(None)
        return
コード例 #13
0
    def test_searchQuery_4(self):
        """
        Verify searchQuery parameters.
        extended search (extsearch)
        """
        from linotp.lib.audit.iterator import AuditQuery

        param = {
            'rp': u'15',
            'sortname': u'number',
            'session':
            u'deadbeef00174df8e77bde249de541d132903568b767706bb84b59b3fa5ad523',
            'sortorder': u'desc',
            'query': u'action=audit/search;success=1;number=730',
            'qtype': u'extsearch',
            'page': u'1'
        }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with(
            {
                u'action': u'audit/search',
                u'number': u'730',
                u'success': u'1'
            },
            rp_dict={
                'sortorder': u'desc',
                'rp': u'15',
                'page': 1,
                'sortname': u'number'
            })
コード例 #14
0
ファイル: test_iterator.py プロジェクト: eespinosa/Elm
    def test_searchQuery_2(self):
        """
        Verify searchQuery parameters.
        Search in realm, 10 per page, second page
        """
        from linotp.lib.audit.iterator import AuditQuery
        param = {
            'rp': u'10',
            'sortname': u'number',
            'session': u'deadbeef00174df8e77bde249de541d132903568b767'
                        '706bb84b59b3fa5ad523',
            'sortorder': u'desc',
            'query': u'se_test_auth',
            'qtype': u'realm',
            'page': u'2'
            }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with(
            {u'realm': u'se_test_auth'},
            rp_dict={
                'sortorder': u'desc',
                'rp': u'10',
                'page': 2,
                'sortname': u'number'
                }
            )
コード例 #15
0
    def test_searchQuery_3(self):
        """
        Verify searchQuery parameters.
        Unicode
        """
        from linotp.lib.audit.iterator import AuditQuery
        param = {
            'rp': '15',
            'sortname': 'number',
            'session': 'deadbeef00174df8e77bde249de541d132903568b767'
                        '706bb84b59b3fa5ad523',
            'sortorder': 'desc',
            'query': 'حافظ',
            'qtype': 'user',
            'page': '1'
            }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        assert len(list(audit_iterator)) == 0
        audit.searchQuery.assert_called_once_with(
            {'user': '******'},
            rp_dict={
                'sortorder': 'desc',
                'rp': '15',
                'page': 1,
                'sortname': 'number'
                }
            )
コード例 #16
0
    def test_searchQuery_2(self):
        """
        Verify searchQuery parameters.
        Search in realm, 10 per page, second page
        """
        from linotp.lib.audit.iterator import AuditQuery
        param = {
            'rp': u'10',
            'sortname': u'number',
            'session': u'deadbeef00174df8e77bde249de541d132903568b767'
            '706bb84b59b3fa5ad523',
            'sortorder': u'desc',
            'query': u'se_test_auth',
            'qtype': u'realm',
            'page': u'2'
        }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with({u'realm': u'se_test_auth'},
                                                  rp_dict={
                                                      'sortorder': u'desc',
                                                      'rp': u'10',
                                                      'page': 2,
                                                      'sortname': u'number'
                                                  })
コード例 #17
0
ファイル: test_iterator.py プロジェクト: eespinosa/Elm
    def test_searchQuery_4(self):
        """
        Verify searchQuery parameters.
        extended search (extsearch)
        """
        from linotp.lib.audit.iterator import AuditQuery

        param = {
            'rp': u'15',
            'sortname': u'number',
            'session': u'deadbeef00174df8e77bde249de541d132903568b767706bb84b59b3fa5ad523',
            'sortorder': u'desc',
            'query': u'action=audit/search;success=1;number=730',
            'qtype': u'extsearch',
            'page': u'1'
            }
        audit = MagicMock(spec=["searchQuery"])
        audit_query = AuditQuery(param, audit)
        audit_iterator = iter(audit_query.get_query_result())

        self.assertEqual(len(list(audit_iterator)), 0)
        audit.searchQuery.assert_called_once_with(
            {
                u'action': u'audit/search',
                u'number': u'730',
                u'success': u'1'
                },
            rp_dict={
                'sortorder': u'desc',
                'rp': u'15',
                'page': 1,
                'sortname': u'number'
                }
            )
コード例 #18
0
    def test_CSVAuditIterator(self):
        """
        Verify that the the CSVAuditIterator outputs the expected data given
        certain input values
        """
        from linotp.lib.audit.iterator import (AuditQuery, CSVAuditIterator)
        expected_csv = \
u""""number", "date", "sig_check", "missing_line", "action", "success", "serial", "token_type", "user", "realm", "administrator", "action_detail", "info", "linotp_server", "client", "log_level", "clearance_level"
768, "2014-04-25 11:52:54.243084", "OK", null, "validate/check", "1", "LSSP000120D8", "spass", "حافظ", "se_realm1", "", "", "", "oldjoe", "192.168.33.44", "INFO", 0
764, "2014-04-25 11:52:24.937293", "OK", null, "admin/init", "1", "", "", "حافظ", "se_realm1", "admin", "tokennum = 10", "", "oldjoe", "192.168.33.44", "INFO", 0

"""
        param = {u'user': u'حافظ', 'headers': ''}
        next_1 = {
            'info': u'',
            'administrator': u'',
            'realm': u'se_realm1',
            'success': u'1',
            'linotp_server': u'oldjoe',
            'sig_check': 'OK',
            'number': 768L,
            'token_type': u'spass',
            'action': u'validate/check',
            'client': u'192.168.33.44',
            'user': u'حافظ',
            'clearance_level': 0L,
            'action_detail': u'',
            'date': '2014-04-25 11:52:54.243084',
            'log_level': u'INFO',
            'serial': u'LSSP000120D8'
        }
        next_2 = {
            'info': u'',
            'administrator': u'admin',
            'realm': u'se_realm1',
            'success': u'1',
            'linotp_server': u'oldjoe',
            'sig_check': 'OK',
            'number': 764L,
            'token_type': u'',
            'action': u'admin/init',
            'client': u'192.168.33.44',
            'user': u'حافظ',
            'clearance_level': 0L,
            'action_detail': u'tokennum = 10',
            'date': '2014-04-25 11:52:24.937293',
            'log_level': u'INFO',
            'serial': u''
        }

        audit = MagicMock(spec=["searchQuery", "getTotal"])
        audit.searchQuery.return_value = iter([next_1, next_2])
        audit.getTotal.return_value = 2
        audit_query = AuditQuery(param, audit)
        csv_audit_iterator = CSVAuditIterator(audit_query, ',')
        result_csv = ""
        for value in csv_audit_iterator:
            result_csv += value
        result_csv = result_csv.decode('utf-8')
        self.assertEqual(expected_csv, result_csv,
                         "%r \n\n%r" % (expected_csv, result_csv))

        return
コード例 #19
0
    def test_JSONAuditIterator_1(self):
        """
        Verify that the the JSONAuditIterator outputs the expected data given
        certain input values
        """
        from linotp.lib.audit.iterator import (AuditQuery, JSONAuditIterator)
        param = {u'user': u'حافظ'}
        next_1 = {
            'info': u'',
            'administrator': u'',
            'realm': u'se_realm1',
            'success': u'1',
            'linotp_server': u'oldjoe',
            'sig_check': 'OK',
            'number': 768L,
            'token_type': u'spass',
            'action': u'validate/check',
            'client': u'192.168.33.44',
            'user': u'حافظ',
            'clearance_level': 0L,
            'action_detail': u'',
            'date': '2014-04-25 11:52:54.243084',
            'log_level': u'INFO',
            'serial': u'LSSP000120D8'
        }
        next_2 = {
            'info': u'',
            'administrator': u'admin',
            'realm': u'se_realm1',
            'success': u'1',
            'linotp_server': u'oldjoe',
            'sig_check': 'OK',
            'number': 764L,
            'token_type': u'',
            'action': u'admin/init',
            'client': u'192.168.33.44',
            'user': u'حافظ',
            'clearance_level': 0L,
            'action_detail': u'tokennum = 10',
            'date': '2014-04-25 11:52:24.937293',
            'log_level': u'INFO',
            'serial': u''
        }

        audit = MagicMock(spec=["searchQuery", "getTotal"])
        audit.searchQuery.return_value = iter([next_1, next_2])
        audit.getTotal.return_value = 2
        audit_query = AuditQuery(param, audit)
        json_audit_iterator = JSONAuditIterator(audit_query)
        result_json = ""
        for value in json_audit_iterator:
            result_json += value
        expected_json = \
u"""{ "page": 1, "rows": [ {
   "cell": [
      768,
      "2014-04-25 11:52:54.243084",
      "OK",
      null,
      "validate/check",
      "1",
      "LSSP000120D8",
      "spass",
      "حافظ",
      "se_realm1",
      "",
      "",
      "",
      "oldjoe",
      "192.168.33.44",
      "INFO",
      0
   ],
   "id": 768
}, {
   "cell": [
      764,
      "2014-04-25 11:52:24.937293",
      "OK",
      null,
      "admin/init",
      "1",
      "",
      "",
      "حافظ",
      "se_realm1",
      "admin",
      "tokennum = 10",
      "",
      "oldjoe",
      "192.168.33.44",
      "INFO",
      0
   ],
   "id": 764
}], "total": 2 }"""
        self.assertEqual(json.loads(result_json), json.loads(expected_json))
コード例 #20
0
ファイル: test_iterator.py プロジェクト: soitun/LinOTP
    def test_CSVAuditIterator(self):
        """
        Verify that the the CSVAuditIterator outputs the expected data given
        certain input values
        """
        from linotp.lib.audit.iterator import AuditQuery, CSVAuditIterator

        expected_csv = """"number", "date", "sig_check", "missing_line", "action", "success", "serial", "token_type", "user", "realm", "administrator", "action_detail", "info", "linotp_server", "client", "log_level", "clearance_level"
768, "2014-04-25 11:52:54.243084", "OK", null, "validate/check", "1", "LSSP000120D8", "spass", "حافظ", "se_realm1", "", "", "", "oldjoe", "192.168.33.44", "INFO", 0
764, "2014-04-25 11:52:24.937293", "OK", null, "admin/init", "1", "", "", "حافظ", "se_realm1", "admin", "tokennum = 10", "", "oldjoe", "192.168.33.44", "INFO", 0

"""
        param = {"user": "******", "headers": ""}
        next_1 = {
            "info": "",
            "administrator": "",
            "realm": "se_realm1",
            "success": "1",
            "linotp_server": "oldjoe",
            "sig_check": "OK",
            "number": 768,
            "token_type": "spass",
            "action": "validate/check",
            "client": "192.168.33.44",
            "user": "******",
            "clearance_level": 0,
            "action_detail": "",
            "date": "2014-04-25 11:52:54.243084",
            "log_level": "INFO",
            "serial": "LSSP000120D8",
        }
        next_2 = {
            "info": "",
            "administrator": "admin",
            "realm": "se_realm1",
            "success": "1",
            "linotp_server": "oldjoe",
            "sig_check": "OK",
            "number": 764,
            "token_type": "",
            "action": "admin/init",
            "client": "192.168.33.44",
            "user": "******",
            "clearance_level": 0,
            "action_detail": "tokennum = 10",
            "date": "2014-04-25 11:52:24.937293",
            "log_level": "INFO",
            "serial": "",
        }

        audit = MagicMock(spec=["searchQuery", "getTotal"])
        audit.searchQuery.return_value = iter([next_1, next_2])
        audit.getTotal.return_value = 2
        audit_query = AuditQuery(param, audit)
        csv_audit_iterator = CSVAuditIterator(audit_query, ",")
        result_csv = ""
        for value in csv_audit_iterator:
            result_csv += value
        assert expected_csv == result_csv, "%r \n\n%r" % (
            expected_csv,
            result_csv,
        )

        return
コード例 #21
0
    def search(self):
        """
        This functions searches within the audit trail
        It returns the audit information for the given search pattern

        method:
            audit/search

        arguments:
            key, value pairs as search patterns.

            * outform - optional: if set to "csv", than the token list will be
                        given in CSV


            or: Usually the key=values will be locally AND concatenated.
                it a parameter or=true is passed, the filters will
                be OR concatenated.

            The Flexigrid provides us the following parameters:
                ('page', u'1'), ('rp', u'25'),
                ('sortname', u'number'),
                ('sortorder', u'asc'),
                ('query', u''), ('qtype', u'serial')]
        returns:
            JSON response or csv format
        """

        try:
            log.debug("[search] params: %r", self.request_params)

            checkPolicyPre("audit", "view", {})

            # remove the param outform (and other parameters that should not
            # be used for search!
            search_params = self.request_params.copy()
            for key in ["outform", "delimiter"]:
                if key in search_params:
                    del search_params[key]

            output_format = (
                self.request_params.get("outform", "json") or "json"
            )

            delimiter = self.request_params.get("delimiter", ",") or ","

            audit_obj = current_app.audit_obj
            audit_query = AuditQuery(search_params, audit_obj)

            # ------------------------------------------------------------- --

            # check if we are running with sqlite which does not support
            # streaming responses

            stream_output = True

            db_uri = current_app.config["SQLALCHEMY_BINDS"]["auditdb"]
            if db_uri.startswith("sqlite"):
                stream_output = False

            if output_format == "csv":
                audit_iterator = CSVAuditIterator(audit_query, delimiter)
                mimetype = "text/csv"
                reponse_headers_args = {
                    "_key": "Content-disposition",
                    "_value": "attachment",
                    "filename": "linotp-audit.csv",
                }
            else:
                audit_iterator = JSONAuditIterator(audit_query)
                mimetype = "application/json"
                reponse_headers_args = {}

            if stream_output:
                audit_output = stream_with_context(audit_iterator)
            else:
                audit_output = ""
                try:
                    while True:
                        audit_output = audit_output + next(audit_iterator)
                except StopIteration:
                    # continue if all data is joined
                    pass

            streamed_response = Response(audit_output, mimetype=mimetype)

            if reponse_headers_args:
                streamed_response.headers.set(**reponse_headers_args)

            g.audit["success"] = True
            db.session.commit()

            return streamed_response

        except PolicyException as pe:
            log.error("[getotp] gettoken/getotp policy failedi: %r", pe)
            db.session.rollback()
            return sendError(response, pe, 1)

        except Exception as exx:
            log.error("[search] audit/search failed: %r", exx)
            db.session.rollback()
            return sendError(response, "audit/search failed", 0)
コード例 #22
0
    def search(self):
        '''
        This functions searches within the audit trail
        It returns the audit information for the given search pattern

        method:
            audit/search

        arguments:
            key, value pairs as search patterns.

            * outform - optional: if set to "csv", than the token list will be
                        given in CSV


            or: Usually the key=values will be locally AND concatenated.
                it a parameter or=true is passed, the filters will
                be OR concatenated.

            The Flexigrid provides us the following parameters:
                ('page', u'1'), ('rp', u'25'),
                ('sortname', u'number'),
                ('sortorder', u'asc'),
                ('query', u''), ('qtype', u'serial')]
        returns:
            JSON response or csv format
        '''

        try:
            log.debug("[search] params: %s" % self.request_params)

            checkPolicyPre('audit', 'view', {})

            # remove the param outform (and other parameters that should not
            # be used for search!
            search_params = self.request_params.copy()
            for key in ["outform", 'delimiter']:
                if key in search_params:
                    del search_params[key]

            output_format = self.request_params.get("outform",
                                                    'json') or 'json'

            streamed_response = None

            audit_obj = current_app.audit_obj
            audit_query = AuditQuery(search_params, audit_obj)

            if output_format == "csv":
                delimiter = self.request_params.get('delimiter', ',') or ','

                streamed_response = Response(stream_with_context(
                    CSVAuditIterator(audit_query, delimiter)),
                                             mimetype='text/csv')
                streamed_response.headers.set('Content-disposition',
                                              'attachment',
                                              filename='linotp-audit.csv')

            else:
                streamed_response = Response(stream_with_context(
                    JSONAuditIterator(audit_query)),
                                             mimetype='application/json')

            g.audit['success'] = True
            db.session.commit()

            return streamed_response

        except PolicyException as pe:
            log.exception("[getotp] gettoken/getotp policy failed: %r" % pe)
            db.session.rollback()
            return sendError(response, str(pe), 1)

        except Exception as e:
            log.exception("[search] audit/search failed: %r" % e)
            db.session.rollback()
            return sendError(response, "audit/search failed", 0)
コード例 #23
0
ファイル: audit.py プロジェクト: yueguangguang/LinOTP
    def search(self):
        '''
        This functions searches within the audit trail
        It returns the audit information for the given search pattern

        method:
            audit/search

        arguments:
            key, value pairs as search patterns.

            * outform - optional: if set to "csv", than the token list will be
                        given in CSV


            or: Usually the key=values will be locally AND concatenated.
                it a parameter or=true is passed, the filters will
                be OR concatenated.

            The Flexigrid provides us the following parameters:
                ('page', u'1'), ('rp', u'25'),
                ('sortname', u'number'),
                ('sortorder', u'asc'),
                ('query', u''), ('qtype', u'serial')]
        returns:
            JSON response or csv format
        '''

        param = {}
        try:
            param.update(request.params)

            log.debug("[search] params: %s" % param)

            checkPolicyPre('audit', 'view', {})

            # remove the param outform (and other parameters that should not
            # be used for search!
            search_params = {}
            search_params.update(param)
            for key in ["outform", 'delimiter']:
                if key in search_params:
                    del search_params[key]

            output_format = param.get("outform", 'json') or 'json'
            delimiter = param.get('delimiter', ',') or ','

            audit_iterator = None

            audit_query = AuditQuery(search_params, audit)

            if output_format == "csv":
                filename = "linotp-audit.csv"
                response.content_type = "application/force-download"
                response.headers['Content-disposition'] = (
                    'attachment; filename=%s' % filename)

                audit_iterator = CSVAuditIterator(audit_query, delimiter)
            else:
                response.content_type = 'application/json'
                audit_iterator = JSONAuditIterator(audit_query)

            c.audit['success'] = True
            Session.commit()
            return audit_iterator

        except PolicyException as pe:
            log.exception("[getotp] gettoken/getotp policy failed: %r" % pe)
            Session.rollback()
            return sendError(response, unicode(pe), 1)

        except Exception as e:
            log.exception("[search] audit/search failed: %r" % e)
            Session.rollback()
            return sendError(response, "audit/search failed", 0)

        finally:
            Session.close()
コード例 #24
0
ファイル: test_iterator.py プロジェクト: soitun/LinOTP
    def test_JSONAuditIterator_1(self):
        """
        Verify that the the JSONAuditIterator outputs the expected data given
        certain input values
        """
        from linotp.lib.audit.iterator import AuditQuery, JSONAuditIterator

        param = {"user": "******"}
        next_1 = {
            "info": "",
            "administrator": "",
            "realm": "se_realm1",
            "success": "1",
            "linotp_server": "oldjoe",
            "sig_check": "OK",
            "number": 768,
            "token_type": "spass",
            "action": "validate/check",
            "client": "192.168.33.44",
            "user": "******",
            "clearance_level": 0,
            "action_detail": "",
            "date": "2014-04-25 11:52:54.243084",
            "log_level": "INFO",
            "serial": "LSSP000120D8",
        }
        next_2 = {
            "info": "",
            "administrator": "admin",
            "realm": "se_realm1",
            "success": "1",
            "linotp_server": "oldjoe",
            "sig_check": "OK",
            "number": 764,
            "token_type": "",
            "action": "admin/init",
            "client": "192.168.33.44",
            "user": "******",
            "clearance_level": 0,
            "action_detail": "tokennum = 10",
            "date": "2014-04-25 11:52:24.937293",
            "log_level": "INFO",
            "serial": "",
        }

        audit = MagicMock(spec=["searchQuery", "getTotal"])
        audit.searchQuery.return_value = iter([next_1, next_2])
        audit.getTotal.return_value = 2
        audit_query = AuditQuery(param, audit)
        json_audit_iterator = JSONAuditIterator(audit_query)
        result_json = ""
        for value in json_audit_iterator:
            result_json += value
        expected_json = """{ "page": 1, "rows": [ {
   "cell": [
      768,
      "2014-04-25 11:52:54.243084",
      "OK",
      null,
      "validate/check",
      "1",
      "LSSP000120D8",
      "spass",
      "حافظ",
      "se_realm1",
      "",
      "",
      "",
      "oldjoe",
      "192.168.33.44",
      "INFO",
      0
   ],
   "id": 768
}, {
   "cell": [
      764,
      "2014-04-25 11:52:24.937293",
      "OK",
      null,
      "admin/init",
      "1",
      "",
      "",
      "حافظ",
      "se_realm1",
      "admin",
      "tokennum = 10",
      "",
      "oldjoe",
      "192.168.33.44",
      "INFO",
      0
   ],
   "id": 764
}], "total": 2 }"""
        assert json.loads(result_json) == json.loads(expected_json)