Benutzer-Werkzeuge

Webseiten-Werkzeuge


openantrag

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.

  1. IIS installieren
  2. RavenDB 2.5 muß laufen
  3. ASP.NET initialisieren
    cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
    aspnet_regiis -i
  4. Ü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?

openantrag.txt · Zuletzt geändert: 23.06.2018 17:33 von thooge