Code Monkey home page Code Monkey logo

fae's Introduction

Functional Accessibility Evaluator

Development is primarily supported by the University of Illinois at Urbana-Champaign. The development is lead by DRES Accessible IT Group which is a unit of Disability Resources and Educational Servcies which is part fo the College of Applied Health Sciences. Additional contributions for the HTMLUnit based web site analysis engine are provided by Administrative Information Technology Services (ATIS) of University Administration.

Version 2.3

  • Updated OpenAjax library to support W3C ARIA 1.3 and ARIA in HTML requirements.
  • Updated to support Django 2.2.27.
  • Updated HTMLUnit to 2.60.

Version 2.2

  • Updated OpenAjax library to support W3C ARIA 1.2 and ARIA in HTML requirements.
  • Updated to support Django 2.2.24.
  • Updated HTMLUnit to 2.52.

Version 2.1

  • Updated to support Python 3.6.
  • Updated to support Django 2.2.x.
  • Removed migration files from app directories.

What is Functional Accessibility Evaluator (FAE)?

  • FAE analyzes a website based on the requirements of the W3C Web Content Accessibility Guidelines 2.0 Single A and AA Success Criteria.
  • Every rule used in FAE 2.x references at primary WCAG 2.0 Success Criterion requirement it is based on.
  • The rules support not only accessibility, but also usable web design for people with disabilities.
  • The rules support accessible and usable design by enforcing the accessible coding practices and techniques of the Accessible Rich Internet Application (ARIA) 1.0 and W3C HTML5 specifications.

Apache 2.0 License

FAE may be used and distributed based on the terms and conditions of the Apache License Version 2.0.

Server requirements for Linux

  • Apache2 Web Server
  • Python 3.6
  • Java 1.8
  • Python development package (python-dev in Debian/Ubuntu)
  • postgresql-devel (libpq-dev in Debian/Ubuntu)
  • psycopg2 package for python to talk to postgres

Python modules

Here is the [requirements.txt] file to use with pip


confusable-homoglyphs==3.2.0
Django==2.2.27
django-password-reset==2.0
django-registration==3.1.2
django-timezone-field==3.1
future==0.15.2
Markdown==2.6.5
psycopg2-binary==2.8.6
pytz==2019.3
requests==2.20.0
sqlparse==0.3.0

Creating a secrets.json file

The "secrets.json" file must be created and provides:

  • Security information for Django
  • Information for Django to access and manage the database
  • Information on on e-mail commmunications for registration and announcements.
  • Place this file in the [absolute path]/fae2/fae2 directory
{
  "FILENAME": "secrets.json",
  "PROCESSING_THREADS": 4,
  "SITE_URL": "[your site URL]",
  "SITE_NAME": "FAE 2.0 for [your organization]",
  "SECRET_KEY": "[random string of 40-50 characters used by django]",
  "SELF_REGISTRATION_ENABLED": true,
  "ANONYMOUS_ENABLED": true,
  "DEBUG": false,
  "LOGGER_LEVEL": "INFO",
  "DATABASE_HOST": "[ip address or localhost if database on same server]",
  "DATABASE_PORT": "[port, typicall 5432]",
  "DATABASE_NAME": "[DB name]",
  "DATABASE_USER": "[DB username]",
  "DATABASE_PASSWORD": "[DB password]",
  "ALLOWED_HOSTS": ["[your site URL]"],
  "EMAIL_HOST": "[mailserver]",
  "EMAIL_PORT": 25,
  "EMAIL_USE_TLS": true,
  "EMAIL_HOST_USER": "[email used for sending registration information and announcements]",
  "EMAIL_HOST_USER_PASSWORD": "[email password]",
  "ACCOUNT_ACTIVATION_DAYS" : 3,
  "CONTACT_EMAIL" : "[email notification when a contact form is submitted]",
  "ADMIN_USER_NAME" : "[username of admin user]",
  "ADMIN_FIRST_NAME" : "[first name of admin]",
  "ADMIN_LAST_NAME" : "[last name of admin]",
  "ADMIN_PASSWORD": "[password for admin]",
  "ADMIN_EMAIL": "[email for admin]",
  "ANONYMOUS_PASSWORD" : "[anonymous password, use random characters]",
  "DEFAULT_ACCOUNT_TYPE" : 2
}

Apache 2.0 configuration notes

  • MOD_WSGI must be installed and support Python 3.6

Sample Apache configuration gile

<VirtualHost *:80 >

  Servername  [fae.somedomain.org]
  ServerAlias [fae.somedomain.org]

  Alias /static /var/www/fae2/fae2/fae2/fae2/static/

  <Directory /var/www/fae2/fae2/fae2/fae2/static>
    Require all granted
  </Directory>

  <Directory /var/www/fae2/fae2/fae2>
    <Files wsgi.py>
     Require all granted
    </Files>
  </Directory>

  WSGIDaemonProcess fae2 python-path=/var/www/fae2/fae2/fae2:/var/www/fae2/fae2env/lib/python2.7/site-packages
  WSGIProcessGroup  fae2

  WSGIScriptAlias / /var/www/fae2/fae2/fae2/fae2/wsgi.py process-group=fae2

</VirtualHost>

Initializing and updating the database tables

  • You will need to run django makemigrations and migrate commands to update any changes (or to create the initial database) for the django apps used in FAE.
  • This needs to be done after updating to a new version of FAE.
  • For your convience there is a script init_apps that can be used to setup the initial migrations and run migrate
python manage.py makemigrations
python manage.py migrate

Setting up fae directories for read/write access

  • Need to create data directory with write permissions for apache user and group root user
  • Need to create logs direcotry with write permissions for apache user and group root user

Multiple Django Apps and mod_wsgi

Setup Static Files

  • Enable the virtual environment for fae so it is available from the command prompt:
    source [path to virtual environment]/bin/activate.
  • Change directory to the fae directory with the file `manage.py'.
  • You will need to run the following command to copy static files to the static directory:
    python manage.py collectstatic

Initialize database tables

  • If not already enabled, enable the virtual environment for fae so it is available from the command prompt:
    source [path to virtual environment]/bin/activate.
  • Change directory to the fae directory with the file `manage.py'.
  • Run the following command to create the tables in the database:
    python manage.py migrate
  • After the tables in the database are created, go to the "populate" directory.
  • In the populate directory initialize the tables using the following command:
    python pop_all.py

fae-util configuration and testing

  • Purpose of fae-util
    • fae-util is a server based browser emulator based on HTMLUnit
    • It monitors the database waiting for evaluation requests
    • When it identifes a request it will then load web pages and analyze them using the OpenAjax Evaluation Library
    • Each page evaluation results in a JSON file being crerated with the results
    • After all pages are analyzed the information in the JSON files is moved to the database
  • Testing fae-util
    • Go to the "fae-util" directory
    • Use "./build" function to build the java classes
    • Use ./run -c test.properties to test if the utility is properly installed and configured
    • It will output URL processing information to the console
    • It will create a directory called "test" that contains *.json files of evaluaiton results
    • NOTE: You must delete the "test" directory to rerun this test (e.g. directory exists error will occur)
  • Creating a service to run evaluation requests

Utility to clean up reports and update summary statistics

  • IMPORTANT: Must run fae-util/process_achive_reports.py to process remove reports and update summary statistics
  • Create cron job to run a shell script once a day
  • The shell script contains the following command lines:
#!/usr/bin/env bash
/python /fae-util/process_achive_reports.py

InCommon (Shibboleth) Configuration

To enable shibboleth support through InCommon for your institution or organization you need your service manager to enable the following attributes to the entityID identifying the installation of FAE with Shibboleth Support (e.g. "https://fae.illinois.edu/shibboleth" for the University of Illinois campus):

  • eppn
  • giveName
  • sn
  • mail

Enityt IDs: [https://www.incommon.org/federation/info/all-entities.html#IdPs]

Testing e-mail on localhost development

  • Use a python utitlity to simulate an SMTP server: python -m smtpd -n -c DebuggingServer localhost:1025
  • Configure e-mail in "secretes.json" with the following values:
    ....
    "EMAIL_HOST": "localhost",
    "EMAIL_PORT": 1025,
    "EMAIL_USE_TLS": false,
    "EMAIL_HOST_USER": "None",
    "EMAIL_HOST_USER_PASSWORD": "None",
    ....

Development Resources

Django Shibboleth Resources

Incommon Resources (Multi-Institution Shibboleth)

fae's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fae's Issues

Usage statistics for institutional subscriptions

Feature request: Institutional subscribers may want to obtain usage statistics for their users accessing FAE. For an initial implementation, usage data need not be fined grained; total numbers should be sufficient for Penn State's purposes.

Correct secretes.json typo

I assume, in the README, this:

The "secretes.json" file must be created and provides:

should actually be this:

The "secrets.json" file must be created and provides:

CCR sometimes calculated incorrectly?

The CCR seems to be calculated incorrectly in some circumstances. Take, for example, these reports:

https://fae.disability.illinois.edu/pages/15a433cc2d19c20b/rc/style/page/1/color1/
https://fae.disability.illinois.edu/pages/15a433d06e987982/rc/style/page/1/color1/

They both indicate that the site titles have a CCR of 1 (e.g. "span: 'Department of'", "strong: 'Anthropology'", "span: 'Department of'", "strong: 'Religion'", plus all of the white-on-blue navigation menu links), which is clearly wrong as that indicates the foreground and background colors are the same. AInspector gives them the correct CCR of 3.7:

screenshot 2017-02-15 14 00 48

This matches the WebAim Color Contrast Checker calculation of #ffffff on #e75424.

Fail to run report as Admin user on clean database/install

Either as a logged in Admin User or Anonymous, when trying to run a report, the following error is thrown:

Request Method:     POST
Request URL:        http://localhost:8080/
Django Version:     1.9.1
Exception Type:     IntegrityError
Exception Value:    null value in column "delete" violates not-null constraint

at line 219 in reports/models.py

Which Python?

In the Requirements Python 2.7 is listed, in the Apache config it looks like a Python 3.4 Virtual Env is created. What are the actual requirements?

Sample secrets.json missing info/typos

The provided sample secrets.json file in the instructions is missing the following key:

"ANONYMOUS_ENABLED"

And the provide sample also has the following key misspelled:

"ANNONYMOUS_PASSWORD" instead of "ANONYMOUS_PASSWORD"

missing fae2.settings file

When trying to install, i keep getting that the fae2.settings file is missing on page load of the wsgi.py file. I'm not sure if this was a file that was created in a config somewhere or an invalid reference in the code.

Apache Config

Upon attempting to use sample config it would keep failing on this line:

WSGIScriptAlias [absolute path]/fae2/fae2/wsgi.py

After some research I believe it's supposed to look like this:

WSGIScriptAlias / [absolute path]/fae2/fae2/wsgi.py

Disclaimer: I come from an Apache2/Symfony/PHP, Windows IIS/C# background, this is my first adventure in to Python/Django..so please excuse me if I make a mistake.

Improve Shibboleth discovery page

Change heading to something like "Find Your Organization" and have information on what you can do to add your organization if it is not found. Also information on what your local shibboleth manager needs to do.

Add an API for integration and/or unit testing

Tenon and aXe both have APIs that allow a developer, using Jasmine with Selenium, etc., to either pass a url or rendered document source/source fragment and have the frameworks return responses as JSON objects.

FAE's robust ruleset and openness could lead to strong adoption if there were an API.

Feature Request: API for FAE 2.0

It would be helpful to have an API for FAE 2.0 so that an instance of FAE could be set up in a development environment and fully streamlined into continuous integration testing. The ability to allow the test environment to execute one or more FAE rules and act based on the result is needed for this type of integration.

Empty results for evaluation

Illinois School for the Visually Impaired evaluation does not seem to find any content for the website and reports all rules as not applicable.

http://isvi.net/

Maybe a timing issue due to a toolbar for customizing the rendering of content

JSON output of page level results

In response to your response to my initial contact.

Yes, we are evaluating the free side of the FAE as a way to double check our sites against other tools, so far FAE is definitely the most accurate. Part of our need is a way to report on what we have found and provide details on how I fixed it. I have researched and determined that you shouldn't make the claim that your entire website is WCAG2.0AA compliant, but instead should be claiming that this 'page' is compliant.

My goal is to use the JSON export to generate our own report format and be able to identify a page a

Filtering URL include path information

If the URL includes a path include the path as part of the URL filter.

For example:

if the URL is http:/www.uic.edu/chemistry only pages that start with that domain name and path would be analyzed, all other URLs would be filtered.

Default Rules/Rulesets not defined

It appears as if the app is looking to have some default data in its repository. However, none are provided. I have fae2 running on sqlite3, and created the schema within the database by doing a migrate command, but now I need to add the default data required to run properly. Can you provide that in your repository as well?

process_evaluation_requests

Hello, after much trail I have FAE running locally, I was able to successfully scan one site, but don't remember the circumstances of that instance. Now when scanning a site I get the following in the data/admin log for that report.

[SAVE WEBSITE][**ERROR]: Error: saving to django

Could you point me in a direction? Thanks!

testing for Unicode support

Problems with unicode characters:

  1. Upgrade to Python 3
  2. Better trapping of unicode problems in string processing

When specified path is two levels, FAE only evaluates top page

When specifying a path that is two levels, FAE only evaluates the initial page. For example,

http://www.illinois.edu/1st/2nd/

Requiring the path /1st/2nd/, FAE will only evaluate the page at /1st/2nd/.

Looking in the logs from my install, when trying to evaluate pages linked off that initial page, it looks like FAE is appending the required path twice on subpage; i.e. in the included page

http://www.illinois.edu/1st/2nd/linkedpage.htm

It tries to evaluate
http://www.illinois.edu/1st/2nd/1st/2nd/linkedpage.htm
and fails with a 404.

View Navigation: Next and Previous Button

Where should next and previous take you?
Should it be based on the ordering of results of the parent view (e.g. rules with violations, rules with warnings...) rather than just the rule number

Should it be based on the ordering of results of the parent view (e.g. pages with violations, pages with warnings...) rather than just the page number

Schedule time for crawl

For a deeper link crawl, or for options that use a lot of server resources, I would like to see an option to schedule the start of a crawl. (So that a large crawl can start in the middle of the night when server load is light).

Reporting tools

Feature requests

  • Users must be able to manually correct violations, warnings, and manual checks after reviewing them. Especially MC’s—moving these to P (or N/A) increases Implementation Score, important to bosses
  • It would also be nice if, in Summary tables, users could filter Rule Categories to recalculate Implementation Level score—e.g., “What is the Implementation Score except for Audio/Video?”
  • Users should be able to filter the ruleset for specific actions. Example: uncheck non-applicable rules, rules that only yield MC, rules they don’t wish to scan, etc.
  • Some mechanism for users to track changes in scan results/scores from one scan to the next?
  • Users should be able to view the results a rule can yield. (e.g. Timing rules can only yield MC, where Heading rules can yield V, P, MC.) If a knowledgeable developer knows that a given rule
  • Users should be able to determine total element results by rule category, not just pages
  • API?
  • If none of the above are viable, how about a complete .CSV export feature?

Adding path to URL for specifying pages to include in evaluation

Suggestion: Instead of making this a part of the URL field, add a checkbox under the "Follow Links In" > "Specified domain only" option.

For example:

Follow Links In

(o) Specified domain only
[ ] Use the following path (appended to URL):
____________________

(o) Next-level subdomains

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.