Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/indiana-university/lms-canvas-multiclassmessenger

LTI tool which allows instructors to post an announcement/message to multiple courses at the same time.
https://github.com/indiana-university/lms-canvas-multiclassmessenger

announcements canvas lms lti messages

Last synced: about 2 months ago
JSON representation

LTI tool which allows instructors to post an announcement/message to multiple courses at the same time.

Awesome Lists containing this project

README

        

# lms-canvas-multiclassmessenger
App for sending messages and announcements to multiple Canvas classes at once.

## Running standalone
Add env vars or system properties as desired.

| ENV Property | System Property | Default Value | Description |
|--------------------------|---------------------------|-------------------------|----------------------------------------------------------------------------------------------------------------|
| `APP_FULLFILEPATH` | `app.fullFilePath` | `/usr/src/app/config` | Directory for configuration files |
| `APP_OVERRIDESFILENAME` | `app.overridesFileName` | `overrides.properties` | Customizable filename for additional configurations. Would be located in the above directory. |
| `SPRING_PROFILES_ACTIVE` | `spring.profiles.active` | | Supply spring profiles to activate. See configuration details below for potential values. |
| `APP_ENV` | `app.env` | `dev` | Environment designator. Free-form and can be used for your own purposes. Shows up in the application footer. |

## Setup Database
After compiling, see `target/generated-resources/sql/ddl/auto/postgresql9.sql` for appropriate ddl.
Insert a record into the `LTI_AUTHZ` table with a key and secret. The context should be either `lms_lti_multiclassmessenger` or `*`.
A wildcard (`*`) is useful for testing multiple tools, but may not be recommended in production environments.

## Test a local launch
Use an LTI tool consumer launcher, like http://ltiapps.net/test/tc.php. Provide an appropriate key/secret, as defined above.

PropertyValue
Launch URLhttp://localhost:8080/lti
Consumer Key

``

Shared secret

``

Role

An appropriate LTI role, like `Instructor`, `Learner`, etc

Custom parameters

```
canvas_course_id=123456
canvas_user_login_id=chmaurer
instructure_membership_roles=http://purl.imsglobal.org/vocab/lis/v2/membership#Instructor
mcm_tool_id=
```
`mcm_tool_id` will accept a value of either `msg` or `annc`, depending on which flavor of the tool you want to launch.

## Canvas XML
Example xml for both the announcements and messages tools can be found in the [examples](examples) directory.

## Configuration
If choosing to use properties files for the configuration values, the default location is `/usr/src/app/config`, but that can be overridden by setting the `APP_FULLFILEPATH` value via system property or environment variable.
You may use `security.properties`, `overrides.properties`, or set the `APP_OVERRIDESFILENAME` value with your desired file name.

### Canvas Configuration
The following properties need to be set to configure the communication with Canvas and Canvas Catalog.
They can be set in a properties file, or overridden as environment variables.

| Property | Default Value | Description |
|----------------------|-----------------------------|-----------------------------------------------------------|
| `canvas.host` | | Hostname of the Canvas instance |
| `canvas.sso.host` | | Hostname of the Canvas OIDC auth domain |
| `canvas.baseUrl` | https://`${canvas.host}` | Base URL of the Canvas instance |
| `canvas.baseApiUrl` | `${canvas.baseUrl}`/api/v1 | Base URL for the Canvas API |
| `canvas.token` | | Token for access to Canvas instance |
| `canvas.accountId` | | Your institution's root accountId in your Canvas instance |
| `catalog.baseUrl` | | Base URL of the Canvas Catalog instance |
| `catalog.baseApiUrl` | `${catalog.baseUrl}`/api/v1 | Base URL for the Canvas Catalog API |
| `catalog.token` | | Token for access to the Canvas Catalog instance |

### Database Configuration
The following properties need to be set to configure the communication with a database.
They can be set in a properties file, or overridden as environment variables.

| Property | Description |
|-------------------|------------------------------------------------------------------------------------------------------------------------|
| `lms.db.user` | Username used to access the database |
| `lms.db.url` | JDBC URL of the database. Will have the form `jdbc:://:/` |
| `lms.db.password` | Password for the user accessing the database |
| `lms.db.poolType` | Fully qualified name of the connection pool implementation to use. By default, it is auto-detected from the classpath. |

### Configure support contact information
The following properties need to be set to configure the contact information on the global error page.
They can be set in a security.properties file, or overridden as environment variables.

| Property | Description |
|-------------------------|-----------------------------------------------------------------------------------------------------------|
| `lti.errorcontact.name` | Display name for your support organization |
| `lti.errorcontact.link` | Contact mechanism - URL or mailto:email (e.g. `http://support.school.edu` or `mailto:[email protected]`) |

### LTI issuer configuration
Be sure to configure an environment appropriate issuer for the Canvas instance that is launching the tool.

See https://canvas.instructure.com/doc/api/file.lti_dev_key_config.html#overview-of-an-lti-launch for details.

| Property | Description |
|-------------------|----------------------------------------------------------|
| `canvas.issuer` | Issuer for the Canvas instance doing the LTI tool launch |

### Redis Configuration (optional)
If you would like to use Redis for session storage, you will need to enable it by including the value `redis-session` into the `SPRING_PROFILES_ACTIVE` environment variable. Be aware that if the tool requires multiple values, that there could be more than one profile value in there.

Additionally, the following properties need to be set to configure the communication with Redis.
Then can be set in a properties file, or overridden as environment variables.

| Property | Description |
|-------------------------|------------------------------------------------|
| `spring.redis.host` | Redis server host. |
| `spring.redis.port` | Redis server port. |
| `spring.redis.database` | Database index used by the connection factory. |
| `spring.redis.password` | Login password of the redis server. |

### Vault Configuration (optional)
If you would like to use HasiCorp's Vault for secure property storage, you will need to enable it by including the value `vault` into the `SPRING_PROFILES_ACTIVE` environment variable. Be aware that if the tool requires multiple values, that there could be more than one profile value in there.
Include any `spring.cloud.vault.*` properties that your environment requires in a properties file, or override as environment variables.

### Exposing the LTI authz REST endpoints
If you would like to expose the LTI authz endpoints in this tool (for CRUD operations on the LTI authorizations), you will
need to enable it by including the value `ltirest` into the `SPRING_PROFILES_ACTIVE` environment variable. Be aware that
if the tool requires multiple values, that there could be more than one profile value in there.

#### Enabling swagger-ui for the LTI authz REST endpoints
:warning: Experimental :warning:

If you would like to enable the swagger-ui for interacting with the endpoints, include the value `swagger` into the `SPRING_PROFILES_ACTIVE` environment variable.
Once enabled, the ui will be available at `/api/lti/swagger-ui.html`. There are some additional OAuth2 considerations
that need to be accounted for while using this setup.

This is marked as experimental due to the fact that we aren't running with this option at IU. We are running into CORS
issues when trying to talk to our OAuth2 service via swagger, so we can't verify if it really works or not!