uhi67/mdl-getnot

此包的最新版本(dev-master)没有可用的许可信息。

从moodle获取用户通知

安装: 0

依赖: 0

建议: 0

安全性: 0

类型:项目

dev-master 2021-04-11 21:01 UTC

This package is not auto-updated.

Last update: 2024-09-26 08:29:52 UTC


README

使用此API,您可以通过用户名(userName)查询任何用户的收到的通知和新消息(在回话通道)。API需要直接访问Moodle数据库。已测试Moodle v3.9

安装

  1. git clone ... 从git仓库克隆项目
  2. 运行 composer install
  3. 使 /web 可供web服务器访问
  4. 在apache配置文件或 .env 文件中设置环境变量。

环境变量

在apache配置文件或docker-compose.yml中设置环境变量

变量描述默认值或示例
SECRET用于计算token的种子
DELTA秒级的时间戳超时300
DB_USERNAME"moodle"
DB_DSN"mysql:host=localhost;dbname=moodle"
DB_PASSWORD
DB_PREFIX | | "mdl"
DEBUG开发时设置为10

用法

使用以下GET参数调用 http://mdl-getnot.test/get_messages.php

  • uid: 要查询的用户名(例如eduPersonPrincipalName)
  • ts: 查询创建的Unix时间戳(对于delta秒有效)(UTC)
  • token: hash('sha512', "$uid,$ts,$secret") 其中secret是配置的共享密钥

返回包含以下字段的JSON对象

  • status: 'success' 或 'error'
  • error: 只有当状态是 'error' 时存在,错误消息
  • notifications: 整数,未读通知的数量
  • messages: 整数,未读消息的数量
  • requests: 整数,收到的联系请求的数量

示例 1

http://mdl-getnot.test/get_messages.php?uid=uhi@pte.hu&ts=1617994451&token=2264836edb030066264e1f06683c9c1c752ba609275a47cc2b94f7b890a55392f6a488d058c4f86dce189297ba51bd59bdc0789b681b6741babd1f692112e26e

结果

{"status":"succes","notifications":"0","messages":"1","requests":"0"}

示例 2

从另一个SAML认证的php应用程序调用以获取当前登录用户的通知。

        $authSource = 'default-ps'; // ... or whatever configured
        $saml = new \SimpleSAML\Auth\Simple($authSource); // SimpleSAMLphp SP >= 1.18.8 is required
	    $uidAttribute = 'eduPersonPrincipalName';
	    $secret = 'xxxx'; 
		if($saml->isAuthenticated()) {
		    $attributes = $saml->getAttributes();
		    if(isset($attributes[$uidAttribute]) {
		        $uid =  $attributes[$uidAttribute];
                if(is_array($uid)) $uid = $uid[0];
                $ts = time();
                $query = [
                    'uid' => $uid,
                    'ts' => $ts,
                    'token' => hash('sha512', "$uid,$ts,$secret"),
                ];
                $mdl_response = json_decode(file_get_contents($this->url.'?'.http_build_query($query)), JSON_OBJECT_AS_ARRAY);
		    }
		}