Announcement

Collapse
No announcement yet.

Peter's Open-Xchange Server Admin GUI

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Peter's Open-Xchange Server Admin GUI

    An die OX-Gemeinde!

    Mit diesem Thread möchte ich vorab bekanntgeben, dass ich an einer OX Admin Server GUI arbeite. Um mich eindeutig von anderen Projekten zu unterscheiden habe ich dieses etwas einfallslos mit meinem Vornamen verknüpft



    Zielsetzung/Features (geplant):
    - Open Source
    - möglichst einfache Verwaltung von OX-Entitäten: Kontext, Benutzer, Gruppen, Datenbanken und Filestores; Backup, OSGI-Bundle Verwaltung
    - Unterstützung von Mehrsprachigkeit
    - 3 Benutzerklassen (Login)
    root - kann & darf alles, insbesondere das Anlegen von Datenbanken & Filestores, OSGI-Bundles
    OXadmin - Rechte bezüglich Kontext, Benutzer, Gruppen & Ressourcen
    ContextAdmin - Rechte bezüglich Benutzer, Gruppen & Ressourcen
    - Plugin-Konzept um die Datenübernahme, insbesondere von Benutzern zu erleichtern - siehe auch Motivation
    - Templates - z.B. um das Anlegen von Benutzern zu erleichtern.

    Motivation:
    Für uns steht nächstes Jahr die Migration für eine von uns entwickelte OX5-Erweiterung auf OX6 an. Somit wird es Zeit sich dem OSGI- Konzept auseinanderzusetzen. Weiters muss auch den Architekturunterschieden von OX5/OX6 -z.B. kein Tomcat-Container - Rechnung getragen werden. Ich weiß sehr wohl, dass ein bestehedes Admin GUI Projekt von Manfred Weiß/User mani) existiert. Aus diversen Gründen begehe ich aber einen eigenen Weg/eigenes Projekt. Jedefalls vielen Dank an Manfred Weiß - die Sourcen seines bestehenden Projektes haben mir viele wichtige Informationen geliefert.

    Wir sind auch Nebenerwerbs-Internetprovider . Für einige Kunden stellen wir auch Web-Pakte (Web, FTP, Mail) zur Verfügung. Wir setzen als 'Hosting Control Panel' auf ISPconfig 3. Durch das vorher angesprochene Plugin-Konzept möchte ich die Benuterdatenübernahme aus einer SW wie ISPconfig ermöglichen/erleichtern. Ich bin betone erleichtern. Auf Grund der schier unglaublichen Anzahl an SW-Projekten und deren Kombination ist eher schwierig solche Projekte auf High-Level Ebene zu verheiraten. z.B. direkter OX Support in ISPconfig 3 zu integrieren. Hier stellt sich die Frage inweit soll diese Integration gehen, und wer macht diese . z.B. ISPconfig 3 ist ein PHP-Projekt - und PHP ist nicht meine Welt.

    Daher werde ich den Low-Level Ansatz von Import aus Datenbanken bezüglich Benutzer umsetzen.

    Technik:
    - das Projekt besteht aus einem einzigen OSGI-Bundle!
    - Ansteuerung der OX-Server Funktionalität per RMI
    - da bezüglich HTTP-Support nur Servlets unterstützt werden (kein Tomcat), bringt dieses Projekt einen kleinen eigenständigen Web-Server mit. Die Web-Server Daten sind im OSGI-Bundle (JAR-Datei) enthalten. [Die Webseiten werden aber automatisch aus Geschwindigkeitsgründen temporär entpackt]. Als JSP-Ersatz wurde FreeMarker, eine sehr mächtige Template-Engine integriert. Siehe Bespiel im Anhang.
    - Da Layout bei diesem Projekt eher im Hintergrund steht, setze ich bezüglich CSS-Layout auf YAML
    - das Webinterface huldigt die klassische Client/Server Kommunikation. Client schickt Daten, Server rendert die HTML Page. Einfach, robust und schnell umzusetzen!

    Rechtliches: Da hier offizielle OX Mitarbeiter mitlesen. Ich möchte mich mit diesem Projekt nicht in Konkurrenz mit der Firma Open-Xchange begeben, oder mir den Zorn dieser zuziehen :rolleyes. Wie beschrieben setze ich alleinig auf das OX-API. Layout ist rein HTML basiert. Nur die OX-Symbolleiste habe ich momentan übernommen.

    Solle es (lizenz)rechtliche Bedenken/Einschränkugen geben, bitte ich um einen entsprechen Kommentar.

    Zeitplan:
    Erste Alphaversion - Kontext, Benutzer, Gruppen & Resourcen Verwaltung wird es wahrscheinlich Ende dieses Monats geben.

    Um Anregungen & Kommentare wird gebeten.
    Peter


    Anhang - Beispiel FreeMarker Code:
    Dieses Template baut die Tabelle (Kontextübersicht) des Screen shots (Anfang des Threads) auf

    Code:
    ....
    <#list contextList as list>
    
            <tr>
                <td><input type="checkbox" name="c${list_index}" value="<#if list.active>a<#else>i</#if>${list.ID}"/> </td>
                <td class="center">${list.ID}</td>
                <td>
    	       ${list.name}
                </td>
                <td>${list.usedQuota} / ${list.maxQuota}</td>
                <td>${list.loginMappings}</td>
                <td class="center">${list.accessCombinationName}</td>
                <td>
                    <#if list.active>
                    <img class="centeredImage" src="images/active.png" />
                    <#else>
                    <img class="centeredImage" src="images/inactive.png" />
                    </#if>
                </td>
            </tr>
     </#list>
    ...
    Last edited by pezi; 08-17-2009, 09:14 AM.

  • #2
    Wow, das hört sich wirklich großartig an !

    Comment


    • #3
      Hi,

      ich denke die Gemeinde wäre für die Unterstützung durch ein solches Tool dankbar.

      Ist es eurer Seits auch vorgesehen das verschiedene Contexte Administriert werden können??

      MfG

      outlow

      Comment


      • #4
        Hallo!

        Ja, der Kontext ist das Grundelement mit dem gearbeitet wird. Am Screenshot sieht man dies. Nur der Screenshot was leider gestern, und bis jetzt nicht sichtbar, da unsere Standleitung momentan gekappt ist. Bei Probebohrungen wurden Leitungen von ca 3500 Teilnehmern gekappt . Die UMTS Fallback-Verbindung steht aber jetzt.

        Peter

        Comment


        • #5
          Hallo Pezi,

          wird es möglich sein User aus einem Context in einen anderen zu verschieben??

          MfG

          outlow

          Comment


          • #6
            Nein - das Verschieben eines Benutzers über einen Context hinweg ist nicht vorgesehen. Ist meiner Meinung auch nicht vom API her nicht möglich.

            Comment


            • #7
              Richtig, benutzer von einem Kontext in einen anderen zu schieben ist nicht möglich. Ein Grund dafür ist dass sämtliche Referenzen wie z.B. bei Gruppenterminen im neuen Kontext nicht mehr passen würden.

              Gruß
              Last edited by Martin Heiland; 08-31-2009, 09:50 AM.

              Comment


              • #8
                Hallo Martin,

                habe dazu gerade eine Thread geöffnet.

                Ist es aber nicht so das wenn ich einen Benutzer von einem Kontext in einen anderen verschiebe dies eh zu 99% gewollt ist.

                Könnte mir aber eben vorstellen, das das verschieben eines Benutzers unter beibehaltung von Mail, Kalender ohne Gruppenterminen im alten Kontext zusammenhang, User Infostore, Aufgaben das ein oder andere mal hilfreich wäre.

                aber weiteres vielleicht im neuen thread, damit dieser hier beim ursprünglichen thema bleibt


                outlow

                Comment


                • #9
                  Ich möchte mal kurz einen Statusbericht zu meinem Projekt einbringen

                  Die Grundfunktionen
                  - Kontext anlegen/ändern/löschen/aktivieren/aktullen Kontext setzen (=working Kontext)
                  - Benutzer im aktullen Kontext anlegen/ändern/löschen
                  sind fertig.

                  Hat doch etwas länger gebraucht als gedacht. Die meiste Programmierarbeit verbrät man eh im GUI - Werteüprüfung per JS etc.

                  Nach Tests werde ich wahrscheinlich nächste Woche die erste Beta Version freigeben.

                  Anbei die ersten Screenshots:
                  Hinweis - wenn eine Checkbox 'manuell' zur Verfügung steht, kannn zwischen einer Liste und einem Eingabefeld gewechselt werden.




                  Comment


                  • #10
                    Hi Petzi,

                    das sieht doch schon ganz gut aus

                    Eine Frage, wird es möglich sein Benutzern auch individuell einen größeres Kontigent zu zuweisen?

                    MfG

                    outlow

                    Comment


                    • #11
                      Die erste Beta-Release dieses Projekts, inklusive einer kleinen Projekt-Homepage ist fertiggestellt. Beta-Tester dringend gesucht . Bitte sich per PM bei mir melden - ich sende dann den Link auf die Projekt Homepage zu.

                      Und ganz wichtig - diese Release in keiner Produktionsumgebung testen. Der Grund warum ich die Projekt-Homepage noch nicht allgemein bekannte gebe - ich hatte während der Entwicklung einige gröbere Probleme mit meinen Testsystemen. z.B. (Remote)-RMI-Host Auflösung ist von einen auf den anderen Tag nicht mehr gegangen. Dies hat mit größter Wahrscheinlichkeit nichts mit der SW direkt zu tun - eher hat sich die VM nach einem Absturz etwas zerlegt. Nichtsdestotrotz ziehe ich es aber vor diese erste Version eher in kleinere Runde testen zu lasen. Getestet wurde bisher unter Debian Lenny & Centos 5.3 (beides 32-bit).

                      Comment


                      • #12
                        Hallo,

                        hab' ne PM geschickt, hoffe die ist angekommen.

                        Gruß
                        Jan

                        Comment


                        • #13
                          Hallo Pezi,

                          teste gerne mit, PM unter wegs.

                          MfG

                          outlow

                          Comment


                          • #14
                            Hi Petzi,

                            Wenn du die Gruppenverwaltung einfügst wäre es eine Hilfe wenn einer Gruppe auch wieder eine E-Mail Adresse zugefügt werden könnte.

                            Dies funktionierte in der Admin Oberfläche zu OX5, und nahm lediglich einen Eintrag(Gruppenname als E-Mail "Gruppe@example.com") in der Tabelle group_address_mappings vor.

                            Dies würde das zusätzliche Anlegen eines Verteilers überflüssig machen.

                            MfG

                            outlow

                            Comment


                            • #15
                              Hi Petzi,

                              erstmal vielen Dank für Deine Bemühungen. Ich hab mich mittlerweile mit der Version 0.1 und auch 0.12 auseinander gesetzt. Leider habe ich mit beiden Versionen den gleichen Fehler.

                              Ich kann mich anmelden. Wenn ich dann in das Contextmenü wechsele und dort einen Context zu aktivieren steht in der Spalte "Rechte" folgende Fehlermeldung:

                              Code:
                              Expression list.accessCombinationName is undefined on line 209, column 38 in context.html.
                              The problematic instruction:
                              ----------
                              ==> ${list.accessCombinationName} [on line 209, column 36 in context.html]
                              in include path [on line 63, column 29 in index.html]
                              ----------
                              
                              Java backtrace for programmers:
                              ----------
                              freemarker.core.InvalidReferenceException: Expression list.accessCombinationName is undefined on line 209, column 38 in context.html.
                              at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124)
                              at freemarker.core.Expression.getStringValue(Expression.java:118)
                              at freemarker.core.Expression.getStringValue(Expression.java:93)
                              at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
                              at freemarker.core.Environment.visit(Environment.java:209)
                              at freemarker.core.MixedContent.accept(MixedContent.java:92)
                              at freemarker.core.Environment.visit(Environment.java:209)
                              at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:179)
                              at freemarker.core.Environment.visit(Environment.java:416)
                              at freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)
                              at freemarker.core.Environment.visit(Environment.java:209)
                              at freemarker.core.MixedContent.accept(MixedContent.java:92)
                              at freemarker.core.Environment.visit(Environment.java:209)
                              at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)
                              at freemarker.core.Environment.visit(Environment.java:209)
                              at freemarker.core.MixedContent.accept(MixedContent.java:92)
                              at freemarker.core.Environment.visit(Environment.java:209)
                              at freemarker.core.Environment.include(Environment.java:1482)
                              at freemarker.core.Include.accept(Include.java:169)
                              at freemarker.core.Environment.visit(Environment.java:209)
                              at freemarker.core.MixedContent.accept(MixedContent.java:92)
                              at freemarker.core.Environment.visit(Environment.java:209)
                              at freemarker.core.Environment.process(Environment.java:189)
                              at freemarker.template.Template.process(Template.java:237)
                              at at.sciencesoft.webserver.TemplateManager.process(TemplateManager.java:135)
                              at at.sciencesoft.webserver.WebServer.process(WebServer.java:214)
                              at at.sciencesoft.webserver.WebServer.doGet(WebServer.java:161)
                              at javax.servlet.http.HttpServlet.service(HttpServlet.java:596)
                              at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
                              at com.openexchange.ajp13.najp.AJPv13RequestHandlerImpl.doServletService(AJPv13RequestHandlerImpl.java:429)
                              at com.openexchange.ajp13.AJPv13Request.response(AJPv13Request.java:128)
                              at com.openexchange.ajp13.najp.AJPv13RequestHandlerImpl.createResponse(AJPv13RequestHandlerImpl.java:282)
                              at com.openexchange.ajp13.najp.AJPv13ConnectionImpl.createResponse(AJPv13ConnectionImpl.java:189)
                              at com.openexchange.ajp13.najp.AJPv13Task.run(AJPv13Task.java:258)
                              at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
                              at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
                              at java.util.concurrent.FutureTask.run(FutureTask.java:166)
                              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
                              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
                              at java.lang.Thread.run(Thread.java:636)
                              Leider verstehe ich nichts von Java. OX läuft jedoch rund bei mir ...
                              Viele Grüße
                              Rene

                              OS: Ubuntu Server amd64 16.4 LTS
                              JRE: openjdk-8-jre, MySQL 5.7, Apache 2.4, Dovecot 2.2.22
                              OX-Server backend: OXSE latest
                              OX-frontend: OXSE latest appsuite + ox6

                              Comment

                              Working...
                              X