Skip to content

sync #13

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 21 commits into
base: master
Choose a base branch
from
Open

sync #13

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 0 additions & 16 deletions .project
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,8 @@
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
<nature>org.python.pydev.pythonNature</nature>
</natures>
</projectDescription>
8 changes: 8 additions & 0 deletions .pydevproject
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/${PROJECT_DIR_NAME}/end2endtest</path>
</pydev_pathproperty>
</pydev_project>
5 changes: 4 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@ RUN echo 'mysql-server mysql-server/root_password password password' | debconf-s
RUN echo 'mysql-server mysql-server/root_password_again password password' | debconf-set-selections

RUN apt-get -y install wordpress vim less xvfb firefox chromium-chromedriver \
wget git mysql-server iputils-ping vnc4server net-tools strace fvwm python3-pip make
wget git mysql-server iputils-ping vnc4server net-tools strace fvwm python3-pip make\
python-pip

RUN pip install vnc2flv

ADD requirements.txt /tmp/requirements.txt

Expand Down
14 changes: 11 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ testenv:
check:
phpunit --stderr tests

e2e:
e2e: recording
PYTHONPAT=end2endtest python3 -m unittest discover -v -f -s end2endtest -p "*.py"

PDOauth:
Expand All @@ -16,6 +16,14 @@ PDOauth:
runsso: PDOauth
cd PDOauth; make runserver

cleanup:
rm -rf wordpress/
cleanup: stoprecording
rm -rf /tmp/wordpress/
mv /tmp/wplog/* shippable
rm -rf tmp/

recording:
start-stop-daemon --start --background --oknodo --name flvrec --make-pidfile --pidfile /tmp/flvrec.pid --startas /usr/bin/python -- /usr/local/bin/flvrec.py -o /tmp/wplog/record.flv :1

stoprecording:
-start-stop-daemon --stop --pidfile /tmp/flvrec.pid

36 changes: 18 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
# MSSO login plugin for Wordpress
# Autentikációs plugin Wordpress-hez

Ez egy wordpress plugin.
Segítségével az eDemo SSO autentikációs szolgáltatást igénybe véve lehet bejelentkezni a wordpress-be.
Segítségével az ADA (Anonim Digitális Azonosító) autentikációs szolgáltatást igénybe véve lehet bejelentkezni a wordpress-be.

SSO szolgáltatás: https://sso.edemokraciagep.org/static/login.html
ADA szolgáltatás: https://adatom.hu
Teszt szerver: https://sso.edemokraciagep.org

funkciók
- bejelentkezés SSO szolgáltatás segítségével
- regisztráció SSO szolgáltatás segítségével (független a gyári WP regisztrálási lehetőség beállítástól)
- login widget - sso login, sso regisztráció, logout, sso account bind, show user profil
- login oldal SSO kiegészítés - sso login, sso regisztráció
- SSO adatok a felhasználói profil oldalon - adatfrissítés funkció
- bejelentkezés ADA szolgáltatás segítségével
- regisztráció ADA felhasználóknak (független a gyári WP regisztrálási lehetőség beállítástól)
- login widget - ADA login, ADA regisztráció, logout, ADA account bind, show user profile
- login oldal ADA kiegészítés - ADA login, ADA regisztráció
- ADA adatok a felhasználói profil oldalon - adatfrissítés funkció
- plugin beállító adminisztrációs panel a beállítások menüben
- felhasználói fiók letiltása (ban user) funkció
- SSO tanusítások user meta
- SSO user ID user mata
- 0 szintű 'SSO user' szerepkör
- assurance függő regisztráció
- ADA igazolások - user meta
- ADA user ID user mata
- 0 szintű 'ADA user' szerepkör
- igazolás függő regisztráció

opciók
- SSO regisztráció letiltása -> scope: all user
- SSO bejelentkezés letiltása -> scope: all user
- ADA regisztráció letiltása -> scope: all user
- ADA bejelentkezés letiltása -> scope: all user
- SSL tanusítvány ellenőrzése
- SSO account bind engedélyezése
- ADA account bind engedélyezése
- admin bar alapértelmezett kikapcsolása
- alapértelmezett felhasználói szerepkör beállítása
- regisztrációhoz szükséges assurancok beállítása
- regisztrációhoz szükséges igazolások beállítása

---
---
4 changes: 2 additions & 2 deletions eDemo-SSOauth/includes/class_edemo-ssoauth_widgets.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ function widget( $args, $instance ) {

//section for all
?>
<li><a href="https://<?= (get_option('eDemoSSO_serviceURI').eDemo_SSOauth::SSO_SITE_URL) ?>"><?= __('SSO services', eDemo_SSOauth::TEXTDOMAIN)?></a></li>
<li><a href="https://<?php echo (get_option('eDemoSSO_serviceURI').eDemo_SSOauth::SSO_SITE_URL) ?>"><?= __('SSO services', eDemo_SSOauth::TEXTDOMAIN)?></a></li>
</ul>
<?= $args['after_widget'] ?>
<?php
Expand Down Expand Up @@ -110,4 +110,4 @@ function form( $instance ) {
<?php
}
}
?>
?>
88 changes: 19 additions & 69 deletions end2endtest/InstallTest.py
Original file line number Diff line number Diff line change
@@ -1,81 +1,31 @@
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from unittest.case import TestCase
import pdb
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import sys
import time
from UIProcedures import UIProcedures
import os


class element_to_be_useable(object):
def __init__(self, locator):
self.locator = locator

def __call__(self, driver):
try:
element = driver.find_element(*self.locator)
except:
#print(sys.exc_info())
element = None
if element:
try:
displayValue=element.value_of_css_property('display')
displayok = displayValue in ('block', 'inline','inline-block')
displayed = element.is_displayed()
enabled = element.is_enabled()
if displayed and enabled and displayok:
return element
except StaleElementReferenceException:
pass
return False

class UIActions(object):
def waitUntilElementEnabled(self, fieldId):
element = WebDriverWait(self.driver, 100).until(element_to_be_useable((By.ID,fieldId)))
return element

def wait_on_element_text(self, by_type, element, text, timeout=20):
WebDriverWait(self.driver, timeout).until(
EC.text_to_be_present_in_element(
(by_type, element), text)
)

def fillInField(self, fieldId, value):
element = self.waitUntilElementEnabled(fieldId)
element.clear()
element.send_keys(value)


class UIProcedures(UIActions):
def login_as_admin(self):
self.driver.get("http://blog.example.com:8080/wp-login.php")
self.waitUntilElementEnabled("user_login").send_keys("admin")
self.waitUntilElementEnabled("user_pass").send_keys("admin")
self.waitUntilElementEnabled("wp-submit").click()
self.waitUntilElementEnabled("wpadminbar")

def configureSSO(self):
self.driver.get("http://blog.example.com:8080/wp-admin/options-general.php?page=edemosso")
self.fillInField("EdemoSSO_appname", "testapp")
self.fillInField("EdemoSSO_appkey", "testkey")
self.fillInField("EdemoSSO_secret", "testsecret")
self.fillInField("EdemoSSO_callback_uri", "/callback/uri")
self.waitUntilElementEnabled("EdemoSSO_allowBind").click()
self.waitUntilElementEnabled("EdemoSSO_allowLogin").click()
self.waitUntilElementEnabled("EdemoSSO_update").click()

class InstalltestTest(TestCase, UIProcedures):
class InstallTest(TestCase, UIProcedures):
def setUp(self):
self.driver = webdriver.Firefox()
profile_directory = os.path.join(os.path.dirname(__file__),"..", "etc", "firefox-profile")
profile = webdriver.FirefoxProfile(profile_directory)
profile.accept_untrusted_certs = True
self.driver = webdriver.Firefox(firefox_profile=profile)

def tearDown(self):
self.driver.close()

def test_install_page(self):
self.login_as_admin()
self.addSsoWidget()
self.workaroundPermalinkProblem()
self.configureSSO()
self.wait_on_element_text(By.ID, "wpbody-content", "Options updated", 30)
self.assertFieldValue("EdemoSSO_serviceURI", "sso.edemokraciagep.org")
self.assertFieldValue("EdemoSSO_appname", "testapp")
self.assertFieldValue("EdemoSSO_appkey", "f7354fa2-811f-48b6-9be9-359c5d99d6a4")
self.assertFieldValue("EdemoSSO_secret", "e2etest")
self.assertSelected("EdemoSSO_allowBind")
self.assertSelected("EdemoSSO_allowLogin")
self.assertSelected("EdemoSSO_allowRegister")
self.assertIn("Options updated",self.driver.find_element_by_id("wpbody-content").text)
self.wp_logout()
self.loginWithSSO()

71 changes: 71 additions & 0 deletions end2endtest/UIActions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

class element_to_be_useable(object):
def __init__(self, locator):
self.locator = locator

def __call__(self, driver):
try:
element = driver.find_element(*self.locator)
except:
#print(sys.exc_info())
element = None
if element:
try:
displayValue=element.value_of_css_property('display')
displayok = displayValue in ('block', 'inline','inline-block')
displayed = element.is_displayed()
enabled = element.is_enabled()
if displayed and enabled and displayok:
return element
except StaleElementReferenceException:
pass
return False

class UIActions(object):
def waitUntilElementEnabled(self, fieldId):
element = WebDriverWait(self.driver, 100).until(element_to_be_useable((By.ID,fieldId)))
return element

def wait_on_element_text(self, by_type, element, text, timeout=20):
WebDriverWait(self.driver, timeout).until(
EC.text_to_be_present_in_element(
(by_type, element), text)
)

def fillInField(self, fieldId, value):
element = self.waitUntilElementEnabled(fieldId)
element.clear()
element.send_keys(value)

def setCheckBox(self, elemId):
element = self.waitUntilElementEnabled(elemId)
if not element.is_selected():
self.click(elemId)
tried=0
while not element.is_selected() and tried<5:
time.sleep(1)
tried += 1

def click(self, fieldId):
element = self.waitUntilElementEnabled(fieldId)
self.driver.execute_script("""
window.scrollTo(
0,
document.getElementById('{0}').getBoundingClientRect().top-
document.body.getBoundingClientRect().top-
100)""".format(fieldId))
return element.click()

def assertFieldValue(self, fieldId, value):
element = self.driver.find_element_by_id(fieldId)
self.assertEqual(value,element.get_property('value'))

def assertSelected(self, fieldId):
element = self.driver.find_element_by_id(fieldId)
self.assertEqual(True,element.is_selected())

68 changes: 68 additions & 0 deletions end2endtest/UIProcedures.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from UIActions import UIActions
from selenium.webdriver.common.by import By
import pdb
import time

class UIProcedures(UIActions):
def login_as_admin(self):
self.driver.get("https://blog.example.com:8080/wp-login.php")
self.waitUntilElementEnabled("user_login").send_keys("admin")
self.waitUntilElementEnabled("user_pass").send_keys("admin")
self.waitUntilElementEnabled("wp-submit").click()
self.waitUntilElementEnabled("wpadminbar")

def addSsoWidget(self):
self.driver.get("https://blog.example.com:8080/wp-admin/widgets.php?widgets-access=on")
self.waitUntilElementEnabled("widgets-left")
ssoauth=self.driver.find_element_by_xpath("//a[contains(@href, 'base=edemo_ssoauth_login_widget')]")
ssoauth.click()
title = self.waitUntilElementEnabled("widget-edemo_ssoauth_login_widget-__i__-title")
title.clear()
title.send_keys("SSO")
sidebarPosition=self.driver.find_element_by_xpath("//select[@name='sidebar-1_position']")
for option in sidebarPosition.find_elements_by_tag_name('option'):
if option.text == '1':
option.click()
break
time.sleep(1)#FIXME:why is it needed?
self.click("savewidget")
self.wait_on_element_text(By.ID, "message", "Changes saved.", 50)


def configureSSO(self):
self.driver.get("https://blog.example.com:8080/wp-admin/options-general.php?page=edemosso")
self.fillInField("EdemoSSO_serviceURI", "sso.edemokraciagep.org")
self.fillInField("EdemoSSO_appname", "testapp")
self.fillInField("EdemoSSO_appkey", "f7354fa2-811f-48b6-9be9-359c5d99d6a4")
self.fillInField("EdemoSSO_secret", "e2etest")
self.setCheckBox("EdemoSSO_allowBind")
self.setCheckBox("EdemoSSO_allowLogin")
self.setCheckBox("EdemoSSO_allowRegister")
time.sleep(2)#WTF?
self.waitUntilElementEnabled("EdemoSSO_update").click()
self.wait_on_element_text(By.ID, "wpbody-content", "Options updated", 30)

def wp_logout(self):
self.driver.get("https://blog.example.com:8080/wp-login.php?action=logout")
element=self.driver.find_element_by_xpath("//a")
element.click()

def workaroundPermalinkProblem(self):
self.driver.get("https://blog.example.com:8080/wp-admin/options-permalink.php")
element=self.driver.find_element_by_xpath("//input[@value='/%year%/%monthnum%/%day%/%postname%/']")
element.click()
button = self.driver.find_element_by_id("submit")
button.click()
self.wait_on_element_text(By.ID, "setting-error-settings_updated", "Permalink structure updated.", 30)

def loginWithSSO(self):
self.driver.get("https://blog.example.com:8080/")
registerLink=self.driver.find_element_by_xpath("//a[text()='Register with SSO']")
registerLink.click()
self.fillInField("LoginForm_email_input", "[email protected]")
self.fillInField("LoginForm_password_input", "3l3k Th3 T3st3r")
button=self.driver.find_element_by_xpath("//button[text()='Bejelentkezés']")
button.click()
self.waitUntilElementEnabled("wp-admin-bar-root-default")
avatar = self.driver.find_element_by_xpath("//a[text()='Howdy, SSO user']")
self.assertEqual(avatar.text,"Howdy, SSO user")
Loading