usf-it/usf-idm-common

USF身份管理服务的通用库。

0.6.0 2016-05-24 16:15 UTC

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日志库。
    • 提供将日志写入以下内容的处理程序
  • UsfLogRegistry 提供一个包含多个 UsfLogger 实例的单个对象。
  • SlimLogMiddlewareUsfLogRegistry 适配到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();

?>