Beispiel #1
0
def link_app(linked_app, master_domain, master_id, remote_details=None):
    DomainLink.link_domains(linked_app.domain, master_domain, remote_details)

    linked_app.master = master_id
    linked_app.doc_type = 'LinkedApplication'
    linked_app.save()
    return linked_app
    def test_link_new_master(self):
        link = DomainLink.link_domains('linked', 'master')
        link.deleted = True
        link.save()

        link1 = DomainLink.link_domains('linked', 'master1')
        self.assertNotEqual(link.pk, link1.pk)
Beispiel #3
0
 def handle(self, url_base, upstream_domain, username, api_key, downstream_domain, **options):
     remote_details = RemoteLinkDetails(
         url_base=url_base,
         username=username,
         api_key=api_key
     )
     DomainLink.link_domains(downstream_domain, upstream_domain, remote_details)
def _migrate_linked_apps(apps, schema_editor):
    app_db = LinkedApplication.get_db()
    linked_apps = get_all_docs_with_doc_types(
        app_db, ['LinkedApplication', 'LinkedApplication-Deleted']
    )
    errors = []
    for app_doc in linked_apps:
        remote_details = None
        remote_url = app_doc.pop('remote_url_base', None)
        if remote_url:
            auth = app_doc.pop('remote_auth', {})
            remote_details = RemoteLinkDetails(
                remote_url,
                auth.get('username'),
                auth.get('api_key'),
            )

        master_domain = app_doc.pop('master_domain', None)
        if not master_domain and not remote_url:
            master_domain = get_app(None, app_doc['master']).domain
        try:
            DomainLink.link_domains(app_doc['domain'], master_domain, remote_details)
        except DomainLinkError as e:
            errors.append(str(e))
        else:
            app_db.save_doc(app_doc)

    _assert = soft_assert('{}@dimagi.com'.format('skelly'), exponential_backoff=False)
    _assert(not errors, 'Errors migrating linked apps to linked domain', {
        'errors': errors
    })
Beispiel #5
0
def link_app(linked_app, master_domain, master_id, remote_details=None):
    DomainLink.link_domains(linked_app.domain, master_domain, remote_details)

    linked_app.master = master_id
    linked_app.doc_type = 'LinkedApplication'
    linked_app.save()
    return linked_app
    def test_link_previously_deleted(self):
        link = DomainLink.link_domains('linked', 'master')
        link.deleted = True
        link.save()

        link1 = DomainLink.link_domains('linked', 'master')
        self.assertEqual(link.pk, link1.pk)
        self.assertFalse(link1.deleted)
    def test_link_deleted_then_create_existing_link(self):
        # create a link and delete it
        link = DomainLink.link_domains('linked', 'master')
        link.deleted = True
        link.save()

        # create a new link
        link1 = DomainLink.link_domains('linked', 'master1')

        # create the same link again
        link2 = DomainLink.link_domains('linked', 'master1')
        self.assertEqual(link1.pk, link2.pk)
        self.assertNotEqual(link.pk, link2.pk)
    def test_link_deleted_then_create_existing_link(self):
        # create a link and delete it
        link = DomainLink.link_domains('linked', 'master')
        link.deleted = True
        link.save()

        # create a new link
        link1 = DomainLink.link_domains('linked', 'master1')

        # create the same link again
        link2 = DomainLink.link_domains('linked', 'master1')
        self.assertEqual(link1.pk, link2.pk)
        self.assertNotEqual(link.pk, link2.pk)
def link_app(linked_app, master_domain, master_id, remote_details=None):
    DomainLink.link_domains(linked_app.domain, master_domain, remote_details)

    linked_app.family_id = master_id
    linked_app.doc_type = 'LinkedApplication'
    linked_app.save()

    if linked_app.master_is_remote:
        try:
            pull_missing_multimedia_for_app(linked_app)
        except RemoteRequestError:
            raise AppLinkError('Error fetching multimedia from remote server. Please try again later.')

    return linked_app
Beispiel #10
0
    def setUpClass(cls):
        super(TestGetDataModels, cls).setUpClass()
        cls.upstream_domain_obj = create_domain('upstream-domain')
        cls.upstream_domain = cls.upstream_domain_obj.name
        cls.downstream_domain_obj = create_domain('downstream-domain')
        cls.downstream_domain = cls.downstream_domain_obj.name

        cls.original_app = Application.new_app(cls.upstream_domain,
                                               "Original Application")
        cls.original_app.linked_whitelist = [cls.downstream_domain]
        cls.original_app.save()

        cls.linked_app = LinkedApplication.new_app(cls.downstream_domain,
                                                   "Linked Application")
        cls.linked_app.upstream_app_id = cls.original_app._id
        cls.linked_app.save()

        cls.original_report = _create_report(cls.upstream_domain)
        cls.linked_report = _create_report(cls.downstream_domain,
                                           upstream_id=cls.original_report._id)

        cls.original_keyword = _create_keyword(cls.upstream_domain)
        cls.linked_keyword = _create_keyword(
            cls.downstream_domain, upstream_id=cls.original_keyword.id)

        cls.original_fixture = _create_fixture(cls.upstream_domain)

        cls.domain_link = DomainLink.link_domains(cls.downstream_domain,
                                                  cls.upstream_domain)
    def setUpClass(cls):
        super(BaseLinkedAppsTest, cls).setUpClass()
        cls.domain_obj = create_domain('domain')
        cls.domain = cls.domain_obj.name
        cls.master_app_with_report_modules = Application.new_app(
            cls.domain, "Master Application")
        module = cls.master_app_with_report_modules.add_module(
            ReportModule.new_module('Reports', None))
        module.report_configs = [
            ReportAppConfig(report_id='master_report_id',
                            header={'en': 'CommBugz'}),
        ]

        cls.linked_domain_obj = create_domain('domain-2')
        cls.linked_domain = cls.linked_domain_obj.name
        cls.master1 = Application.new_app(cls.domain,
                                          "First Master Application")
        cls.master1.save()

        cls.master2 = Application.new_app(cls.domain,
                                          "Second Master Application")
        cls.master2.save()

        cls.linked_app = LinkedApplication.new_app(cls.linked_domain,
                                                   "Linked Application")
        cls.linked_app.family_id = cls.master1._id
        cls.linked_app.save()

        cls.domain_link = DomainLink.link_domains(cls.linked_domain,
                                                  cls.domain)
Beispiel #12
0
    def setUpClass(cls):
        super(TestAddAppIdToLinkedReports, cls).setUpClass()
        cls.upstream_domain_obj = create_domain('test-upstream')
        cls.upstream_domain = cls.upstream_domain_obj.name
        cls.downstream_domain_obj = create_domain('test-downstream')
        cls.downstream_domain = cls.downstream_domain_obj.name
        cls.domain_link = DomainLink.link_domains(cls.downstream_domain,
                                                  cls.upstream_domain)

        cls.original_app = Application.new_app(cls.upstream_domain,
                                               "Original Application")
        cls.original_app.linked_whitelist = [cls.downstream_domain]
        cls.original_app.save()

        cls.linked_app = LinkedApplication.new_app(cls.downstream_domain,
                                                   "Linked Application")
        cls.linked_app.upstream_app_id = cls.original_app._id
        cls.linked_app.family_id = cls.original_app._id
        cls.linked_app.save()

        cls.original_report = _create_report(cls.upstream_domain,
                                             app_id=cls.original_app._id)
        # intentionally do not pass app_id into create method, as this is the scenario this migration is used in
        cls.linked_report = _create_report(cls.downstream_domain,
                                           upstream_id=cls.original_report._id)
Beispiel #13
0
 def _make_linked_app(self, upstream_domain):
     linked_app = LinkedApplication.new_app('downstream', "Linked Application")
     linked_app.save()
     domain_link = DomainLink.link_domains('downstream', upstream_domain)
     self.addCleanup(linked_app.delete)
     self.addCleanup(domain_link.delete)
     return linked_app
Beispiel #14
0
 def setUpClass(cls):
     super().setUpClass()
     cls.user = WebUser.create(cls.domain, 'fiona', 'secret', None, None)
     cls.manager = ReleaseManager(cls.domain, cls.user)
     master1_module = cls.master1.add_module(Module.new_module('Module for master1', None))
     master1_module.new_form('Form for master1', 'en', get_blank_form_xml('Form for master1'))
     cls.extra_domain = 'antarctica'
     cls.extra_domain_link = DomainLink.link_domains(cls.extra_domain, cls.domain)
Beispiel #15
0
    def test_downstream_url(self):
        domain_link = DomainLink.link_domains(
            linked_domain=self.downstream.name,
            master_domain=self.upstream.name)
        self.addCleanup(domain_link.delete)

        expected_downstream_url = '/a/downstream-domain/settings/project/domain_links/'
        self.assertEqual(expected_downstream_url, domain_link.downstream_url)
Beispiel #16
0
    def setUpClass(cls):
        super().setUpClass()
        cls.domain_obj = create_domain('domain')
        cls.domain = cls.domain_obj.name

        cls.linked_domain_obj = create_domain('domain-2')
        cls.linked_domain = cls.linked_domain_obj.name
        cls.domain_link = DomainLink.link_domains(cls.linked_domain,
                                                  cls.domain)
Beispiel #17
0
    def test_remote_downstream_url(self):
        domain_link = DomainLink.link_domains(
            linked_domain=self.downstream.name,
            master_domain=self.upstream.name)
        domain_link.remote_base_url = 'test.base.url'
        domain_link.save()
        self.addCleanup(domain_link.delete)

        expected_downstream_url = self.downstream.name  # remote downstream urls are equal to the name
        self.assertEqual(expected_downstream_url, domain_link.downstream_url)
Beispiel #18
0
    def setUpClass(cls):
        super(TestUpdateRolesRemote, cls).setUpClass()
        cls.domain_obj = create_domain('domain')
        cls.domain = cls.domain_obj.name

        cls.linked_domain_obj = create_domain('domain-2')
        cls.linked_domain = cls.linked_domain_obj.name

        cls.domain_link = DomainLink.link_domains(cls.linked_domain,
                                                  cls.domain)
        cls.domain_link.remote_base_url = "http://other.org"
        cls.domain_link.save()
Beispiel #19
0
    def setUpClass(cls):
        super(TestGetDownstreamAppId, cls).setUpClass()
        cls.upstream_domain_obj = create_domain('upstream')
        cls.upstream_domain = cls.upstream_domain_obj.name
        cls.upstream_domain_obj.save()

        cls.downstream_domain_obj = create_domain('downstream')
        cls.downstream_domain = cls.downstream_domain_obj.name
        cls.downstream_domain_obj.save()

        cls.domain_link = DomainLink.link_domains(cls.downstream_domain,
                                                  cls.upstream_domain)
        cls.domain_link.save()
    def setUpClass(cls):
        super(RemoteAuthTest, cls).setUpClass()

        cls.master_domain = uuid.uuid4().hex
        cls.linked_domain = uuid.uuid4().hex

        cls.domain = create_domain(cls.master_domain)
        cls.couch_user = WebUser.create(cls.master_domain, "test", "foobar")
        cls.django_user = cls.couch_user.get_django_user()
        cls.api_key, _ = ApiKey.objects.get_or_create(user=cls.django_user)

        cls.auth_headers = {'HTTP_AUTHORIZATION': 'apikey test:%s' % cls.api_key.key}

        cls.linked_domain_requester = absolute_reverse('domain_homepage', args=[cls.linked_domain])
        cls.domain_link = DomainLink.link_domains(cls.linked_domain_requester, cls.master_domain)
Beispiel #21
0
    def setUpClass(cls):
        super(RemoteAuthTest, cls).setUpClass()

        cls.master_domain = uuid.uuid4().hex
        cls.linked_domain = uuid.uuid4().hex

        cls.domain = create_domain(cls.master_domain)
        cls.couch_user = WebUser.create(cls.master_domain, "test", "foobar")
        cls.django_user = cls.couch_user.get_django_user()
        cls.api_key, _ = ApiKey.objects.get_or_create(user=cls.django_user)

        cls.auth_headers = {'HTTP_AUTHORIZATION': 'apikey test:%s' % cls.api_key.key}

        cls.linked_domain_requester = absolute_reverse('domain_homepage', args=[cls.linked_domain])
        cls.domain_link = DomainLink.link_domains(cls.linked_domain_requester, cls.master_domain)
Beispiel #22
0
    def setUpClass(cls):
        super(BaseLinkedAppsTest, cls).setUpClass()
        cls.master_app_with_report_modules = Application.new_app('domain', "Master Application")
        module = cls.master_app_with_report_modules.add_module(ReportModule.new_module('Reports', None))
        module.report_configs = [
            ReportAppConfig(report_id='id', header={'en': 'CommBugz'}),
        ]

        cls.plain_master_app = Application.new_app('domain', "Master Application")
        cls.plain_master_app.linked_whitelist = ['domain-2']
        cls.plain_master_app.save()

        cls.linked_app = LinkedApplication.new_app('domain-2', "Linked Application")
        cls.linked_app.save()

        cls.domain_link = DomainLink.link_domains('domain-2', 'domain')
Beispiel #23
0
def link_domains(couch_user, upstream_domain, downstream_domain):
    if not domain_exists(downstream_domain):
        error = gettext("The project space {} does not exist. Verify that the name is correct, and that the "
                        "domain has not been deleted.").format(downstream_domain)
        raise DomainDoesNotExist(error)

    if get_active_domain_link(upstream_domain, downstream_domain):
        error = gettext(
            "The project space {} is already a downstream project space of {}."
        ).format(downstream_domain, upstream_domain)
        raise DomainLinkAlreadyExists(error)

    if not user_has_admin_access_in_all_domains(couch_user, [upstream_domain, downstream_domain]):
        error = gettext("You must be an admin in both project spaces to create a link.")
        raise DomainLinkNotAllowed(error)

    return DomainLink.link_domains(downstream_domain, upstream_domain)
Beispiel #24
0
    def setUpClass(cls):
        super(BaseLinkedAppsTest, cls).setUpClass()
        cls.domain = 'domain'
        cls.master_app_with_report_modules = Application.new_app(cls.domain, "Master Application")
        module = cls.master_app_with_report_modules.add_module(ReportModule.new_module('Reports', None))
        module.report_configs = [
            ReportAppConfig(report_id='master_report_id', header={'en': 'CommBugz'}),
        ]

        cls.plain_master_app = Application.new_app(cls.domain, "Master Application")
        cls.linked_domain = 'domain-2'
        cls.plain_master_app.linked_whitelist = [cls.linked_domain]
        cls.plain_master_app.save()

        cls.linked_app = LinkedApplication.new_app(cls.linked_domain, "Linked Application")
        cls.linked_app.save()

        cls.domain_link = DomainLink.link_domains(cls.linked_domain, cls.domain)
    def test_multiple_master_links(self):
        link1 = DomainLink.link_domains('linked1', 'master')
        link2 = DomainLink.link_domains('linked2', 'master')

        self.assertNotEqual(link1.pk, link2.pk)
 def test_double_link(self):
     DomainLink.link_domains('linked', 'master')
     with self.assertRaises(DomainLinkError):
         DomainLink.link_domains('linked', 'master2')
 def test_linking_existing(self):
     link = DomainLink.link_domains('linked', 'master')
     link1 = DomainLink.link_domains('linked', 'master')
     self.assertEqual(link.pk, link1.pk)
 def handle(self, downstream_url, upstream_domain, **options):
     DomainLink.link_domains(downstream_url, upstream_domain)