Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure absolute URL for initConfig.baseurl + remove initConfig.group property #836

Merged
merged 10 commits into from
May 6, 2024
9 changes: 5 additions & 4 deletions g3w-admin/client/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,10 @@ def get(
groupSerializer = GroupSerializer(
group, projectId=project_id, projectType=project_type, request=self.request
)
baseurl = "/{}".format(
settings.SITE_PREFIX_URL if settings.SITE_PREFIX_URL else ""
)

baseurl = "/{}".format(getattr(settings, 'SITE_PREFIX_URL') or '');
baseurl = self.request.build_absolute_uri(baseurl) if baseurl.startswith('/') else baseurl

generaldata = GeneralSuiteData.objects.get()

# change groupData name with title for i18n app
Expand All @@ -124,11 +125,11 @@ def get(
"rasterurl": settings.RASTER_URL,
"proxyurl": reverse("interface-proxy"),
"interfaceowsurl": reverse("interface-ows"),
"group": groupSerializer.data,
"g3wsuite_logo_img": settings.CLIENT_G3WSUITE_LOGO,
"credits": reverse("client-credits"),
"main_map_title": generaldata.main_map_title,
"i18n": settings.LANGUAGES,
**groupSerializer.data,
}

# add frontendurl if frontend is set
Expand Down
46 changes: 23 additions & 23 deletions g3w-admin/client/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,42 +127,42 @@ def testGroupConfigApiView(self):
response = self._testApiCall('group-map-config', ['gruppo-1', 'qdjango', '1'])
resp = json.loads(response.content)
self.assertEqual(resp["vectorurl"], "/vector/api/")
self.assertEqual(resp["group"]["crs"], {
self.assertEqual(resp["crs"], {
'epsg': 4326,
'proj4': '+proj=longlat +datum=WGS84 +no_defs',
'geographic': True,
'axisinverted': True,
'extent': [-180.0, -90.0, 180.0, 90.0]
})
print(resp["group"]["mapcontrols"])
self.assertEqual(resp["group"]["mapcontrols"], {'zoom': {}, 'zoombox': {}, 'zoomtoextent': {}, 'query': {}, 'querybbox': {}, 'querybypolygon': {}, 'overview': {}, 'scaleline': {}, 'geolocation': {}, 'streetview': {}, 'geocoding': {'providers': {}}, 'addlayers': {}, 'length': {}, 'area': {}, 'mouseposition': {}, 'scale': {}})
self.assertEqual(resp["group"]["header_logo_img"], "logo_img/qgis-logo.png")
self.assertEqual(resp["group"]["name"], "Gruppo 1")
self.assertIsNone(resp["group"]["header_logo_link"])
self.assertEqual(resp["group"]["initproject"], "qdjango:1")
self.assertEqual(resp["group"]["header_terms_of_use_link"], "")
self.assertTrue(resp["group"]["powered_by"])
self.assertEqual(resp["group"]["baselayers"], [{'crs': {'epsg': 3857, 'proj4': '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', 'geographic': False, 'axisinverted': False}, 'servertype': 'OSM', 'attribution': "<a href='https://www.openstreetmap.org/copyright'>OpenStreetMap contributors</a>", 'name': 'OpenStreetMap', 'title': 'OSM', 'scalebasedvisibility': False, 'maxscale': 0, 'minscale': 100000000, 'id': 3, 'icon': None}])
self.assertEqual(resp["group"]["header_terms_of_use_text"], "")
self.assertEqual(resp["group"]["header_custom_links"], [])
self.assertEqual(resp["group"]["background_color"], "#ffffff")
self.assertEqual(resp["group"]["id"], 1)
self.assertEqual(resp["group"]["slug"], 'gruppo-1')
self.assertEqual(len(resp["group"]["projects"]), 1)

self.assertIn('vendorkeys', resp["group"])
self.assertEqual(resp["group"]["vendorkeys"], {'google': '123456789'})

project = resp["group"]["projects"][0]
print(resp["mapcontrols"])
self.assertEqual(resp["mapcontrols"], {'zoom': {}, 'zoombox': {}, 'zoomtoextent': {}, 'query': {}, 'querybbox': {}, 'querybypolygon': {}, 'overview': {}, 'scaleline': {}, 'geolocation': {}, 'streetview': {}, 'geocoding': {'providers': {}}, 'addlayers': {}, 'length': {}, 'area': {}, 'mouseposition': {}, 'scale': {}})
self.assertEqual(resp["header_logo_img"], "logo_img/qgis-logo.png")
self.assertEqual(resp["name"], "Gruppo 1")
self.assertIsNone(resp["header_logo_link"])
self.assertEqual(resp["initproject"], "qdjango:1")
self.assertEqual(resp["header_terms_of_use_link"], "")
self.assertTrue(resp["powered_by"])
self.assertEqual(resp["baselayers"], [{'crs': {'epsg': 3857, 'proj4': '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', 'geographic': False, 'axisinverted': False}, 'servertype': 'OSM', 'attribution': "<a href='https://www.openstreetmap.org/copyright'>OpenStreetMap contributors</a>", 'name': 'OpenStreetMap', 'title': 'OSM', 'scalebasedvisibility': False, 'maxscale': 0, 'minscale': 100000000, 'id': 3, 'icon': None}])
self.assertEqual(resp["header_terms_of_use_text"], "")
self.assertEqual(resp["header_custom_links"], [])
self.assertEqual(resp["background_color"], "#ffffff")
self.assertEqual(resp["id"], 1)
self.assertEqual(resp["slug"], 'gruppo-1')
self.assertEqual(len(resp["projects"]), 1)

self.assertIn('vendorkeys', resp)
self.assertEqual(resp["vendorkeys"], {'google': '123456789'})

project = resp["projects"][0]
to_compare = {'description': '<p>progetto 1<br></p>', 'title': 'Un progetto',
'thumbnail': '/fake/project.png', 'gid': 'qdjango:1', 'type': 'qdjango', 'id': 1}
for k in list(to_compare.keys()):
self.assertEqual(project[k], to_compare[k])

self.assertIsNone(resp["group"]["overviewproject"])
self.assertIsNone(resp["overviewproject"])
self.assertIsNone(resp["main_map_title"])
self.assertEqual(resp["mediaurl"], "/media/")
self.assertEqual(resp["baseurl"], "/")
self.assertFalse(resp["baseurl"].startswith('/'), 'baseurl is not an absolute URI')
self.assertEqual(resp["vectorurl"], "/vector/api/")
self.assertEqual(resp["rasterurl"], "/raster/api/")
self.assertEqual(resp["proxyurl"], reverse('interface-proxy'))
Expand Down
121 changes: 48 additions & 73 deletions g3w-admin/client/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,12 @@ def get_context_data(self, **kwargs):
contextData = super(ClientView, self).get_context_data(**kwargs)

# group serializer
try:
group = self.project.group
except:
group = get_object_or_404(Group, slug=kwargs['group_slug'])
groupSerializer = GroupSerializer(group, projectId=str(self.project.pk), projectType=kwargs['project_type'],
request=self.request)

groupData = deepcopy(groupSerializer.data)
groupSerializer = GroupSerializer(
getattr(self.project, 'group', get_object_or_404(Group, slug=kwargs['group_slug'])),
projectId=str(self.project.pk),
projectType=kwargs['project_type'],
request=self.request
)

# choose client by querystring paramenters
contextData['client_default'] = self.get_client_name()
Expand All @@ -116,74 +114,50 @@ def get_context_data(self, **kwargs):
except:
pass


# add user login data
# user data
u = self.request.user

# admin_url
change_grant_users = get_users_for_object(self.project, "change_project", with_group_users=True)
if u in change_grant_users or u.is_superuser:
admin_url = reverse('home')
else:
admin_url = None

user_data = {
'i18n': get_language(),
'login_url': login_url
}
if not u.is_anonymous:
user_data.update({
'id': u.pk,
'username': u.username,
'first_name': u.first_name,
'last_name': u.last_name,
'is_superuser': u.is_superuser,
'is_staff': u.is_staff,
'groups': [g.name for g in u.groups.all()],
'logout_url': logout_url

})

if admin_url:
user_data.update({
'admin_url': admin_url
})

user_data = JSONRenderer().render(user_data)

serializedGroup = JSONRenderer().render(groupData)
serializedGroup = str(serializedGroup, 'utf-8')

baseurl = "{}/{}".format(
settings.SITE_DOMAIN if hasattr(settings, 'SITE_DOMAIN') else '',
settings.SITE_PREFIX_URL if settings.SITE_PREFIX_URL else ''
)

frontendurl = ',"frontendurl":"{}"'.format(baseurl) if settings.FRONTEND else ''

generaldata = GeneralSuiteData.objects.get()
baseurl = "{}/{}".format(getattr(settings, 'SITE_DOMAIN', ''), getattr(settings, 'SITE_PREFIX_URL') or '')
baseurl = self.request.build_absolute_uri(baseurl) if baseurl.startswith('/') else baseurl

# add baseUrl property
contextData['group_config'] = 'var initConfig ={{ "i18n": {}, "staticurl":"{}", "client":"{}", ' \
'"mediaurl":"{}", "user":{}, "group":{}, "baseurl":"{}", "vectorurl":"{}", ' \
'"proxyurl": "{}", "rasterurl":"{}", "interfaceowsurl":"{}", "main_map_title":{}, ' \
'"g3wsuite_logo_img": "{}", "credits": "{}", ' \
'"version": "{}" {} }}'.\
format(json.dumps(settings.LANGUAGES),
settings.STATIC_URL,
"{}/".format(settings.CLIENT_DEFAULT),
settings.MEDIA_URL,
user_data.decode('UTF-8'),
serializedGroup, baseurl,
settings.VECTOR_URL,
reverse('interface-proxy'),
settings.RASTER_URL,
reverse('interface-ows'),
'"' + generaldata.main_map_title + '"' if generaldata.main_map_title else 'null',
settings.CLIENT_G3WSUITE_LOGO,
reverse('client-credits'),
get_version(),
frontendurl)
contextData['group_config'] = 'var initConfig = ' + JSONRenderer().render({
"i18n": settings.LANGUAGES,
"staticurl": settings.STATIC_URL,
"client": "{}/".format(settings.CLIENT_DEFAULT),
"mediaurl": settings.MEDIA_URL,
"user": {
'i18n': get_language(),
'login_url': login_url,
# logged user
**({
'id': u.pk,
'username': u.username,
'first_name': u.first_name,
'last_name': u.last_name,
'is_superuser': u.is_superuser,
'is_staff': u.is_staff,
'groups': [g.name for g in u.groups.all()],
'logout_url': logout_url
} if not u.is_anonymous else {}),
# admin user
**({
'admin_url': reverse('home')
} if (u in get_users_for_object(self.project, "change_project", with_group_users=True) or u.is_superuser) and reverse('home') else {})
},
"baseurl": baseurl,
"vectorurl": settings.VECTOR_URL,
"proxyurl": reverse('interface-proxy'),
"rasterurl": settings.RASTER_URL,
"interfaceowsurl": reverse('interface-ows'),
"main_map_title": getattr(GeneralSuiteData.objects.get(), 'main_map_title', None),
"g3wsuite_logo_img": settings.CLIENT_G3WSUITE_LOGO,
"credits": reverse('client-credits'),
"version": get_version(),
"frontendurl": baseurl if settings.FRONTEND else '',
# project data
**deepcopy(groupSerializer.data)
}).decode('UTF-8') + ';'

# project by type(app)
if not '{}-{}'.format(kwargs['project_type'], self.project.pk) in list(groupSerializer.projects.keys()):
Expand All @@ -193,7 +167,8 @@ def get_context_data(self, **kwargs):

contextData['page_title'] = '{} | {}'.format(
getattr(settings, 'G3WSUITE_CUSTOM_TITLE', 'g3w - client'),
self.project.title_ur if self.project.title_ur else self.project.title)
self.project.title_ur if self.project.title_ur else self.project.title
)

# choosen skin by user main role
contextData['skin_class'] = get_adminlte_skin_by_user(self.request.user)
Expand Down
8 changes: 4 additions & 4 deletions g3w-admin/editing/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,9 @@ def test_initconfig_plugin_start(self):
jcontent = json.loads(response.content)

# check editing into plugins section
self.assertTrue('editing' in jcontent['group']['plugins'])
self.assertTrue('editing' in jcontent['plugins'])

plugin = jcontent['group']['plugins']['editing']
plugin = jcontent['plugins']['editing']

# check gid and TYPES
self.assertEqual(plugin['gid'], 'qdjango:{}'.format(
Expand Down Expand Up @@ -137,9 +137,9 @@ def test_initconfig_plugin_start(self):
jcontent = json.loads(response.content)

# check editing into plugins section
self.assertTrue('editing' in jcontent['group']['plugins'])
self.assertTrue('editing' in jcontent['plugins'])

plugin = jcontent['group']['plugins']['editing']
plugin = jcontent['plugins']['editing']

# check gid and TYPES
self.assertEqual(plugin['gid'], 'qdjango:{}'.format(
Expand Down
4 changes: 2 additions & 2 deletions g3w-admin/qplotly/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,9 +150,9 @@ def test_initconfig_plugin_start(self):
jcontent = json.loads(response.content)

# check qplotly into plugins section
self.assertTrue('qplotly' in jcontent['group']['plugins'])
self.assertTrue('qplotly' in jcontent['plugins'])

plugin = jcontent['group']['plugins']['qplotly']
plugin = jcontent['plugins']['qplotly']

self.assertEqual(plugin['gid'], 'qdjango:{}'.format(
self.project.instance.pk))
Expand Down
4 changes: 2 additions & 2 deletions g3w-admin/qtimeseries/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ def test_initconfig_plugin_start(self):
jcontent = json.loads(response.content)

# check qplotly into plugins section
self.assertTrue('qtimeseries' in jcontent['group']['plugins'])
self.assertTrue('qtimeseries' in jcontent['plugins'])

plugin = jcontent['group']['plugins']['qtimeseries']
plugin = jcontent['plugins']['qtimeseries']

self.assertEqual(plugin['gid'], 'qdjango:{}'.format(
self.project_raster.instance.pk))
Expand Down
Loading