Subtitle: Call custom webpage from application section

Version and revision: V1.0 / R 0.0.

For Nethserver 7.7 cockpit edition

Accessible to: Novice / Beginner

Date of presentation: Released on 2019-11-24

This how to describes how you can add a custom link to a webpage to the application section in cockpit. In this example I'll add a link to a software called “Omada Controller” which is a webbased application to controll and configure TP-Link Wlan-accesspoint. It should be easy to adapt that to your own needs. At the end you have a link like it's shown in the example below:

1. Place a file called read in /usr/libexec/nethserver/api/nethserver-omada and give right 755 (chmod a+x)

 #!/bin/bash
 #
 # Copyright (C) 2018 Nethesis S.r.l.
 # http://www.nethesis.it - nethserver@nethesis.it
 #
 # This script is part of NethServer.
 #
 # NethServer is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation, either version 3 of the License,
 # or any later version.
 #
 # NethServer is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with NethServer.  If not, see COPYING.
 #
 
 input=$(cat)
 action=$(jq -r .action <<<"$input")
 protocol=$(jq -r .location.protocol <<<"$input")
 host=$(jq -r .location.hostname <<<"$input")
 
 if [[ $action == "app-info" ]]; then
     # static url 
     # printf '{"url":"https://nethserver.domain.tld:8043/login"}'
     
     # dynamic url 
     printf '{"url":"%s"}' "${protocol}//${host}:8043/login"
 fi 
chmod a+x  /usr/libexec/nethserver/api/nethserver-omada

2. Place a file called nethserver-omada.json in /usr/share/cockpit/nethserver/applications (please change “omada” to your needs).

In the file, please also make any changes to your needs.

 {
   "id": "nethserver-omada",
   "name": "TP-Link Omada Webinterface",
   "summary": "TP-Link Omada Controller Webinterface",
   "description": "TP-Link Omada Controller Webinterface",
   "url": "",
   "provides": ["nethserver-omada"],
   "release": {
   "version": "1.0"
   },
  "author": {
     "name": "R. Jeckel"
   },
   "infoapi": {
     "path": "nethserver-omada/read"
   },
   "icon": "logo.png",
   "external": true
 }

You can test your json-file with

 cat /path/to/jsonFile.json | jq

3. Place a file called 50nsapinethserver_omada in /etc/sudoers.d (again please change “omada” to your needs, also in the file)

 #
 # nsapi_nethserver_omada
 #
 Cmnd_Alias NSAPI_NETHSERVER_OMADA = \
      /usr/libexec/nethserver/api/nethserver-omada/read
 
 Defaults!NSAPI_NETHSERVER_OMADA !requiretty

4. Place manifest.json with logo.png in /usr/share/cockpit/nethserver-omada (again please change “omada” to your needs)

 {
   "version": 0,
   "content-security-policy": "style-src 'self' 'unsafe-inline'"
 }

5. Restart cockpit with

 signal-event nethserver-cockpit-update

Last but not least, I want to say thanks to stephdl, who helped me with this guide with his expertize on webdevelopment!