Routery Turris a jejich ekosystém I

Podobné dokumenty
Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Michal Augustýn Microsoft Most Valuable Professional

Projekt JetConf REST API pro vzdálenou správu

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Doxygen. Jakub Břečka

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

KIV/PIA 2013 Jan Tichava

INFORMAČNÍ SYSTÉMY NA WEBU

UJO Framework. revoluční architektura beans. verze

Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková

BI-AWD. Administrace Webového a Databázového serveru Instalace webového serveru Apache httpd

Stručný úvod pro programátory. Michal Kuchta

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Formuláře. Aby nám mohli uživatelé něco hezného napsat třeba co si o nás myslí!

Bottle -- příklad. Databáze. Testovací data. id Jedinečný identifikátor řádku: Bude typu INT s AUTO_INCREMENT a nastavíme ho jako primární klíč

RESTful API TAMZ 1. Cvičení 11

Úvod do Web Services

Postup. Úvodem. Hlavní myšlenka frameworku. application. system. assets. uploads

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Jaku b Su ch ý 1

Ember.js. Jan Kopřiva, Vojtěch Jasný

Django, 2. cvičení url, views, templates. Úvod

Internet cvičení. ZS 2009/10, Cvičení 4., PHP. Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

SUTOL Symposium 2014

Olga Rudikova 2. ročník APIN

2N Voice Alarm Station

PHP Best Practices. Please try to fit your code to 80 columns. That's decimal 80. A. Morton

Požadavky pro výběrová řízení TerraBus ESB/G2x

MVVM pro desktop i web

Komponentově orientované webové frameworky. Jiří Stránský twitter.com/jistr

Web Services na SOAP

Webové Aplikace (6. přednáška)

Postup objednávky Microsoft Action Pack Subscription

Identifikátor materiálu: ICT-3-55

Proč Angular JS framework?

WWW technologie. HTTP protokol

Novinky v oblasti SAP Mobility. Martin Zikmund, Presale Mobility Platforms Miroslav Řehoř, Account Executive

Vhodnost nasazení jednotlivých webových architektur, sdílení dat, perzistence, webové služby a REST, asynchronnost, messaging

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

Čipové karty Lekařská informatika

Osnova. GIOP a IIOP IDL IOR POA. IDL Klient Server. 2 Historie. 3 Princip a základní pojmy. 4 Implementace. 5 Aplikace CORBA

Pokročilé Webové služby a Caché security. Š. Havlíček

Instalace a konfigurace web serveru. WA1 Martin Klíma

Efektivní vývoj mobilních aplikací na více platforem současně. Mgr. David Gešvindr MCT MSP MCPD MCITP

MODERNÍ WEB SNADNO A RYCHLE

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

DEVFEST ANGULAR 2 WORKSHOP. angular.cz

Koláčky, sezení. Martin Klíma

Zranitelnosti webových aplikací. Vlastimil Pečínka, Seznam.cz Roman Kümmel, Soom.cz

[ASP].NET Core Demystified. Miroslav Holec. Konzultant a lektor [ASP].NET Core.

SYSTÉM PRO KONFIGURACI KOMUNIKAČNÍCH TERMINÁLŮ A VIZUALIZACI STAVOVÝCH DAT Z KOLEJOVÝCH VOZIDEL

Počítačová Podpora Studia. Přednáška 5 Úvod do html a některých souvisejících IT. Web jako platforma pro vývoj aplikací.

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Připojení internetového modulu econet300 Do regulátoru ecomax 810P3-L TOUCH.

Hitparáda webhackingu nestárnoucí hity. Roman Kümmel

Nový Node Monitor. 13. prosince Lukáš Turek Praha12.Net

CineStar Černý Most Praha

Dynamické stránky v praxi. Bedřich Košata

Distribuované systémy a výpočty

AJAX. Dynamické změny obsahu stránek

Formuláře. Internetové publikování. Formuláře - příklad

ASP.NET Web API. Tomáš Herceg Microsoft MVP (ASP.NET)

API pro volání služby kurzovního lístku KB

Technická specifikace Platební brána IBS

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Flask kniha. aneb jak dostat Python na web. Ondrej Sika

Java/QE Akademie - Osnova

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Tvorba informačních systémů

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Web. Získání informace z internetu Grafické zobrazení dat a jejich struktura Rozšíření funkcí pomocí serveru Rozšíření funkcí pomocí prohlížeče

Testování webových aplikací Seznam.cz

HMI * nad webovými technologiemi

RMI Remote Method Invocation

Část IV - Bezpečnost 21. Kapitola 19 Bezpečnostní model ASP.NET 23

Aleš Rybák, Jiří Kadlec. Pluginy budoucnosti

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

Kubernetes Azure Service Fabric

Artlingua Translation API

Obsah. Rozdíly mezi systémy Joomla 1.0 a Systém Joomla coby jednička online komunity...16 Shrnutí...16

PHP a bezpečnost. nejen veřejná

SIMATIC S IT. Micro Automation. Promoters Meeting October Představení CP IT SPIDER CONTROL TELESERVIS. TESTOVACÍ server.

Obsah. Kapitola 1. Předmluva 11 O této knize 13 Konvence...13

Michal Augustýn ALWIL Software Microsoft Most Valuable Professional

Obsah. Úvod 11 O autorovi 11 Koncept knihy 11 Zpětná vazba od čtenářů 12 Zdrojové kódy ke knize 12 Errata 12 ČÁST I VÝVOJ MOBILNÍ APLIKACE

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

Jak importovat profily do Cura (Windows a

GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

Mediareference Vojtěch

Vytváření a použití knihoven tříd

Šifrování Autentizace Bezpečnostní slabiny. Bezpečnost. Lenka Kosková Třísková, NTI TUL. 22. března 2013

Novinky ve Visual Studio Tomáš Kroupa

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Internet Information Services (IIS) 6.0

Tvorba webových stránek

Úvod do programovacích jazyků (Java)

Monitoring ArcGIS systémů Hromadné řízení ArcGIS serverů

Transkript:

Routery Turris a jejich ekosystém I Novinky ve Forisu, jak na pluginy Štěpán Henek stepan.henek@nic.cz 2018 11 16

První commit commit c42a021a7f6249ed31fe1bc87d7e19aeb1ed8479 Author: Jan Čermák <jan.cermak@nic.cz> Date: Thu Oct 24 13:49:34 2013 +0200 first commit of somewhat-stable code (see comment below) The previous development was very hectic and the code was not living in a standard version control repository. Now the changes are starting to be more meaningful (read: half of the files does not change within few minutes) and it makes sense to put it into a Git repository to track the changes. It still does contain a lot of development-related stuff, but most of the code should be "final".

Refaktorování Foris před cca rokem a půl: python2 bottle framework stpl šablony 2 web aplikace (n)uci backend pluginy ve složce

Refaktorování Foris nyní: python2 python3 bottle framework stpl šablony jinja2 šablony 2 web aplikace 1 web aplikace (n)uci backend foris-controller backend pluginy ve složce pluginy jsou pythoní balíky integrace websocketů pro notifikace komunitní překlady přes weblate

Požadavky oddělení backendu a frontendu dobře definované API s kontrolou validity nahraditelnost komponent možnost běhu na více systémech (OpenWRT, Debian,... ) možnost využití různých frontendu (web, mobilní aplikace)

Architektura

Architektura 1 Message bus předávání zpráv (požadavek, odpověď, notifikace) více implementací ubus unix-socket (spíš testovací)

Architektura 1 Message bus předávání zpráv (požadavek, odpověď, notifikace) více implementací Controller ubus unix-socket (spíš testovací) přijímá požadavky na message busu posílá odpovědi do message busu posílá notifikace do message busu kontroluje schéma zpráv umí použít víc backendů OpenWRT mock (testovací backend)

Architektura 2 Websocket server přijímá notifikace z message busu přeposílá přijaté notifikace přes websockety klientům autentizace řešená přes session objekt na ubusu

Architektura 2 Websocket server přijímá notifikace z message busu přeposílá přijaté notifikace přes websockety klientům autentizace řešená přes session objekt na ubusu Web server webová aplikace pod lighttpd používá framework bottle (views, middleware,...) obsluhuje webové požadavky posílá požadavky do message busu čeká na odpovědi z message busu autentizace klientů přes sessiony z ubusu

Architektura 3 Prohlížeč posílá HTTP požadavky Webserveru připojuje se na Websocket server a čte z něj notifikace pamatuje si cookie, kterou posílá do požadavků

Architektura 3 Prohlížeč posílá HTTP požadavky Webserveru připojuje se na Websocket server a čte z něj notifikace pamatuje si cookie, kterou posílá do požadavků Uživatel žasne jak to celé (ne)funguje stěžuje/chválí nás na fóru píše nám milé zprávy na podporu

Dlouho trvající požadavky Jak to řešit? prohlížeč čeká javascript v prohlížeči čeká polling v javascriptu (Are we there yet?)

Dlouho trvající požadavky Jak to dělá Foris:

Dlouho trvající požadavky Jak to dělá Foris: 1 browser [HTTP ajax request] webserver 2 webserver [API request] controller 3 webserver [syncid in API reply] controller 4 browser [syncid in json] webserver

Dlouho trvající požadavky Jak to dělá Foris: 1 browser [HTTP ajax request] webserver 2 webserver [API request] controller 3 webserver [syncid in API reply] controller 4 browser [syncid in json] webserver 5...

Dlouho trvající požadavky Jak to dělá Foris: 1 browser [HTTP ajax request] webserver 2 webserver [API request] controller 3 webserver [syncid in API reply] controller 4 browser [syncid in json] webserver 5... 6 websocketserver [syncid + progress] controller 7 browser [syncid + progress] websocketserver

Dlouho trvající požadavky Jak to dělá Foris: 1 browser [HTTP ajax request] webserver 2 webserver [API request] controller 3 webserver [syncid in API reply] controller 4 browser [syncid in json] webserver 5... 6 websocketserver [syncid + progress] controller 7 browser [syncid + progress] websocketserver 8...

Dlouho trvající požadavky Jak to dělá Foris: 1 browser [HTTP ajax request] webserver 2 webserver [API request] controller 3 webserver [syncid in API reply] controller 4 browser [syncid in json] webserver 5... 6 websocketserver [syncid + progress] controller 7 browser [syncid + progress] websocketserver 8... 9 websocketserver [syncid + finished] controller 10 browser [syncid + finished] websocketserver

Vývoj pluginů dva projekty - backend a frontend část typické pojmenování: foris-controller-jmeno-module (backend) foris-jmeno-plugin (frontend) vzorové projekty: https://gitlab.labs.nic.cz/turris/foris-controller/tree/master/doc/examples https://gitlab.labs.nic.cz/turris/foris/tree/master/examples používat virtualenv python <= 3.6.0

Modul do Controlleru Skládá se z: pythoního kódu jsonschémata testů

Modul do Controlleru Skládá se z: pythoního kódu jsonschémata testů Funkce: přijímá požadavky, které se ho týkají sahá do systému (když je potřeba) odpovídá na požadavky posílá notifikace

Modul do Controlleru - Formát zpráv { "module": "sample", "action": "get_slices", "type": "request" } { } { } "module": "sample", "action": "get_slices", "type": "reply", "data": {...} "module": "sample", "action": "set_slices", "type": "notification", "data": {...}

Modul do Controlleru - Validace přes jsonschema { "oneof": [ { "description": "Request to Get number of slices", "properties": { "module": {"enum": ["sample"]}, "kind": {"enum": ["request"]}, "action": {"enum": ["get_slices"]} }, "additionalproperties": false },] } https://json-schema.org/understanding-json-schema/ https://gitlab.labs.nic.cz/turris/foris-schema

Modul do Controlleru - Rozcestník a Handlery Rozcestník (hlavní modul) přijímá příchozí zprávy (jednotné API) přehazuje je jednotlivým handlerům

Modul do Controlleru - Rozcestník a Handlery Rozcestník (hlavní modul) přijímá příchozí zprávy (jednotné API) přehazuje je jednotlivým handlerům Handler existují různé handlery (např. pro OpenWRT) volají se z něj funkce, které něco dělají na systému čtení/aktualizace nastavení (UCI) start/restart/stop služeb pouštění příkazů

Modul do Controlleru - Backend funkce Dají se využít z ruzných handlerů. Např. zpracování výstupu z příkazu uptime bude stejné jak na Debianu, tak na OpenWRT. cmdline - wrappery nad voláním příkazů, včetně async příkazů uci - wrappery nad čtení/nastavování uci files - wrappery nad čtením souborů services - wrappery správou služeb navíc má každý modul má svou vlastní sadu funkcí

Modul do Controlleru - Příklad Rozcestníku class SampleModule(BaseModule): def action_get_slices(self, data): return {"slices": self.handler.get_slices()} @wrap_required_functions([ 'get_slices', ]) class Handler(object): pass

Modul do Controlleru - Příklad Handleru from.. import Handler logger = logging.getlogger( name ) class OpenwrtSampleHandler(Handler, BaseOpenwrtHandler): uci = SampleUci() @logger_wrapper(logger) def get_slices(self): return OpenwrtSampleHandler.uci.get_slices()

Modul do Controlleru - Funkce backendu from foris_controller_backends import uci class SampleUci(): def get_slices(self): with uci.ucibackend() as backend: data = backend.read("sample") return int(uci.get_option_named( data, "sample", "data", "slices"))

Plugin do Forise Skládá se z: pythoního kódu statických/generovaných souborů (sass/css/js) jinja2 šablon (html/js)

Plugin do Forise Skládá se z: pythoního kódu statických/generovaných souborů (sass/css/js) jinja2 šablon (html/js) Co vlastně dělá: obsluhuje HTTP požadavky volá API backendu skládá dohromady HTML skládá dohromady javascript

Plugin do Forise - Python definice hlavního formuláře výběr šablony, která se použije pořadí v hlavním menu obsluhování použadavků (GET/POST) hlavního formuláře custom akcí ajax volání volání backend příkazů include assetů

Plugin do Forise - Kód pluginu class SamplePlugin(ForisPlugin): PLUGIN_NAME = "sample" # also shown in the url DIRNAME = os.path.dirname(os.path.abspath( file )) PLUGIN_STYLES = ["css/sample.css"] PLUGIN_STATIC_SCRIPTS = ["js/sample.js"] PLUGIN_DYNAMIC_SCRIPTS = ["sample.js"] def init (self, app): super(). init (app) add_config_page(samplepluginpage)

Plugin do Forise - Kód stránky class SamplePluginPage(ConfigPageMixin, SamplePlugin...): slug = "sample" menu_order = 90 template = "sample/sample" template_type = "jinja2" def save(self, *args, **kwargs): return super().save(*args, **kwargs) def render(self, **kwargs): kwargs['plugin_name'] = SamplePlugin.PLUGIN_NAME kwargs['plugin_styles'] = SamplePlugin.PLUGIN_STYLES kwargs['plugin_static_scripts'] = SamplePlugin.PL... kwargs['plugin_dynamic_scripts'] = SamplePlugin.P... return super().render(**kwargs)

Plugin do Forise - Kód formuláře def get_form(self): data = backend.perform("sample", "get_slices") if self.data: data.update(self.data) form = fapi.forisform("sample", data) section = form.add_section(name="main", title=_("...")) section.add_field(number, name="slices", label=_("..."), required=true, validators=validators.inrange(2, 15)) def form_cb(data): res = current_state.backend.perform("sample", "set_slices", {"slices": int(data["slices"])}) return "save_result", res form.add_callback(form_cb) return form

Plugin do Forise - Šablona {% extends 'config/base.html.j2' %} {% block config_base %} <div id="page-sample-plugin" class="config-page"> <form action="{{ request.fullpath }} " method="post"...> <input type="hidden" name="csrf_token" value="..."> {% for field in form.active_fields %} {% include '_field.html.j2' %} {% endfor %} <button type="submit" name="send"> {% trans %} Update configuration{% endtrans %} </button> </form> </div> {% endblock %}

Výzvy

Výzvy nový bus (přístupný ze sítě, používání vzdálených frontendů)

Výzvy nový bus (přístupný ze sítě, používání vzdálených frontendů) lepší integrace Forise s podporovanými aplikacemi (nextcloud)

Výzvy nový bus (přístupný ze sítě, používání vzdálených frontendů) lepší integrace Forise s podporovanými aplikacemi (nextcloud) přepis Forise (nahrazení Bottlu za Flask, bootstrap)

Výzvy nový bus (přístupný ze sítě, používání vzdálených frontendů) lepší integrace Forise s podporovanými aplikacemi (nextcloud) přepis Forise (nahrazení Bottlu za Flask, bootstrap) testy pro Forise (controller jich má poměrně dost)

Výzvy nový bus (přístupný ze sítě, používání vzdálených frontendů) lepší integrace Forise s podporovanými aplikacemi (nextcloud) přepis Forise (nahrazení Bottlu za Flask, bootstrap) testy pro Forise (controller jich má poměrně dost) nezbláznit se z toho

Odkazy https://gitlab.labs.nic.cz/turris/foris-demo https://gitlab.labs.nic.cz/turris/foris-controller/tree/master/doc/examples https://gitlab.labs.nic.cz/turris/foris/tree/master/examples https://bottlepy.org/docs/dev/ https://json-schema.org/understanding-json-schema/ http://jinja.pocoo.org/docs/2.10/

Díky a pozornost Díky a pozornost Otázky? Štěpán Henek stepan.henek@nic.cz