Exemplo n.º 1
0
 def __init__(self) -> None:
     self.max_info_size = 512 * 1024  # bytes
     self.download_root = settings.RELEASE_DOWNLOAD_ROOT  # type: str
     self.download_max_timeout = 60
     self.download_max_redirects = 10
     self.download_max_size = 20 * (1024 ** 2)
     self.info_schema = read_relative_file(__file__, 'info.xsd')
     self.info_xslt = read_relative_file(__file__, 'info.xslt')
     self.pre_info_xslt = read_relative_file(__file__, 'pre-info.xslt')
Exemplo n.º 2
0
 def __init__(self) -> None:
     self.download_root = settings.RELEASE_DOWNLOAD_ROOT  # type: str
     self.max_info_size = settings.MAX_DOWNLOAD_INFO_XML_SIZE
     self.download_max_timeout = settings.MAX_DOWNLOAD_TIMEOUT
     self.download_max_redirects = settings.MAX_DOWNLOAD_REDIRECTS
     self.download_max_size = settings.MAX_DOWNLOAD_SIZE
     self.info_schema = read_relative_file(__file__, 'info.xsd')
     self.info_xslt = read_relative_file(__file__, 'info.xslt')
     self.pre_info_xslt = read_relative_file(__file__, 'pre-info.xslt')
     self.languages = settings.LANGUAGES
Exemplo n.º 3
0
 def __init__(self) -> None:
     self.download_root = settings.RELEASE_DOWNLOAD_ROOT  # type: str
     self.max_file_size = settings.MAX_DOWNLOAD_FILE_SIZE
     self.download_max_timeout = settings.MAX_DOWNLOAD_TIMEOUT
     self.download_max_redirects = settings.MAX_DOWNLOAD_REDIRECTS
     self.download_max_size = settings.MAX_DOWNLOAD_SIZE
     self.info_schema = read_relative_file(__file__, 'info.xsd')
     self.info_xslt = read_relative_file(__file__, 'info.xslt')
     self.pre_info_xslt = read_relative_file(__file__, 'pre-info.xslt')
     self.db_schema = read_relative_file(__file__, 'database.xsd')
     self.pre_db_xslt = read_relative_file(__file__, 'pre-database.xslt')
     self.languages = settings.LANGUAGES
Exemplo n.º 4
0
 def setUp(self):
     container = Container()
     self.importer = container.resolve(AppImporter)
     self.config = ReleaseConfig()
     self.min = read_relative_file(__file__, 'data/infoxmls/minimal.xml')
     self.full = read_relative_file(__file__, 'data/infoxmls/full.xml')
     self.user = get_user_model().objects.create_user(username='******',
                                                      password='******',
                                                      email='*****@*****.**')
     self.app = App.objects.create(pk='news', owner=self.user)
     Screenshot.objects.create(url='https://google.com', ordering=1,
                               app=self.app)
Exemplo n.º 5
0
 def setUp(self):
     container = Container()
     self.importer = container.resolve(AppImporter)
     self.config = ReleaseConfig()
     self.min = read_relative_file(__file__, 'data/infoxmls/minimal.xml')
     self.full = read_relative_file(__file__,
                                    'data/infoxmls/fullimport.xml')
     self.user = get_user_model().objects.create_user(username='******',
                                                      password='******',
                                                      email='*****@*****.**')
     self.app = App.objects.create(pk='news', owner=self.user)
     Screenshot.objects.create(url='https://google.com', ordering=1,
                               app=self.app)
Exemplo n.º 6
0
 def test_build_files(self):
     with self.settings(APP_SCAFFOLDING_PROFILES={14: {
         'owncloud_version': '9.2'
     }}):
         expected = read_relative_file(__file__, 'data/info.xml').strip()
         result = build_files(self.args)
         info = result['theapp/appinfo/info.xml'].strip()
         self.assertEqual(expected, info)
Exemplo n.º 7
0
 def test_build_archive(self):
     result = build_archive(self.args)
     expected = read_relative_file(__file__, 'data/info.xml').strip()
     with tarfile.open(fileobj=result, mode='r:gz') as f:
         member = f.getmember('theapp/appinfo/info.xml')
         with f.extractfile(member) as info:
             result = info.read().strip().decode('utf-8')
             self.assertEqual(expected, result)
Exemplo n.º 8
0
 def test_build_archive(self):
     result = build_archive(self.args)
     expected = read_relative_file(__file__, 'data/info.xml').strip()
     with tarfile.open(fileobj=result, mode='r:gz') as f:
         member = f.getmember('theapp/appinfo/info.xml')
         with f.extractfile(member) as info:
             result = info.read().strip().decode('utf-8')
             self.assertEqual(expected, result)
Exemplo n.º 9
0
 def test_build_files(self):
     with self.settings(
             APP_SCAFFOLDING_PROFILES={14: {
                 'owncloud_version': '9.2'
             }}):
         expected = read_relative_file(__file__, 'data/info.xml').strip()
         result = build_files(self.args)
         info = result['theapp/appinfo/info.xml'].strip()
         self.assertEqual(expected, info)
    def test_invalid_app_id(self):
        xml = read_relative_file(__file__, 'data/infoxmls/minimal.xml')
        downloader = self.container.resolve(AppReleaseDownloader)
        downloader.get_archive = MagicMock(return_value=FakeDownload())
        extractor = self.container.resolve(GunZipAppMetadataExtractor)
        extractor.extract_app_metadata = MagicMock(return_value=(xml, 'new'))
        provider = self.container.resolve(AppReleaseProvider)

        with self.assertRaises(InvalidAppDirectoryException):
            provider.get_release_info('http://google.com')
Exemplo n.º 11
0
 def test_build_archive(self):
     with self.settings(APP_SCAFFOLDING_PROFILES={14: {
         'owncloud_version': '9.2'
     }}):
         result = build_archive(self.args)
         expected = read_relative_file(__file__, 'data/info.xml').strip()
         with tarfile.open(fileobj=result, mode='r:gz') as f:
             member = f.getmember('theapp/appinfo/info.xml')
             with f.extractfile(member) as info:
                 result = info.read().strip().decode('utf-8')
                 self.assertEqual(expected, result)
    def test_invalid_app_id(self):
        xml = read_relative_file(__file__, 'data/infoxmls/minimal.xml')
        downloader = self.container.resolve(AppReleaseDownloader)
        downloader.get_archive = MagicMock(return_value=FakeDownload())
        extractor = self.container.resolve(GunZipAppMetadataExtractor)
        extractor.extract_app_metadata = MagicMock(
            return_value=(xml, '', 'new', 'change'))
        provider = self.container.resolve(AppReleaseProvider)

        with self.assertRaises(InvalidAppDirectoryException):
            provider.get_release_info('http://google.com')
Exemplo n.º 13
0
 def test_build_archive(self):
     with self.settings(
             APP_SCAFFOLDING_PROFILES={14: {
                 'owncloud_version': '9.2'
             }}):
         result = build_archive(self.args)
         expected = read_relative_file(__file__, 'data/info.xml').strip()
         with tarfile.open(fileobj=result, mode='r:gz') as f:
             member = f.getmember('theapp/appinfo/info.xml')
             with f.extractfile(member) as info:
                 result = info.read().strip().decode('utf-8')
                 self.assertEqual(expected, result)
    def test_valid_checksum(self):
        xml = read_relative_file(__file__, 'data/infoxmls/minimal.xml')
        downloader = self.container.resolve(AppReleaseDownloader)
        downloader.get_archive = MagicMock(return_value=FakeDownload())
        extractor = self.container.resolve(GunZipAppMetadataExtractor)
        extractor.extract_app_metadata = MagicMock(return_value=(xml, 'news'))
        provider = self.container.resolve(AppReleaseProvider)

        info = provider.get_release_info('http://google.com')
        self.assertEqual(
            'f44ff51ce0cd12e37367af5cb02ccab0e5fc29625b1b013665b833435'
            '0bc8836', info['app']['release']['checksum'])
Exemplo n.º 15
0
    def test_valid_checksum(self):
        xml = read_relative_file(__file__, 'data/infoxmls/minimal.xml')
        downloader = self.container.resolve(AppReleaseDownloader)
        downloader.get_archive = MagicMock(return_value=FakeDownload())
        extractor = self.container.resolve(GunZipAppMetadataExtractor)
        extractor.extract_app_metadata = MagicMock(return_value=(xml, 'news'))
        provider = self.container.resolve(AppReleaseProvider)

        info = provider.get_release_info('http://google.com')
        self.assertEqual(
            'cc29634a832affe4000c561e64e746850ca984aa1a3b89'
            '6aca510375c53eb25d', info['app']['release']['checksum'])
Exemplo n.º 16
0
 def _read_cert(self, file: str) -> str:
     return read_relative_file(__file__, 'data/certificates/%s' % file)
Exemplo n.º 17
0
class AppRegisterTest(ApiTest):
    create_url = reverse('api:v1:app-register')
    _cert = read_relative_file(__file__,
                               '../../../certificate/tests/data/certificates/'
                               'news-old.crt').strip()

    def _create_app(self, owner, app_id):
        return App.objects.create(owner=owner, id=app_id)

    def test_register_unauthenticated(self):
        response = self.api_client.post(self.create_url, data={
            'signature': 'sign',
            'certificate': 'cert'
        }, format='json')
        self.assertEqual(401, response.status_code)

    def test_register_unauthorized(self):
        owner = get_user_model().objects.create_user(username='******',
                                                     password='******',
                                                     email='*****@*****.**')
        self._create_app(owner, 'news')
        self._login_token()
        with self.settings(VALIDATE_CERTIFICATES=False):
            response = self.api_client.post(self.create_url, data={
                'signature': 'sign',
                'certificate': self._cert
            }, format='json')
            self.assertEqual(403, response.status_code)

    def test_register_transfer(self):
        owner = get_user_model().objects.create_user(username='******',
                                                     password='******',
                                                     email='*****@*****.**')
        app = self._create_app(owner, 'news')
        app.ownership_transfer_enabled = True
        app.save()
        self._login_token()
        with self.settings(VALIDATE_CERTIFICATES=False):
            response = self.api_client.post(self.create_url, data={
                'signature': 'sign',
                'certificate': self._cert
            }, format='json')
            self.assertEqual(204, response.status_code)
            app = App.objects.get(id='news')
            self.assertEqual(self.user, app.owner)
            self.assertFalse(app.ownership_transfer_enabled)

    def test_register(self):
        self._login()
        with self.settings(VALIDATE_CERTIFICATES=False):
            response = self.api_client.post(self.create_url, data={
                'signature': 'sign',
                'certificate': self._cert
            }, format='json')
            self.assertEqual(201, response.status_code)
            app = App.objects.get(id='news')
            self.assertEqual(self.user, app.owner)
            self.assertEqual(self._cert, app.certificate)

    def test_register_update(self):
        app = self._create_app(self.user, 'news')
        app.certificate = 'blubb'
        app.save()
        AppRelease.objects.create(version='1.0.0', app=app)

        self.assertEqual(1, App.objects.get(id='news').releases.all().count())
        self._login()
        with self.settings(VALIDATE_CERTIFICATES=False):
            response = self.api_client.post(self.create_url, data={
                'signature': 'sign',
                'certificate': self._cert
            }, format='json')
            self.assertEqual(204, response.status_code)
            app = App.objects.get(id='news')
            self.assertEqual(self.user, app.owner)
            self.assertEqual(self._cert, app.certificate)
            self.assertEqual(0, app.releases.all().count())
Exemplo n.º 18
0
 def read_cert(self, name: str) -> str:
     path = 'data/%s' % name
     return read_relative_file(__file__, path)
Exemplo n.º 19
0
 def read_translations(self):
     return read_relative_file(__file__, self.trans_path).strip()
 def _read(self, path: str) -> str:
     return read_relative_file(__file__, '../../../tests/data/%s' % path)
Exemplo n.º 21
0
 def test_build_files(self):
     expected = read_relative_file(__file__, 'data/info.xml').strip()
     result = build_files(self.args)
     info = result['theapp/appinfo/info.xml'].strip()
     self.assertEqual(expected, info)
 def _read(self, path: str) -> str:
     return read_relative_file(__file__, '../../../tests/data/%s' % path)
Exemplo n.º 23
0
 def _read_cert(self, file: str) -> str:
     return read_relative_file(__file__, 'data/certificates/%s' % file)
Exemplo n.º 24
0
 def test_build_files(self):
     expected = read_relative_file(__file__, 'data/info.xml').strip()
     result = build_files(self.args)
     info = result['theapp/appinfo/info.xml'].strip()
     self.assertEqual(expected, info)