Inhaltsverzeichnis
Openantrag
Die folgenden Informationen sind unsortiert und das Ergebnis ersten Testens. Keine Garantie, daß am Ende etwas sinnvolles herauskommt.
Bereitgestellte Funktionen:
- RSS-Feed
- Schnittstelle zu Twitter
- Benachrichtigungen
- Pushbullet
- Pushover
Windows
Es wird Visual Studio 2017 Community verwendet. RavenDB in der Version 2.5. Ziel ist es das ganze erst einmal lauffähig zu bekommen. Anschließend dann verwenden aktueller Versionen der verwendeten Komponenten.
Nachdem die alte Konfiguration läuft, geht es an die Aktualisierung:
- RavenDB 4.0.5
- Datenbank aus 2.5 kann über 3.5 nach 4 konvertiert werden
- Anwendung muß auf .NET 4.6.1 umgestellt werden
- Es gibt einige Änderungen, der Programmcode muß angepaßt werden. Insgesondere gibt es keinen Connectionstring mehr.
RavenDB
Version 2.5:
- ZIP herunterladen
- auspacken
- starten
- Datenbank anlegen
- Dokument anlegen
Version 4.0.5:
- herunterladen Version 4.0.5 (Original war Version 2.5)
- auspacken
- starten über die Powershell (Version 4 benötigt)
- Powershell Ausführungsrichtlinie: Set-ExecutionPolicy Unrestricted
- Für Entwicklung: run.ps1 starten
- Server: 127.0.0.1:8080
- Datenbank OpenAntrag anlegen
- Neues Dokument anlegen
OpenAntrag
Berechtigungen
Es gibt
- Einen Administrator
- Normale Benutzer
ID
User-Key
Benutzername
EMail
API-Key
Pushover-User-Key
Die Berechtigungen werden aus der Datei Users.xml
gelesen.
Damit das ganze funktioniert wird noch ein Membership Provider benötigt.
Dies ist ein eigenständiges Projekt.
Siehe auch:
Über ASP.NET Xml Security Providers
Der dort beschriebene Code muß geringfügig angepaßt werden, damit er für unsere Situation paßt.
Insbesondere ist ein Verweis auf System.Web.ApplicationServices
erforderlich.
In ReadMembershipDataStore
muß der providerUserKey (ein eindeutiger Schlüssel) aus der Users.xml
übernommen werden. Wir verwenden UserID
dazu:
MembershipUser user = new MembershipUser( Name, // Provider name node["UserName"].InnerText, // Username node["UserID"].InnerText, // providerUserKey node["EMail"].InnerText, // Email String.Empty, // passwordQuestion node["Password"].InnerText, // Comment true, // isApproved false, // isLockedOut DateTime.Now, // creationDate DateTime.Now, // lastLoginDate DateTime.Now, // lastActivityDate DateTime.Now, // lastPasswordChangedDate new DateTime(1980, 1, 1) // lastLockoutDate );
- Users.xml
<?xml version="1.0" encoding="utf-8"?> <Users> <User> <UserName>Bob</UserName> <UserID>bob</UserID> <Password>geheim</Password> <EMail>bob@piratenpartei-sh.de</EMail> <Roles>testparlament</Roles> </User> <User> <UserName>Alice</UserName> <UserID>alice</UserID> <Password>geheim</Password> <EMail>alice@piratenpartei-sh.de</EMail> <Roles>admin,testparlament/Roles> </User> </Users>
Rollen:
admin
ist eine spezielle Rolle- Jedes Parlament (
representations.key
) entspricht einer Rolle
Anwendungseinstellungen
Settings in web.config
Setting | Datentyp | Standard | Beschreibung |
---|---|---|---|
PushbulletApiUrl | String | ||
PushbulletAccessToken | String | ||
PushoverApiUrl | String | ||
PushoverAppToken | String | ||
PushoverUserKey | String | ||
TwitterConsumerKey | String | ||
TwitterConsumerSecret | String | ||
TwitterAccessToken | String | ||
TwitterAccessTokenSecret | String | ||
TwitterRequestUrl | String | ||
PiratlyApiKey | String | ||
SendMail | Boolean | False | |
InfoMailCC | String | ||
MailSender | String | ||
SendTweets | Boolean | False | |
SendPushoverNotification | Boolean | False | |
DefaultPagerListPageSize | Integer | 25 | |
DefaultPagerListWingLength | Integer | 10 | |
RandomKey_AllowCapitalLetters | Boolean | ||
RandomKey_Letters | String | ||
RandomKey_Numbers | String | ||
NotificationPageCount | Integer | 10 | |
ProposalListCount | Integer | 10 |
Parlamente
Status | Bezeichnung |
---|---|
0 | Inaktiv |
1 | Aktiv |
2 | Nur lesen |
4 | Beendet |
- Representations.xml
<?xml version="1.0" encoding="utf-8"?> <representations> <item id="999" key="testparlament" status="1" api-key="..." label="Test" color="#999" name="Test-Parlament" name2="Parlament (Test)" level="4" federal="SH" map-url="" group-type="1" group-name="Test" link="" phone="" twitter="" mail="test@mail.de" info-mail="test@mail.de"> <representatives> <item id="1" key="hans-mustermann" name="Hans Mustermann" mail="" phone="" twitter="" party="Piratenpartei" /> </representatives> <committees> <item id="1" key="c1" caption="C1test" name="Ausschuß A" url=""></item> <item id="2" key="c2" caption="C2" name="Ausschuß B" url=""></item> </committees> <process> <step id="1" def="eingang" caption="Eingang des Antrags" short-caption="Antragseingang"> <next> <step id="2" /> </next> </step> <step id="2" def="pruefung" caption="Antrag in Prüfung" short-caption="Antrag in Prüfung"> <next> <step id="3" /> </next> </step> <step id="3" def="erledigt" success-story="true" caption="Antrag erledigt" short-caption="Antrag erledigt"> <next /> </step> </process> </item> </representations>
Datenbankanbindung
Verbindung zur Datenbank:
- web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.5.1" /> <httpRuntime targetFramework="4.5.1" /> <!-- PublicKeyToken aus der Assembly mit "sn -T <dllfile> extrahieren oder aus %windir\Microsoft.NET\assembly% auslesen --> <membership defaultProvider="AspNetReadOnlyXmlMembershipProvider"> <providers> <add name="AspNetReadOnlyXmlMembershipProvider" type="ReadOnlyXmlMembershipProvider, ReadOnlyXmlMembershipProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5f20f686ead4fa28" description="Read-only XML membership provider" xmlFileName="~/App_Data/Users.xml" /> </providers> </membership> <roleManager enabled="true" defaultProvider="AspNetReadOnlyXmlRoleProvider"> <providers> <add name="AspNetReadOnlyXmlRoleProvider" type="ReadOnlyXmlRoleProvider, ReadOnlyXmlRoleProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6ae538083776793b" description="Read-only XML role provider" xmlFileName="~/App_Data/Users.xml" /> </providers> </roleManager> <authentication mode="Forms" /> </system.web> <connectionStrings> <add name="RavenDBServer" connectionString="Url=http://localhost:8080;Database=OpenAntrag"/> </connectionStrings> <appSettings> <add key="SendMail" value="False"/> <add key="SendTweets" value="False"/> <add key="SendPushoverNotification" value="False"/> <add key="DefaultPagerListPageSize" value="25"/> <add key="DefaultPagerListWingLength" value="10"/> <add key="RandomKey_AllowCapitalLetters" value="False"/> <add key="RandomKey_Letters " value="abcdefghijklmnopqrstuvwxyz"/> <add key="RandomKey_Numbers " value="0123456789"/> <add key="NotificationPageCount" value="25"/> <add key="ProposalListCount" value="25"/> </appSettings> </configuration>
Die Client-DLL von RavenDB muß zu der Version des Servers passen! Mit dem 2.5er Client kann keine Verbindung zum 4.0.5er Server hergestellt werden.
Weitere anzulegende Dateien
Z.B. in App_Data:
- Verzeichnis XmlTemplates
- die Dateien können in die übergeordnete Ebene „eingemischt werden“
- vermutlich damit man nicht immer alles ausfüllen muß
- Teaser.xml
Deploy
Veröffentlichen der Anwendung auf einem Server (ohne Entwicklungsumgebung). Erfolgreich getestet mit einem Windows 7 mit IIS.
- IIS installieren
- RavenDB 2.5 muß laufen
- ASP.NET initialisieren
cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 aspnet_regiis -i
- Überkopieren der Daten
- Am besten die Funktion „Veröffentlichen“ von Visual-Studio verwenden, in ein lokales Verzeichnis. Anschließend können die Dateien dann auf den echten Webserver übertragen werden.
Linux
Basis für den ganzen Spaß ist .NET Core.
Abhängigkeiten in Debian Stretch
apt-get install liblttng-ust0 libcurl3 libkrb5-3 zlib1g libssl1.0.2 libicu57 libunwind8 libuuid1
.NET unter Debian. Über das folgende Repository kann man die Pakete manuell herunterladen ohne sich die Microsoft-Repositories in sein System einbinden zu müssen:
https://packages.microsoft.com/debian/9/prod/pool/main/d/
Installieren der für RavenDB notwendigen Pakete:
dpkg -i dotnet-host-2.0.7-debian.9-x64.deb dpkg -i dotnet-hostfxr-2.0.7-debian.9-x64.deb dpkg -i dotnet-runtime-2.0.7-debian.9-x64.deb
RavenDB
cd /tmp https://ravendb.net/download tar xjf RavenDB-4.0.5-linux-x64.tar.bz2 cd RavenDB ./run.sh
Anschließend öffnet sich ein Browser über den die weitere Konfiguration vorgenommen werden kann.
ASP .NET
dpkg -i aspnetcore-store-2.0.0-debian.9-x64.deb dpkg -i aspnetcore-store-2.0.3-debian.9-x64.deb dpkg -i aspnetcore-store-2.0.5-debian.9-x64.deb dpkg -i aspnetcore-store-2.0.6-debian.9-x64.deb dpkg -i aspnetcore-store-2.0.7-debian.9-x64.deb dpkg -i dotnet-hosting-2.0.7-debian.9-x64.deb
Nachbau
Ein Nachbau könnte im Stil von Openslides erstellt werden:
- Python
- Django
Damit könnte ggf. auch eine Interoperabilität geschaffen werden?