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

[feature] Add API endpoint to return device group info based on the certificate common name #491

Closed
2 of 4 tasks
nemesifier opened this issue Jun 13, 2021 · 2 comments · Fixed by #500
Closed
2 of 4 tasks
Assignees

Comments

@nemesifier
Copy link
Member

nemesifier commented Jun 13, 2021

Follow up to #203.

We need an API endpoint that is called by captive portals like PfSense to determine the captive page defined in the group meta data of OpenWISP.
The API endpoint will return the device group infomation, including the meta data (which in these legacy use cases will contain the captive page URL), given two input parameters: organizaton slug and certificate common name.

We need to implement this feature to provide backward compatibility to installations using OpenWISP 1.

REST API

  • Add a special API endpoint which returns the group information based on two input parameters: organization_slug and common_name; in short, given an organization slug and common name, we should find the x509 certificate with that common name and organization, find which vpnclient is associated to and hence find the device and return its group, if anything fails we'll return 404 a specific device based on the common name of a certificate associated as VPN client to a device, eg:
    /api/v1/controller/{organization_slug}/certificate/{common_name}/group/, we need to filter by organization becasue the same common_name could be in different orgs.
  • We need to cache the response of this API endpoint because it will be called whenever a user connects to the public wifi service, we need to invalidate the cache whenever the group is saved/deleted, the certificate is saved/deleted or when the device group changed signal built in [controller/feature] Add DeviceGroup model #203 is emitted, explained in plain English: we have to invalidate the cache either when the group info is changed or the group is deleted, the group to which a device is assigned is changed or when the certificate is changed (eg: renewed) or deleted.

Other cleanup

  • Upon closer inspection I found out that Cert.common_name and Ca.common_name are not unique per organization so in this patch we should also change these two models so that thefields common_name and organization are flagged as unique_together (there should be a new way to do this in django)
  • Write a test which tries to create duplicates of certificates and a CAs having organization=None and a specific common_name, I am not sure if passing organization=None would skip the unique together check and we have to double check this
@nemesifier nemesifier changed the title [feature] Add API endpoint to return device group info based on a common name [feature] Add API endpoint to return device group info based on the certificate common name Jun 13, 2021
@nemesifier
Copy link
Member Author

PS: the organization passed as input cannot be only one unfortunately, we'll have to change this a bit to allow passing multiple organization slugs, look in all of them and return the first occurrence

@pandafy
Copy link
Member

pandafy commented Jul 8, 2021

We need to cache the response of this API endpoint because it will be called whenever a user connects to the public wifi service, we need to invalidate the cache whenever the group is saved/deleted, the certificate is saved/deleted or when the device group changed signal built in [controller/feature] Add DeviceGroup model #203 is emitted, explained in plain English: we have to invalidate the cache either when the group info is changed or the group is deleted, the group to which a device is assigned is changed or when the certificate is changed (eg: renewed) or deleted.

Can we use a index table in database to cache this?
If we use combination of organization slugs and common name for cache key, we won't know what key to use for invalidation when either of organization, certificate or device group changes.

pandafy added a commit that referenced this issue Jul 8, 2021
pandafy added a commit that referenced this issue Jul 8, 2021
pandafy added a commit that referenced this issue Jul 15, 2021
pandafy added a commit that referenced this issue Jul 26, 2021
nemesifier pushed a commit that referenced this issue Jul 27, 2021
…ertificate common name #491

- [change!] Common name and Organization unique together for Cert and Ca models
- [deps] Added shortuuid~=1.0.1
- [feature] Added API endpoint to return device group using certificate common name #491

Closes #491
pandafy pushed a commit to pandafy/openwisp-controller that referenced this issue Apr 7, 2022
- Chnaged the endpoints pattern
- Removed tests for `DeviceLocation` endpoints
- Updated docs with new pattern of endpoints

[api] Updated the `devicelocation` view in `GEO` app endpoint

[api] Added the delete option for the `device_location` endpoint

[docs] Added `delete` in the device location API documentation

[fix] Context variable follows template order openwisp#484

If two or more applied templates have "default_values" with same keys,
then the context variables of the template with comes later in order
will be used.

Fixes openwisp#484

Co-authored-by: Federico Capoano <[email protected]>

[feature] Added support for ED25519 SSH keys

Additionally shows a validation error if the private key
being inserted during credential creation is invalid or
not supported (supporting only RSA and ED25519 since they're
the widely accepted secure algorithms).

[feature] Allow searching for address in Device Admin

[change] Execute credentials auto_add in the background openwisp#479

Closes openwisp#479

[feature] Added device groups openwisp#203

A group can be specified for devices, i.e. DeviceGroup.
DeviceGroup can contain metadata about group of devices in JSON format.
JSONSchema can be set systemwide for validating and building the UI users will use to fill the metadata.

Added REST API endpoint for listing, creating and retrieving DeviceGroups.

Implements and closes openwisp#203

[feature] Added connection app REST API  openwisp#464

Closes openwisp#464

[deps] Increased min django-flat-json version to 0.1.3 openwisp#502

Fixes openwisp#502

[chores] Admin improvements for groups

- added group filter in device list
- added description and meta_data to search_fields

[feature] Added REST API for PKI app (certs and CAs) openwisp#462

Implements and closes openwisp#462

[feature] Add API endpoint to return device group info based on the certificate common name openwisp#491

- [change!] Common name and Organization unique together for Cert and Ca models
- [deps] Added shortuuid~=1.0.1
- [feature] Added API endpoint to return device group using certificate common name openwisp#491

Closes openwisp#491

[fix] Fixed JSONSchema editor select2 fields getting disabled openwisp#505

The issue arose because the JSON Schema library uses selec2('enable') for
enabling or disabling select2 fields. According to the "Migrating from 3.5" section
in select2 documentation, select2('enable') has been deprecated.
The solution is to override the methods using it to simply modify
select2.disabled property.

Closes openwisp#505

[fix] Fixed advanced editor quirks openwisp#506

Bugs fixed:
- Executing a command, would raise a 'Invalid JSON' alert in the
  advance mode of the configuration even if the JSON is valid
- The device page deals with two schema and the container for
  advance mode editor used 'id="advanced_editor"'. Fetching the advance
  mode editor using the 'id' always returned the first occurence
  (advance mode editor of configuration). This used to create multiple
  advance mode editor DOM elements inside the container all of which
  had their own event listeners. Hence, full screen toggling was not
  working properly.

Closes openwisp#506

[fix] JSONSchema Editor maxlength modification handle non-existent schema objects openwisp#353

Related to openwisp#353

[change] Switch to new nav menu openwisp#472

Closes openwisp#472

[api] Re-introduced `DeviceLocation` endpoints

[api] Upgraded existing Device Location endpoint

[tests] Added tests for device location endpoint

[change] Minor code improvements

[tests] Added tests for changing location detail and coordinates

[api] Added support of creating a floorplan along with location

[api] Added update method to `Location` serializer

[api] Added support of creating/updating floorplan with location

[change] Added option to change device location detail with token

[tests] Added tests for create location endpoint of indoor type

[change] Minor bug fix and added tests for the endpoints

[tests] Minor typo fix

[change] Improved docs & optimized number of queries

[docs] Improvement in the docs related to devicelocation endpoint

[api] Fixed device location endpoint added TokenAuthentication

[docs] Updated info on how to use the device location endpoints

[change] Added tests and improved devicelocation permission logic

[change] Fixed the validation error raised due to image format

[change!] Removed the creation of devicelocation with GET request

[fix] Included PKI API URLs to `controller.urls` file openwisp#511

Closes openwisp#511

[chores] Ensure Device.group.verbose_name is lowercase for consistency

[fix] Fixed 0010 pki migration when cert serial_number is None

[fix] CommandFailedException: ensure error message is always present

If a command with suppressed output failed, CommandFailedException
would be raised with an emptry string as argument, which makes
debugging issues really hard.

In this cases we shall instantiate the exception with the same
message passed to the log.

[fix/tests] TestSsh: fixed assert_has_calls not being called

I found out these assertions were not being called while working
on the previous commit.

[fix] Registered menu group in connection app openwisp#512

Closes openwisp#512

[fix] Fixed new theme issues in config editor and command inputs

Co-authored-by: Federico Capoano <[email protected]>

[test] Fixed failing tests due to openwisp-utils menu changes

Co-authored-by: Pedro Peña <[email protected]>

[docs] Updated docs about limitations of device location endpoint

[tests] Fixed tests causing CI to fail
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
2 participants