usf-it / usf-idm-common
USF身份管理服务的通用库。
Requires
- php: >=5.5.0
- caseyamcl/configula: ^2.3.1
- epierce/cas-rest-client: ^0.3.0
- monolog/monolog: ^1.12.0
- phpseclib/phpseclib: ^2.0
- swiftmailer/swiftmailer: ^5.4.1
- twilio/sdk: ^3.12.8
- yowcow/mime-base64-urlsafe: ^0.1.2
Requires (Dev)
- phpunit/phpunit: @stable
This package is not auto-updated.
Last update: 2020-09-15 19:54:50 UTC
README
USF身份管理服务通用库的Composer包。此包提供以下类
UsfEncryption
提供与USF使用的Java和C#实现兼容的AES-256加密和解密例程。UsfConfig
封装了Configula PHP配置库。UsfLogger
封装了Monolog PHP日志库。- 提供将日志写入以下内容的处理程序
- 文件
- 系统日志
- Firebug的FirePHP插件
- 电子邮件,使用Swift-Mailer库
- 短信,使用Twilio API
- 提供将日志写入以下内容的处理程序
UsfLogRegistry
提供一个包含多个UsfLogger
实例的单个对象。SlimLogMiddleware
将UsfLogRegistry
适配到Slim 2 PHP框架。RequestResultLogger
用于记录请求数据的Slim 3中间件。ImageServiceClient
提供了一个用于ImageService的简单客户端。NamsIdentifierConverstionClient
提供了一个用于ws_convert web服务的简单客户端。- Slim 2测试工具。
安装
使用Composer安装usf-idm-common
。
$ composer require usf-it/usf-idm-common
UsfEncryption
以下是一个加密和解密字符串的示例
<?php require_once ('vendor/autoload.php'); use USF\IdM\UsfEncryption; //AES-256 requires a 32-character key $key = "12345678901234561234567890123456"; $crypt = UsfEncryption::encrypt($key, "this is a test"); echo "Encrypted string: ".$crypt."\n"; echo "Decrypted string: ".UsfEncryption::decrypt($key, $crypt); ?>
ImageServiceClient
以下是一个获取用户'U12345678'的URL的示例
<?php require_once ('vendor/autoload.php'); use USF\IdM\Clients\ImageServiceClient; $appName = "myApp" $appKey = "12345678901234561234567890123456"; echo getImageURL('http', 'image.example.edu', 8080, '/ImageService', 'U12345678', $appName, $appKey); ?>
UsfConfig
这是围绕Configula的一个简单包装。
- 扫描指定目录以查找配置文件并将数据合并到一个配置对象中。
- 支持.php、.ini、.json和.yml配置文件类型
- 支持“本地”配置文件,以覆盖默认配置文件。
- 简单用法
//Access configuration values from default location (/usr/local/etc/idm_config)
$config = new UsfConfig();
$some_value = $config->some_key;
- 对您的配置设置进行数组迭代器访问
//Access conifguration values
$config = new UsfConfig('/path/to/config/files');
foreach ($config as $item => $value) {
echo "<li>{$item} is {$value}</li>";
}
####注意
- UsfConfig对象一旦实例化,就是不可变的,这意味着它是只读的。您不能更改配置值。但是,您可以创建任意数量的UsfConfig对象。
- 如果任何配置文件包含无效代码(例如无效的PHP或格式错误的JSON),Configula类不会抛出错误。相反,它将简单地跳过读取该文件。
- 在处理PHP文件时,UsfConfig将在此文件中寻找名为$config的数组。
####本地配置文件
在某些情况下,您可能希望有本地配置文件以覆盖默认配置文件。要覆盖任何配置文件,创建另一个配置文件,并在末尾添加 .local.EXT。
例如,如果存在该文件,则名为database.yml的配置文件将被database.local.yml覆盖。
如果您希望某些设置包含在版本控制中,同时忽略某些设置,这非常有用(只需将/path/to/config/*.local.EXT添加到您的.gitignore中即可)
UsfLogRegistry
此类提供了一个包含UsfLogger对象数组的单例,用于记录应用程序的各个部分。目前,我们支持将日志记录到文件、syslog、FirePHP、电子邮件和短信。
此外,这些日志方法可以根据严重性激活 - 将通用信息发送到日志文件,而重要信息通过电子邮件发送,关键警报通过短信发送。
#####基本用法
<?php require_once ('vendor/autoload.php'); use USF\IdM\UsfLogRegistry; // Create an instance of UsfLogRegistry $logger = UsfLogRegistry::getInstance(); // Calling addLogger with no options creates a loghandler named 'log' that // writes messages to /var/log/usf-logger.log $logger->addLogger(); // log an error message with extra array data $logger->log->warn('This is a test message.', ['foo' => 'bar']); ?>
#####记录到不同的文件
<?php require_once ('vendor/autoload.php'); use USF\IdM\UsfLogRegistry; // Create an instance of UsfLogRegistry $logger = UsfLogRegistry::getInstance(); $logger->addLogger(); // Log audit messages to a different file $logger->addLogger('audit','file',['log_location' => '/var/log/audit_log', 'log_level' => 'info']); // This message will only go to /var/log/usf-logger.log $logger->log->warn('This is a test message.'); // This message will only go to /var/log/audit_log $logger->audit->info('User login',['username'=>$user, 'timestamp' => date(DATE_RFC2822)]); ?>
#####基于严重性的多个处理程序进行记录
<?php require_once ('vendor/autoload.php'); use USF\IdM\UsfLogRegistry; $logger = UsfLogRegistry::getInstance(); $logger->addLogger(); //Configure email handler $mailConfig = [ 'log_level' => 'error', 'host' => 'smtp.gmail.com', 'port' => 465, 'username' => 'alert@example.edu', 'password' => 'secret', 'subject' => 'Log Message', // Who the message will be from 'from' => ['root@localhost' => 'Admin'], // one or more email addresses the logs will go to 'to' => ['my_address@example.edu'] ]; // Add an additional handler that emails critical messages $logger->log->addLogHandler('mail', $mailConfig); // Add a log processor that logs the method, class, file and line number of the call $logger->log-addLogProcessor('introspection'); //This message will be logged to file AND emailed $logger->log->critical('Critical Problem!!', ['var1' => 'true', 'var2' => 'false']); ?>
#####注意事项
- 在Web应用程序中使用时,URL、服务器和远程IP、HTTP方法和引用会自动记录。
SlimLogMiddleware
有关Slim框架中中间件系统的更多信息,请参阅[Slim框架文档](http://docs.slimframework.com/#Middleware-Overview)。
要将中间件添加到您的Slim项目,并将所有输出记录到/tmp/audit.log
<?php use \USF\IdM\SlimLogMiddleware; require_once('vendor/autoload.php'); $app = new \Slim\Slim(); $app->environment['log.config'] = [ ['name'=>'audit', 'type' => 'file', 'default' => true, 'config' => ['log_location' => '/tmp/audit.log'], 'processor' => 'introspection'] ]; //Add the Log Middleware $app->add(new SlimLogMiddleware()); $app->get('/foo', function () use ($app) { echo ("Logging an alert!"); //Use the default log handler $app->log->alert('this is an alert!'); // Use a named log handler $app->log->audit->info('This is an informational message with extra data', ['foo' => 'bar']); }); $app->run();
log.config
变量包含用于Monolog日志处理器的配置值数组。《name》、《type》和《config》键对应于《UsfLogRegistry->addLogger()》的参数,而《processor》键将命名日志处理器添加到该日志处理器。应该将《default》键设置为true,使其成为Slim框架的默认日志处理器。如果没有处理器将《default》设置为true,则将使用列表中的第一个。
#####记录到不同的文件
<?php use \USF\auth\SlimLogMiddleware; require_once('vendor/autoload.php'); $app = new \Slim\Slim(); $app->environment['log.config'] = [ ['name'=>'log', 'type' => 'file', 'default' => true, 'config' => ['log_location' => '/tmp/application.log']], ['name'=>'audit', 'type' => 'file', 'default' => false, 'config' => ['log_location' => '/tmp/audit.log', 'log_level' => 'info']] ]; //Add the Log Middleware $app->add(new SlimLogMiddleware()); $app->get('/foo', function () use ($app) { // This message will only go to /tmp/application.log $app->log->warn('This is a test message.'); // This message will only go to /tmp/audit_log $app->log->audit->info('User login',['username login', 'timestamp' => date(DATE_RFC2822)]); }); $app->run();
#####基于严重性的多个处理程序进行记录
<?php use \USF\auth\SlimLogMiddleware; require_once('vendor/autoload.php'); $app = new \Slim\Slim(); //Configure email handler $mailConfig = [ 'log_level' => 'error', 'host' => 'smtp.gmail.com', 'port' => 465, 'username' => 'alert@example.edu', 'password' => 'secret', 'subject' => 'Log Message', // Who the message will be from 'from' => ['root@localhost' => 'Admin'], // one or more email addresses the logs will go to 'to' => ['my_address@example.edu'] ]; // Configure a logger (log) with two handlers: one that logs to a file and one that sends emails $app->environment['log.config'] = [ ['name'=>'log', 'type' => 'file', 'default' => true, 'config' => ['log_location' => '/tmp/application.log']], ['name'=>'log', 'type' => 'mail', 'config' => $mailConfig] ]; //Add the Log Middleware $app->add(new SlimLogMiddleware()); $app->get('/foo', function () use ($app) { // This message will only be logged to a file $app->log->warn('This is a warning'); //This message will be logged to file AND emailed $app->log->critical('Critical Problem!!', ['var1' => 'true', 'var2' => 'false']); }); $app->run(); ?>