Computerbase
Computerbase
Introductie
Project Computerbase is een project om informatie te vergaren over het aantal logins, gebruikers, computers en image-versies op computer van het Bonhoeffercollege en om ervaring op te doen met het combineren van Python, MySQL en wxPython. Hierbij komen diverse elementen en technologieën samen, waaronder Python, Delphi, MySQL, UDP-socketprogrammering, HTML, CSS, PHP en KIXtart.
Herontwerp van de applicatie
De databasestructuur gaat nu uit van 3 tabellen voor het opslaan van computer, gebruiker, ip, image en tijd. De talkerapplicatie en listenerapplicatie zijn geschreven in Python. Met de module py2exe wordt de talkerapplicatie gecompileerd tot een zelfstandige executable, die kan worden uitgevoerd op computer zonder python-installatie.
Schematisch ontwerp
Gebruikers loggen aan op computers. Informatie over gebruiker, computer, versie van het besturingssysteemimage en IP worden gelogd in een database. Een clientapplicatie vraagt vervolgens gegevens op uit deze database.
Een van de keuzen bij start van dit project is om eerst een werkend systeem te maken met simpele databaseontwerp. Later kan het databaseontwerp worden uitgebreid.
Speciale aandacht moet worden gegeven aan het beveiligen van de gegevens. De database bevat privacy-gevoelige gegevens over naam, plaats en tijd van aanmelding. Toegang tot gegevens is selectief gemaakt met behulp van gebruikersnaam/wachtwoord of ip-adres.
Details
Informatie over het inloggen door gebruikers wordt gestuurd door een Delphi applicatie door middel van UDP-pakketten naar een centrale host. De centrale host draait een Python-script, die deze pakketten ontvangt en opslaat in een MySQL-database op de databasehost. De database is uit te lezen middels een dynamische webapplicatie geschreven in PHP. De database is ook uit te lezen in een python applicatie.
Databasedefinitie
Dit is databasestructuur v2 ( knip en plak SQL )
USE computerbase; DROP TABLE computer; DROP TABLE gebruiker; DROP TABLE login; CREATE TABLE computer( coid serial, conaam varchar(20) not null, coimage varchar(20), coip varchar(15) not null unique, primary key(coid) ); CREATE TABLE gebruiker( geid serial, genaam varchar(20) not null unique, gelogins int unsigned, primary key(geid) ); CREATE TABLE login( loid serial, logenaam varchar(20) not null, loconaam varchar(20) not null, loevent varchar(20), lotijd datetime, primary key(loid) );
.htaccess:
order deny,allow deny from all allow from 172.23.0.0/22 allow from 10.251.110.0/24 ErrorDocument 403 "Je krijgt lekker geen toegang!"
Stand van zaken
Het werkt nu op zowel een computer thuis als op school. Op school wordt MySQL op Amber gebruikt, thuis MySQL op Atlas. Database is ingericht volgens structuur v2.
Programma Talker.py zendt boodschappen via UDP naar de UDP-ontvanger; dit programma wordt gestart vanuit het loginscript. Talker.py wordt gecompileerd met behulp van de py2exe module tot een zelfstandig werkend executable. De bestanden buildexe.cmd en setup.py assisteren daarbij. Programma DbListener.py luistert en ontvangt UDP-boodschappen van Talker.py en bewaart de informatie in de MySQL-database. Nieuw hierin is dat het programma met de MySQL database communiceert via een class. Een PHP-pagina in PHP\v2\index.php toont de ruwe inhoud van de database op een webpagina. Programma LuisterGUI.py is een script-in-wording dat via de wxPython GUI en MySQL queries de inhoud van de tabel laat zien. Ontwerpeisen: export naar csv, kolommen sorteren, zoek op sleutelwoord. CreeerDatabaseV2.py moet een programma zijn dat alle voorbereiding uitvoert op MySQL, zoals database creeren en tabellen definieren, maar is onnodig omdat de SQL die de tabellen aanmaakt zo makkelijk in een terminal geplakt kan worden vanuit notities.txt-bestand.
Op school draait DbListener.py op Magenta als applicatie op het bureaublad van de consolegebruiker, maar die heeft het probleem dat het programma "verdwijnt" na enige tijd. Beter is het om het programma te draaien als service op Windowsserver Magenta of misschien in screen op Linuxserver Amber.
--- 20090505 v2.2 website authenticatie
Nieuw is:
- eindelijk instelbare meta refresh, opgeslagen in sessievariabelen.
- authorisatie in diverse zelfdefinieerbare niveaus opgeslagen in tabel
machtiging: niet-aangemeld, gebruiker, beheerder, enz. Zet bovenaan de pagina [ if (!check_auth_user($_SESSION["gebruiker"], "beheerder")) return; ] om de machtiging te controleren.
- online editor
- instelbare LIMIT
DROP TABLE webtoegang; DROP TABLE webgebruiker; DROP TABLE machtiging; CREATE TABLE webgebruiker( wegebruiker varchar(20) not null, wewachtwoord varchar(32) not null, wenaam varchar(50), wemail varchar(64), primary key(wegebruiker) ); CREATE TABLE machtiging( magebruiker varchar(20) not null, mamachtiging varchar(16) ); INSERT INTO webgebruiker (wegebruiker,wewachtwoord,wenaam,wemail) VALUES ('paul', MD5('geheimwachtwoord'), 'Paul Wiegmans', 'p.wiegmans@bonhoeffer.nl'); INSERT INTO machtiging (magebruiker,mamachtiging) VALUES ('paul','gebruiker'); INSERT INTO machtiging (magebruiker,mamachtiging) VALUES ('paul','beheerder');
Aanmaken van nieuwe webgebruiker
Zie de meest recente documentatie in notities in de broncodefolder H:\python\2011\computerbase (\\bcfs1\groups_m\development)
INSERT INTO webtoegang ( wegebruiker,wewachtwoord,wenaam,wemail,wetoegang) VALUES ('bezoeker', MD5('geheim'), 'Bezoeker','bezoeker@bonhoeffer.nl','gebruiker');
URLs
- http://sikkepitje.nl/phpmyadmin
- http://sikkepitje.nl/~paul/php/computerbase monitorpagina
- http://amber.bonhoeffer.nl/~paul/php/adminmyphp
- http://amber.bonhoeffer.nl/~paul/php/computerbase
Documentatie
- http://nl.php.net/manual/en/ : PHP5 Manual
- http://dev.mysql.com/doc/refman/4.1/en/index.html : MySQL 3.23, 4.0, 4.1 Reference Manual
- http://mysql-python.sourceforge.net/ : Mysql-python projectpagina
- http://www.wxpython.org/
- http://wiki.wxpython.org/AnotherTutorial : Another wxPython tutorial
- http://zetcode.com/wxpython/ : Zetcode wxPython Tutorial (beste!)
- http://www.kitebird.com/articles/pydbapi.html : Tutorial met Python en MySQLdb
- http://www.evolt.org/article/Socket_Programming_in_Python/17/60276/ : UDP socket programming in Python
- py2exe
- coolpython.nl - Python Windows Services
- Essien Blog = Python Windows Services
- Chris Python Page bevat een script daemon.py om een pythonscript als daemon te draaien op *nix (google: daemonize python)
Zie ook
Files
- Zie de python projectdirectory
- Zie de Delphi projectdirectory