Meraki API Proxy Service
Meraki API Proxy
Use these endpoints instead of requesting Meraki APIs directly.
- Avoid CORS
- Define default API key
- Log Events
The API key will be defined in the Environment Defaults flow
Example:
https://merakidemo.internetoflego.com/meraki/proxy/organizations
https://merakidemo.internetoflego.com/meraki/proxy/organizations/549236/admins
Sample Web Apps
The sample apps demonstrate how you can build HTML frontend applications to utilize the proxy server.
Update SSID Settings
https://merakidemo.internetoflego.com/meraki/ui/updatessid
Create Network Admin
https://merakidemo.internetoflego.com/meraki/ui/createadmin
More Info
[{"id":"2c750593.98b0d2","type":"inject","z":"c7cddcab.ad2a2","name":"Sets Defaults - Injected at start","topic":"","payload":"Setting Environment Variables","payloadType":"str","repeat":"","crontab":"","once":true,"x":190,"y":180,"wires":[["29373167.4d8f36"]]},{"id":"33f208af.5d493","type":"function","z":"c7cddcab.ad2a2","name":"Set Environment Variables: UPDATE THIS","func":"// ###### User Defined Variables ######\n\n// Meraki Base URL. the `n149` represent the shard number. This is defined to avoid redirect issues.\nconst BASE_URL = \"https://n149.meraki.com/api/v0/\"; \n\nconst API_KEY = msg.apikey; // from credentials node to keep secret\n\n\n\n// ###### Set Flow Context variables ######\n\nflow.set('apiKey', API_KEY); // pulling API key via \"secret\" node. This avoides publishing the API key when sharing the flow\nflow.set('baseUrl', BASE_URL);\n\n\nmsg.payload = \"Meraki API Environment Set\";\nreturn msg;","outputs":1,"noerr":0,"x":560,"y":220,"wires":[["d06fd888.1ec598"]]},{"id":"d06fd888.1ec598","type":"debug","z":"c7cddcab.ad2a2","name":"Flow Env Variables","active":true,"console":"false","complete":"true","x":870,"y":220,"wires":[]},{"id":"c5be6a8c.61c19","type":"comment","z":"c7cddcab.ad2a2","name":"API Key and Environment variables","info":"","x":160,"y":140,"wires":[]},{"id":"29373167.4d8f36","type":"credentials","z":"c7cddcab.ad2a2","name":"API KEY - UPDATE THIS","props":[{"value":"apikey","type":"msg"}],"x":490,"y":180,"wires":[["33f208af.5d493"]]},{"id":"cf27c246.83f54","type":"http in","z":"c7cddcab.ad2a2","name":"","url":"/meraki/proxy/:endpoint(*)","method":"get","upload":false,"swaggerDoc":"","x":190,"y":320,"wires":[["71d1257e.411eb4","6cb71ee2.d71868"]]},{"id":"71d1257e.411eb4","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki [get] request","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":240,"y":360,"wires":[]},{"id":"d917d25b.4455e","type":"http response","z":"c7cddcab.ad2a2","name":"","statusCode":"","headers":{},"x":930,"y":320,"wires":[]},{"id":"27fafca2.b8df9c","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki [post] request","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":240,"y":440,"wires":[]},{"id":"9d93c84b.021528","type":"http response","z":"c7cddcab.ad2a2","name":"","statusCode":"","headers":{},"x":930,"y":400,"wires":[]},{"id":"e6e5aee8.b016f8","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki API [post]","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":890,"y":440,"wires":[]},{"id":"e755df85.06c7c","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki API [get]","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":880,"y":360,"wires":[]},{"id":"6cb71ee2.d71868","type":"function","z":"c7cddcab.ad2a2","name":"Meraki API Options","func":"// Set Variables\nvar apiKey = flow.get('apiKey');\nvar baseUrl = flow.get('baseUrl');\nvar endpoint = msg.req.params.endpoint\nvar query = msg.req.query;\n\n\n// API Call\nmsg.headers = {\n \"X-Cisco-Meraki-API-Key\": msg.req.headers[\"x-cisco-meraki-api-key\"] || apiKey\n};\nmsg.url = baseUrl + endpoint;\n\nif (query){\n \n var queryString = \"\"\n Object.getOwnPropertyNames(query).forEach(\n function (val, idx, array) {\n queryString += (val + '=' + query[val]);\n if (idx < array.length - 1){\n queryString += \"&\";\n }\n }\n );\n msg.url = msg.url +\"?\" + queryString;\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":320,"wires":[["c4bf5dd1.2e84f8","66a8929d.8e52cc"]]},{"id":"c4bf5dd1.2e84f8","type":"http request","z":"c7cddcab.ad2a2","name":"[get] request","method":"GET","ret":"obj","url":"","tls":"","x":710,"y":320,"wires":[["d917d25b.4455e","e755df85.06c7c","1aef23fc.ece43c"]]},{"id":"e8570b71.13f488","type":"http request","z":"c7cddcab.ad2a2","name":"[post] request","method":"POST","ret":"obj","url":"","tls":"","x":720,"y":400,"wires":[["9d93c84b.021528","e6e5aee8.b016f8","1aef23fc.ece43c"]]},{"id":"cc6bf5b.7a71188","type":"function","z":"c7cddcab.ad2a2","name":"Meraki API Options","func":"// Set Variables\nvar apiKey = flow.get('apiKey');\nvar baseUrl = flow.get('baseUrl');\nvar endpoint = msg.req.params.endpoint\nvar query = msg.req.query;\n\n\n// API Call\nmsg.headers = {\n \"X-Cisco-Meraki-API-Key\": msg.req.headers[\"x-cisco-meraki-api-key\"] || apiKey\n};\nmsg.url = baseUrl + endpoint;\n\nif (query){\n \n var queryString = \"\"\n Object.getOwnPropertyNames(query).forEach(\n function (val, idx, array) {\n queryString += (val + '=' + query[val]);\n if (idx < array.length - 1){\n queryString += \"&\";\n }\n }\n );\n msg.url = msg.url +\"?\" + queryString;\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":400,"wires":[["e8570b71.13f488","2c300dce.aae962"]]},{"id":"7cdb8107.c8c708","type":"http in","z":"c7cddcab.ad2a2","name":"","url":"/meraki/proxy/:endpoint(*)","method":"post","upload":false,"swaggerDoc":"","x":190,"y":400,"wires":[["27fafca2.b8df9c","cc6bf5b.7a71188"]]},{"id":"dacfaa4b.deeee","type":"http in","z":"c7cddcab.ad2a2","name":"","url":"/meraki/proxy/:endpoint(*)","method":"put","upload":false,"swaggerDoc":"","x":190,"y":480,"wires":[["de178948.d8abf","217d0197.f09a5e"]]},{"id":"de178948.d8abf","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki [put] request","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":240,"y":520,"wires":[]},{"id":"217d0197.f09a5e","type":"function","z":"c7cddcab.ad2a2","name":"Meraki API Options","func":"// Set Variables\nvar apiKey = flow.get('apiKey');\nvar baseUrl = flow.get('baseUrl');\nvar endpoint = msg.req.params.endpoint\nvar query = msg.req.query;\n\n\n// API Call\nmsg.headers = {\n \"X-Cisco-Meraki-API-Key\": msg.req.headers[\"x-cisco-meraki-api-key\"] || apiKey\n};\nmsg.url = baseUrl + endpoint;\n\nif (query){\n \n var queryString = \"\"\n Object.getOwnPropertyNames(query).forEach(\n function (val, idx, array) {\n queryString += (val + '=' + query[val]);\n if (idx < array.length - 1){\n queryString += \"&\";\n }\n }\n );\n msg.url = msg.url +\"?\" + queryString;\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":480,"wires":[["dd8c3396.e4a1c8","16903965.4838df"]]},{"id":"dd8c3396.e4a1c8","type":"http request","z":"c7cddcab.ad2a2","name":"[put] request","method":"PUT","ret":"obj","url":"","tls":"","x":710,"y":480,"wires":[["8817a852.dd918","e012e5db.408d4","1aef23fc.ece43c"]]},{"id":"8817a852.dd918","type":"http response","z":"c7cddcab.ad2a2","name":"","statusCode":"","headers":{},"x":930,"y":480,"wires":[]},{"id":"e012e5db.408d4","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki API [put]","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":880,"y":520,"wires":[]},{"id":"6e2939b6.32375","type":"http in","z":"c7cddcab.ad2a2","name":"","url":"/meraki/proxy/:endpoint(*)","method":"delete","upload":false,"swaggerDoc":"","x":200,"y":560,"wires":[["c40449c7.c2bc48","f1e64710.329b2"]]},{"id":"c40449c7.c2bc48","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki [delete] request","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":240,"y":600,"wires":[]},{"id":"f1e64710.329b2","type":"function","z":"c7cddcab.ad2a2","name":"Meraki API Options","func":"// Set Variables\nvar apiKey = flow.get('apiKey');\nvar baseUrl = flow.get('baseUrl');\nvar endpoint = msg.req.params.endpoint\nvar query = msg.req.query;\n\n\n// API Call\nmsg.headers = {\n \"X-Cisco-Meraki-API-Key\": msg.req.headers[\"x-cisco-meraki-api-key\"] || apiKey\n};\nmsg.url = baseUrl + endpoint;\n\nif (query){\n \n var queryString = \"\"\n Object.getOwnPropertyNames(query).forEach(\n function (val, idx, array) {\n queryString += (val + '=' + query[val]);\n if (idx < array.length - 1){\n queryString += \"&\";\n }\n }\n );\n msg.url = msg.url +\"?\" + queryString;\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":490,"y":560,"wires":[["87ae7a3d.13379","d2a43092.29b898"]]},{"id":"87ae7a3d.13379","type":"http request","z":"c7cddcab.ad2a2","name":"[delete] request","method":"DELETE","ret":"obj","url":"","tls":"","x":720,"y":560,"wires":[["1e3458ab.57a497","38bb1201.b5c6ce","1aef23fc.ece43c"]]},{"id":"1e3458ab.57a497","type":"http response","z":"c7cddcab.ad2a2","name":"","statusCode":"","headers":{},"x":930,"y":560,"wires":[]},{"id":"38bb1201.b5c6ce","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki API [delete]","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":890,"y":600,"wires":[]},{"id":"66a8929d.8e52cc","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki API [get] options","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":550,"y":360,"wires":[]},{"id":"2c300dce.aae962","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki API [post] options","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":550,"y":440,"wires":[]},{"id":"16903965.4838df","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki API [put] options","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":550,"y":520,"wires":[]},{"id":"d2a43092.29b898","type":"debug","z":"c7cddcab.ad2a2","name":"Meraki API [delete] options","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":540,"y":600,"wires":[]},{"id":"dde1b48c.b87f9","type":"http in","z":"c7cddcab.ad2a2","name":"","url":"/meraki/ui/createAdmin","method":"get","upload":false,"swaggerDoc":"","x":180,"y":860,"wires":[["1807d5cf.2e8c6a"]]},{"id":"bfa7d2dd.8ee498","type":"template","z":"c7cddcab.ad2a2","name":"CSS","field":"payload.style","fieldType":"msg","format":"css","syntax":"mustache","template":"input[type=text], select {\n width: 100%;\n padding: 12px 20px;\n margin: 8px 0;\n display: inline-block;\n border: 1px solid #ccc;\n border-radius: 4px;\n box-sizing: border-box;\n}\n\ninput[type=email], select {\n width: 100%;\n padding: 12px 20px;\n margin: 8px 0;\n display: inline-block;\n border: 1px solid #ccc;\n border-radius: 4px;\n box-sizing: border-box;\n}\n\ninput[type=submit] {\n width: 50%;\n background-color: #4CAF50;\n color: white;\n padding: 14px 20px;\n margin: 8px 0;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n}\n\ninput[type=submit]:hover {\n background-color: #45a049;\n}\n\ndiv form {\n border-radius: 5px;\n background-color: #f2f2f2;\n padding: 20px;\n}\n\n.adminform {\n width: 90%;\n}\n","x":590,"y":860,"wires":[["9c5fba5a.44482"]]},{"id":"1807d5cf.2e8c6a","type":"template","z":"c7cddcab.ad2a2","name":"JQuery","field":"payload.script","fieldType":"msg","format":"javascript","syntax":"mustache","template":"\n$(document).ready(function(e) {\n \n \n $.ajax({\n url: '/meraki/proxy/organizations',\n type: 'get',\n datatype: 'json',\n success: function(data){\n var toAppend = '';\n //if(typeof data === 'object'){\n for(var i=0;i<data.length;i++){\n toAppend += '<option value='+data[i][\"id\"]+'>'+data[i]['name']+'</option>';\n }\n //}\n console.log(\"orgs toAppend\",toAppend);\n $('#orgs').append(toAppend);\n }\n });\n \n $(\"form[ajax=true]\").submit(function(e) {\n \n e.preventDefault();\n \n var form_data = $(this).serialize();\n //var form_url = $(this).attr(\"action\");\n //var form_method = $(this).attr(\"method\").toUpperCase();\n \n var orgId = $(\"#orgs\").val();\n \n $(\"#loadingimg\").show();\n \n $.ajax({\n url: \"/meraki/proxy/organizations/\"+orgId+\"/admins\", //form_url+\"/\"+orgId, \n type: \"post\", \n data: form_data, \n cache: false,\n success: function(data){\n \n // Create simple HTML response\n var response = \n \"<div>\"+\n \"<h2>Created Admin!</h2>\"+\n \"<h4>Name</h4><p>\"+data.name+\"</p>\"+\n \"<h4>E-Mail</h4><p>\"+data.email+\"</p>\"+\n \"<h4>ID</h4><p>\"+data.id+\"</p>\"+\n \"<h4>Tags</h4><p>\"+data.tags+\"</p>\"+\n \"<h4>Org Access</h4><p>\"+data.orgAccess+\"</p>\"+\n \"</div>\";\n \n console.log(\"response: \"+JSON.stringify(data));\n \n \n $(\"#result\").html(response); \n \n $(\"#loadingimg\").hide();\n $( '#createadmin' ).each(function(){\n this.reset();\n });\n },\n error: function(error){\n $(\"#result\").html(error.responseText);\n }\n }); \n \n });\n \n});","x":420,"y":860,"wires":[["bfa7d2dd.8ee498"]]},{"id":"c5cfe4a7.1ef2e8","type":"comment","z":"c7cddcab.ad2a2","name":"Create Admin Form","info":"","x":130,"y":820,"wires":[]},{"id":"d661157f.f1c2b8","type":"http response","z":"c7cddcab.ad2a2","name":"","x":930,"y":860,"wires":[]},{"id":"9c5fba5a.44482","type":"template","z":"c7cddcab.ad2a2","name":"HTML","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n <head>\n <title>Meraki Dasbhoard API - Admin User</title>\n <meta name=\"viewport\" content=\"initial-scale=1.0, user-scalable=no\">\n <meta charset=\"utf-8\">\n <!--\n <script src=\"http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js\"></script>\n -->\n <script\n src=\"https://code.jquery.com/jquery-3.2.1.min.js\"\n integrity=\"sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=\"\n crossorigin=\"anonymous\"></script>\n \n <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css\" integrity=\"sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u\" crossorigin=\"anonymous\"> \n <script>{{{payload.jquery}}}</script>\n <style>{{{payload.style}}}</style>\n </head>\n \n<div class=\"container\">\n <h2>Create a Meraki Dashboard Administrator</h2>\n <h4><a href=\"http://developers.meraki.com\">Meraki Developers Portal</a></h4>\n\n<div class=\"col-md-6\">\n<div class=\"adminform\">\n <form id=\"createadmin\" ajax=\"true\">\n <select id=\"orgs\" name=\"orgs\">\n <option>Select Organization..</option>\n </select>\n <label>Contact Details</label>\n <input type=\"text\" id=\"name\" name=\"name\" placeholder=\"Name\" required=true/>\n <input type=\"email\" id=\"email\" name=\"email\" placeholder=\"E-mail\" required=true/>\n <br>\n\n <label>Organization Permissions</label>\n <select id=\"orgAccess\" name=\"orgAccess\" placeholder=\"Org Access\">\n <option value=\"full\" disabled>full</option>\n <option value=\"read-only\" selected>read-only</option>\n </select>\n \n \n <input type=\"submit\" class=\"button\" value=\"Submit\">\n </form>\n</div>\n</div>\n\n<div class=\"col-md-6\">\n <span id=\"result\"></span>\n</div>\n</div>\n</body>\n</html>\n<script>{{{payload.script}}}</script>","x":770,"y":860,"wires":[["d661157f.f1c2b8"]]},{"id":"68388ae.4fc5bf4","type":"comment","z":"c7cddcab.ad2a2","name":"Sample Web Apps","info":"* Create Network Admin\n\n[/meraki/ui/admins](/meraki/ui/admins)\n\n* Update SSID Settings\n\n[/meraki/ui/updateSSID](/meraki/ui/updateSSID)\n","x":110,"y":780,"wires":[]},{"id":"95bbb07b.c7abd","type":"comment","z":"c7cddcab.ad2a2","name":"API Proxy Endpoints","info":"Use these endpoints instead of requesting Meraki APIs directly.\n\nThe API key will be defined in the Environment Defaults flow\n\nExample:\n```\nhttp://merakidemo.internetoflego.com:1880/meraki/proxy/organizations\n\nhttp://merakidemo.internetoflego.com:1880/meraki/proxy/organizations/{{organizationId}}/admins\n```\n\n","x":110,"y":280,"wires":[]},{"id":"fdb3317d.c6ca3","type":"http in","z":"c7cddcab.ad2a2","name":"","url":"/meraki/ui/updateSSID","method":"get","upload":false,"swaggerDoc":"","x":180,"y":960,"wires":[["48d18a41.63e16c"]]},{"id":"3b0a658b.03808a","type":"template","z":"c7cddcab.ad2a2","name":"VueJS Bulma HTML","field":"payload","fieldType":"msg","format":"handlebars","syntax":"plain","template":"<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <title>SSID Updater</title>\n <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/bulma/0.6.2/css/bulma.min.css\">\n <script defer src=\"https://use.fontawesome.com/releases/v5.0.6/js/all.js\"></script>\n</head>\n\n<body>\n\n <section id=\"app\" class=\"section\">\n <h2 class=\"title is-1\">\n Wireless Settings\n </h2>\n <div class=\"columns\">\n <div class=\"column\">\n <form>\n <div class=\"field\">\n <label class=\"label\">SSID</label>\n <div class=\"control\">\n <div class=\"select\">\n <select v-model=\"ssid\">\n <option v-for=\"ssid in ssids\" :value=\"ssid\">\n {{ssid.name}}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n\n <div class=\"field\">\n <label class=\"label\">Pre-shared Key</label>\n <div class=\"control has-icons-left\">\n <input class=\"input\" type=\"text\" v-model=\"form.psk\"/>\n <span class=\"icon is-small is-left\">\n <i class=\"fas fa-lock\"></i>\n </span>\n </div>\n </div>\n\n <div class=\"field\">\n <label class=\"label\">Enabled</label>\n <div class=\"control\">\n <label>\n <input type=\"radio\" value=true v-model=\"form.enabled\" /> Enabled\n </label>\n <br>\n <label>\n <input type=\"radio\" value=false v-model=\"form.enabled\" /> Disabled\n </label>\n <br>\n </div>\n </div>\n <button class=\"button is-primary\" type=\"submit\" @click.prevent=\"updateSsid\">Update SSID</button>\n\n </form>\n\n \n\n <transition name=\"fade\" mode=\"out-in\">\n <article class=\"message\" :class=\"alert.color\" v-show=\"alert.show\">\n <div class=\"message-header \">\n <p>{{alert.header}}</p>\n </div>\n <div class=\"message-body\">\n {{alert.message}}\n </div>\n </article>\n </transition>\n\n \n </div>\n \n <div class=\"column\" >\n <button class=\"button is-secondary\" v-on:click=\"details = !details\">View Details</button>\n <div v-if=\"details\">\n <h5>\n <h4>SSID Raw Settings</h4>\n <i>Network ID: {{net.id}}</i>\n </h5>\n <pre><code>{{form}}</code></pre>\n </div>\n </div>\n </div>\n </section>\n\n</body>\n\n</html>\n\n<style>\n .margin-bottom {\n margin-bottom: 15px;\n }\n\n .fade-enter,\n .fade-leave-active {\n opacity: 0;\n }\n\n .fade-enter-active,\n .fade-leave-active {\n transition: opacity .5s;\n }\n\n .input {\n width: 300px\n }\n</style>\n\n<script src='https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.15/vue.min.js'></script>\n<script src=\"https://unpkg.com/axios/dist/axios.min.js\"></script>\n<script>\n new Vue({\n el: '#app',\n data: {\n baseUrl: '/meraki/proxy',\n form: {\n name: '',\n enabled: '',\n psk: ''\n },\n alert: {\n show: false,\n header: \"\",\n message: \"\"\n },\n // provided via URL query ?netId=L_1234567890\n net: {\n id: ''\n },\n ssid: {},\n ssids: [],\n details: false\n },\n created: function () {\n // Checks if a custom network ID was provided in the query and sets it. \n if(this.getParameterByName('netId')){\n this.net.id = this.getParameterByName('netId');\n }\n this.fetchSsids();\n },\n watch: {\n ssid: function () {\n // copy ssid settings to form defaults\n this.form = this.ssid;\n }\n },\n methods: {\n getParameterByName: function(name, url) {\n if (!url) url = window.location.href;\n name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\n var regex = new RegExp(\"[?&]\" + name + \"(=([^&#]*)|&|#|$)\"),\n results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n },\n ssidSelected: function (number) {\n console.log(\"SSID selected \" + number);\n this.ssid = this.ssids[number];\n //this.formEnabled = true;\n },\n fetchSsids: function () {\n if (!this.net) {\n return;\n }\n if (!this.net.id) { return }\n var url = this.baseUrl + '/networks/' + this.net.id + '/ssids';\n console.log(url);\n console.log('fetching ssids', this.ssids);\n axios.get(url)\n .then(res => {\n // store ssids\n this.ssids = res.data;\n // assign default ssid if not already selected\n this.ssid = this.ssids[0];\n }, err => {\n console.log('error getting ssids', err);\n });\n },\n updateSsid: function ($index) {\n console.log(\"updating SSID \", this.ssid.name);\n axios.put(this.baseUrl + '/networks/' + this.net.id + '/ssids/' + this.ssid.number, this.form)\n .then(res => {\n console.log('updateSsid res.data', res.data);\n var _this = this;\n this.alert = {\n show: true,\n color: \"is-success\",\n header: \"Success\",\n message: \"The wireless network has been updated.\"\n }\n\n setTimeout(function () {\n _this.alert.show = false;\n }, 3000);\n\n }, err => {\n console.log('put request failed', err);\n const response = err.response\n console.log(response.data.errors)\n var _this = this;\n this.alert = {\n show: true,\n color: \"is-danger\",\n header: \"Error\",\n message: response.data.errors\n }\n setTimeout(function () {\n _this.alert.show = false;\n }, 3000);\n });\n }\n }\n });\n</script>","output":"str","x":720,"y":960,"wires":[["fbae76e8.a9ee8"]]},{"id":"fbae76e8.a9ee8","type":"http response","z":"c7cddcab.ad2a2","name":"","x":930,"y":960,"wires":[]},{"id":"f6e7f6f2.f21358","type":"comment","z":"c7cddcab.ad2a2","name":"Configure SSID","info":"","x":120,"y":920,"wires":[]},{"id":"1aef23fc.ece43c","type":"link out","z":"c7cddcab.ad2a2","name":"API Proxy Events","links":["92519c3b.397"],"x":1055,"y":440,"wires":[]},{"id":"155cb29d.1a9675","type":"comment","z":"c7cddcab.ad2a2","name":"API Event Log","info":"Use this Link node to connect to other flows.","x":1090,"y":400,"wires":[]},{"id":"172fb58d.0234e2","type":"comment","z":"c7cddcab.ad2a2","name":"Event Workflows","info":"","x":100,"y":640,"wires":[]},{"id":"92519c3b.397","type":"link in","z":"c7cddcab.ad2a2","name":"","links":["1aef23fc.ece43c"],"x":75,"y":680,"wires":[["8769f03.34a061","37a9c65d.14c4ea"]]},{"id":"8769f03.34a061","type":"debug","z":"c7cddcab.ad2a2","name":"API Event Received","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":230,"y":720,"wires":[]},{"id":"37a9c65d.14c4ea","type":"function","z":"c7cddcab.ad2a2","name":"Format Event Message","func":"var response = msg.payload;\n\nif(msg.payload.hasOwnProperty('errors')){\n response = msg.payload['errors'][0];\n}\n\nmsg.payload = {\n \"method\": msg.req.method,\n \"url\": msg.req.url,\n \"statusCode\": msg.statusCode,\n \"response\": response\n}\nreturn msg;","outputs":1,"noerr":0,"x":250,"y":680,"wires":[["8c676d73.328eb","347e8d46.0d9ba2"]]},{"id":"8c676d73.328eb","type":"debug","z":"c7cddcab.ad2a2","name":"Format Event Message","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":510,"y":720,"wires":[]},{"id":"347e8d46.0d9ba2","type":"switch","z":"c7cddcab.ad2a2","name":"Filter [get] requests","property":"payload.method","propertyType":"msg","rules":[{"t":"neq","v":"GET","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":490,"y":680,"wires":[["c5b456ab.5febb","fc1279ec.096c3"]]},{"id":"c5b456ab.5febb","type":"debug","z":"c7cddcab.ad2a2","name":"API Change Event Received","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":820,"y":720,"wires":[]},{"id":"fc1279ec.096c3","type":"link out","z":"c7cddcab.ad2a2","name":"API Proxy Change Event","links":["6ab342ef.d3d784"],"x":715,"y":680,"wires":[]},{"id":"44ccd304.f13d44","type":"comment","z":"c7cddcab.ad2a2","name":"Send Event to Messaging Service","info":"This is where you can link change events to a messaging service (i.e. mail, Spark, syslog, etc)","x":890,"y":680,"wires":[]},{"id":"5d3c0913.ed73d","type":"debug","z":"c7cddcab.ad2a2","name":"updateSSID netId","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":710,"y":1000,"wires":[]},{"id":"48d18a41.63e16c","type":"function","z":"c7cddcab.ad2a2","name":"Default Network ID: UPDATE THIS","func":"// Set the default Network ID\nvar netId = 'L_646829496481092083'\n\n// Or supplied by user: \n// https://server/meraki/ui/updatessid?netId=L_646829496481092083\n\n\n\nif (!msg.req.query['netId']){\n msg.statusCode = 302;\n msg.headers = {\n 'Location': msg.req.url + '?netId='+netId\n };\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":460,"y":960,"wires":[["5d3c0913.ed73d","3b0a658b.03808a"]]},{"id":"2b7afa4b.2a3ea6","type":"comment","z":"c7cddcab.ad2a2","name":"Meraki API Proxy","info":"","x":550,"y":100,"wires":[]}]