PHPackages                             silinternational/simplesamlphp-module-theme-material - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. silinternational/simplesamlphp-module-theme-material

Abandoned → [silinternational/simplesamlphp-module-material](/?search=silinternational%2Fsimplesamlphp-module-material)ArchivedSimplesamlphp-module

silinternational/simplesamlphp-module-theme-material
====================================================

Material Design theme for IdP Hub based on SimpleSAMLphp

8.1.2(2y ago)91614MITPHPPHP &gt;=7.0

Since Feb 21Pushed 1y ago6 watchersCompare

[ Source](https://github.com/sil-org/simplesamlphp-module-material)[ Packagist](https://packagist.org/packages/silinternational/simplesamlphp-module-theme-material)[ RSS](/packages/silinternational-simplesamlphp-module-theme-material/feed)WikiDiscussions develop Synced 2mo ago

READMEChangelog (10)Dependencies (4)Versions (65)Used By (0)

Archived
========

[](#archived)

This repository is no longer maintained. It has been included directly in .

\--

Material Design theme for use with SimpleSAMLphp

Installation
------------

[](#installation)

```
composer.phar require silinternational/simplesamlphp-module-material:dev-master

```

Configuration
-------------

[](#configuration)

Update `/simplesamlphp/config/config.php`:

```
'theme.use' => 'material:material'

```

*[ssp-base](https://github.com/silinternational/ssp-base) provides a convenience by loading this config with whatever is in the environment variable `THEME_USE`.*

### Google reCAPTCHA

[](#google-recaptcha)

If a site key has been provided in `$this->data['recaptcha.siteKey']`, the username/password page may require the user prove his/her humanity.

### Branding

[](#branding)

Update `/simplesamlphp/config/config.php`:

```
'theme.color-scheme' => ['indigo-purple'|'blue_grey-teal'|'red-teal'|'orange-light_blue'|'brown-orange'|'teal-blue']

```

The login page looks for `/simplesamlphp/www/logo.png` which is **NOT** provided by default.

### Analytics

[](#analytics)

Update `/simplesamlphp/config/config.php`:

```
'analytics.trackingId' => 'G-some-unique-id-for-your-site'

```

*[ssp-base](https://github.com/silinternational/ssp-base) provides a convenience by loading this config with whatever is in the environment variable `ANALYTICS_ID`.*

### Announcements

[](#announcements)

Update `/simplesamlphp/announcement/announcement.php`:

```
 return 'Some important announcement';

```

*[ssp-utilities](https://github.com/silinternational/ssp-utilities) provides whatever is returned by `/simplesamlphp/announcement/announcement.php`.*

If provided, an alert will be shown to the user filled with the content of that announcement. HTML is supported.

Testing theme
-------------

[](#testing-theme)

[Make](https://www.gnu.org/software/make/), [Docker](https://www.docker.com/products/overview) and [Docker Compose](https://docs.docker.com/compose/install/) are required.

### Setup

[](#setup)

1. Setup `localhost` (or `192.168.62.54`, if using Vagrant) aliases for `ssp-hub1.local`, `ssp-hub2.local`, `ssp-idp1.local`, `ssp-idp2.local`, `ssp-idp3.local`, `ssp-idp4.local`, `ssp-sp1.local` and `ssp-sp2.local`. This is typically done in `/etc/hosts`. *Example line: `0.0.0.0  ssp-hub1.local ssp-idp1.local ssp-idp2.local ssp-idp4.local ssp-hub2.local ssp-idp3.local ssp-sp1.local ssp-sp2.local`*
2. Start test environment, i.e., `make` from the command line.

### Hub page

[](#hub-page)

1. Goto [Hub 1](http://ssp-hub1.local/module.php/core/authenticate.php?as=hub-discovery)

### Error page

[](#error-page)

1. Goto [Hub 1](http://ssp-hub1.local)
2. Click **Federation** tab
3. Click either **Show metadata** link
4. Login as hub administrator: `username=`**admin** `password=`**abc123**

### Logout page

[](#logout-page)

1. Goto [Hub 1](http://ssp-hub1.local)
2. Click **Authentication** tab
3. Click **Test configured authentication sources**
4. Click **admin**
5. Login as hub administrator: `username=`**admin** `password=`**abc123**
6. Click **Logout**

### Login page

[](#login-page)

#### Without theme in place

[](#without-theme-in-place)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp1** (first one)
3. login page should **NOT** have material design

#### With theme in place

[](#with-theme-in-place)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp2** (second one)
3. login page **SHOULD** have material design

### Forgot password functionality

[](#forgot-password-functionality)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp2** (second one)
3. Forgot password link should be visible

### Helpful links functionality

[](#helpful-links-functionality)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Help link should be visible under login form
4. Profile link should be visible under login form

### Expiry functionality

[](#expiry-functionality)

#### About to expire page (expires in one day)

[](#about-to-expire-page-expires-in-one-day)

*Note: This nag only works once since choosing later will simply set the nag date into the future a little. If needed, use a new private/incognito browser window to retry.*

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp2** (second one)
3. Login as an "about to expire" user: `username=`**near\_future** `password=`**a**
4. Click **Later**
5. Click **Logout**

#### About to expire page (expires in three days)

[](#about-to-expire-page-expires-in-three-days)

*Note: This nag only works once since choosing later will simply set the nag date into the future a little. If needed, use a new private/incognito browser window to retry.*

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp2** (second one)
3. Login as an "about to expire" user: `username=`**near\_future** `password=`**a**
4. Click **Later**
5. Click **Logout**

#### Expired page

[](#expired-page)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp2** (second one)
3. Login as an "expired" user: `username=`**already\_past** `password=`**a**

### Multi-factor authentication (MFA) functionality

[](#multi-factor-authentication-mfa-functionality)

#### Nag about missing MFA setup

[](#nag-about-missing-mfa-setup)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as an "unprotected" user: `username=`**nag\_for\_mfa** `password=`**a**
4. The "learn more" link should be visible
5. Click **Enable**
6. Click your browser's back button
7. Click **Remind me later**
8. Click **Logout**

#### Nag about missing password recovery methods

[](#nag-about-missing-password-recovery-methods)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a user without any methods: `username=`**nag\_for\_method** `password=`**a**
4. Enter one of the following codes to verify (`94923279, 82743523, 77802769, 01970541, 37771076`)
5. Click **Add**
6. Click your browser's back button
7. Click **Remind me later**
8. Click **Logout**

#### Force MFA setup

[](#force-mfa-setup)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as an "unsafe" user: `username=`**must\_set\_up\_mfa** `password=`**a**

#### Backup code

[](#backup-code)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a "backup code" user: `username=`**has\_backupcode** `password=`**a**
4. Enter one of the following codes to verify (`94923279, 82743523, 77802769, 01970541, 37771076`)
5. Click **Logout**
6. In order to see the "running low on codes" page, simply log back in and use another code.
7. In order to see the "out of codes" page, simply log back in and out repeatedly until there are no more codes.

#### TOTP code

[](#totp-code)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a "totp" user: `username=`**has\_totp** `password=`**a**
4. You should see the form to enter a totp code.
5. Set up an app using this secret, `JVRXKYTMPBEVKXLS`
6. Enter code from app to verify
7. Click **Logout**

#### Key (U2F)

[](#key-u2f)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a "u2f" user: `username=`**has\_u2f** `password=`**a**
4. Insert key and press
5. Click **Logout**

#### Key (WebAuthn)

[](#key-webauthn)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a "webauthn" user: `username=`**has\_webauthn** `password=`**a**
4. Insert key and press
5. Click **Logout**

#### Multiple options

[](#multiple-options)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a "multiple option" user: `username=`**has\_all** `password=`**a**
4. Click **MORE OPTIONS**

#### Multiple options (legacy, with U2F)

[](#multiple-options-legacy-with-u2f)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a "multiple option" user: `username=`**has\_all\_legacy** `password=`**a**
4. Click **MORE OPTIONS**

#### Manager rescue

[](#manager-rescue)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a "multiple option" user: `username=`**has\_all** `password=`**a**
4. Click **MORE OPTIONS**
5. Click the help option
6. Choose **Send**

*NOTE: At this time, the correct code is not known and can't be tested locally (it's only available in an email to the manager)*

### Announcements functionality

[](#announcements-functionality)

1. Goto [SP 2](http://ssp-sp2.local:8083/module.php/core/authenticate.php?as=hub-discovery)
2. The announcement should be displayed on the hub
3. Click **idp3** (first one)
4. The announcement should be displayed at the login screen

### SP name functionality

[](#sp-name-functionality)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. The sp name should appear in the banner

### Profile review functionality

[](#profile-review-functionality)

1. Goto [SP 1](http://ssp-sp1.local:8082/module.php/core/authenticate.php?as=hub-discovery)
2. Click **idp4** (third one)
3. Login as a "Review needed" user: `username=`**needs\_review** `password=`**a**
4. Enter one of the following printable codes to verify (`94923279, 82743523, 77802769, 01970541, 37771076`)
5. Click the button to update the profile
6. Click the button to continue
7. Click **Logout**

i18n support
------------

[](#i18n-support)

Translations are categorized by page in definition files located in the `dictionaries` directory.

Localization is affected by the configuration setting `language.available`. Only language codes found in this property will be utilized.
For example, if a translation is provided in Afrikaans for this module, the configuration must be adjusted to make 'af' an available language. If that's not done, the translation function will not utilize the translations even if provided.

### Debugging

[](#debugging)

Xdebug can be enabled by doing the following:

1. Define `REMOTE_DEBUG_IP` in `local.env`. This should be the IP address of your development machine, i.e. the one that is running your IDE. If you're using Linux as your Docker host, you can use 172.17.0.1 here. Note that the IP address shown in your containers' logs may not be your machines actual IP address (it could be for a VM, for example).
2. Map run-debug.sh into the container you wish to debug. For example:

```
    volumes:
      - ./development/run-debug.sh:/data/run.sh
```

3. Enable debugging in your IDE. See the next section for PhpStorm setup.

Configuring PhpStorm for remote debugging
-----------------------------------------

[](#configuring-phpstorm-for-remote-debugging)

In PhpStorm go to: Preferences &gt; PHP &gt; Debug &gt; DBGp Proxy and set the following settings:

- Host: (your IP address or hostname)
- Port: 9000

Set path mappings in: Preferences &gt; PHP &gt; Servers

- Add a server, giving it your IP address and a port of 9000, and map the project folder to '/data/vendor/simplesamlphp/simplesamlphp/modules/material'
- Map other directories as needed. PhpStorm should prompt when an unrecognized path is encountered.

Then start listening by clicking the "listen" button on the PhpStorm toolbar.

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance27

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community20

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~46 days

Recently: every ~92 days

Total

57

Last Release

752d ago

Major Versions

3.1.1 → 4.0.02017-11-28

4.0.6 → 5.0.02018-01-12

5.2.2 → 6.0.02018-03-05

6.1.0 → 7.0.02019-04-10

7.6.2 → 8.0.02022-11-30

PHP version history (2 changes)1.0.0PHP &gt;=5.4

7.3.0PHP &gt;=7.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/a5e188393958c4505bb06d9e79ed99a47d1cd42551142f02ef364d8268449ef8?d=identicon)[fillup](/maintainers/fillup)

![](https://www.gravatar.com/avatar/836739aa4f60c754dc9a4a547ebd0c166e4b6e855d9f119df2be5aec92f3a375?d=identicon)[forevermatt](/maintainers/forevermatt)

---

Top Contributors

[![forevermatt](https://avatars.githubusercontent.com/u/6233204?v=4)](https://github.com/forevermatt "forevermatt (43 commits)")[![longrunningprocess](https://avatars.githubusercontent.com/u/4412848?v=4)](https://github.com/longrunningprocess "longrunningprocess (27 commits)")[![hobbitronics](https://avatars.githubusercontent.com/u/70765247?v=4)](https://github.com/hobbitronics "hobbitronics (21 commits)")[![Baggerone](https://avatars.githubusercontent.com/u/8058522?v=4)](https://github.com/Baggerone "Baggerone (18 commits)")[![briskt](https://avatars.githubusercontent.com/u/3172830?v=4)](https://github.com/briskt "briskt (14 commits)")[![fillup](https://avatars.githubusercontent.com/u/556105?v=4)](https://github.com/fillup "fillup (5 commits)")[![jason-jackson](https://avatars.githubusercontent.com/u/35783387?v=4)](https://github.com/jason-jackson "jason-jackson (3 commits)")

---

Tags

materialmodulesimplesamlphptheme

### Embed Badge

![Health badge](/badges/silinternational-simplesamlphp-module-theme-material/health.svg)

```
[![Health](https://phpackages.com/badges/silinternational-simplesamlphp-module-theme-material/health.svg)](https://phpackages.com/packages/silinternational-simplesamlphp-module-theme-material)
```

###  Alternatives

[simplesamlphp/simplesamlphp

A PHP implementation of a SAML 2.0 service provider and identity provider.

1.1k12.4M193](/packages/simplesamlphp-simplesamlphp)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
