keycloak

Keycloak 1. create realm 用于对接不同网站的登录用户,隔离区域 2. how to use php composer require stevenmaguire/oauth2-keycloak SsoKeycloakClient.php class SsoKeycloakClient implements SsoClientInterface { use ApiConfigTrait; use ApiLoggerTrait; const API_NAME = "keycloak"; private $server_access_token_path = "/data/keycloak_server_access_token.log"; /** * @var Keycloak */ protected $provider; /** * @var GuzzleHttp\Client */ private $client; public function __construct() { $this->initLogger(-3, 2); $this->loadApiConfig(self::API_NAME); try { $redirectUri = ShareSession::get('redirect_uri') ? ShareSession::get('redirect_uri') : $this->apiConfig->ExtraConfig['redirect_uri']; } catch (\Throwable $e) { $redirectUri = $this->apiConfig->ExtraConfig['redirect_uri']; } $redirectUri = $this->apiConfig->ExtraConfig['redirect_uri']; $this->provider = new Keycloak([ 'authServerUrl' => $this->apiConfig->Host, 'realm' => $this->apiConfig->ExtraConfig['realm'], 'clientId' => $this->apiConfig->ExtraConfig['login_client_id'], 'clientSecret' => $this->apiConfig->ExtraConfig['login_client_secret'], 'redirectUri' => $redirectUri, ]); $this->client = new GuzzleHttp\Client([ 'timeout' => 30....

八月 19, 2022 · 3 分钟 · Ken

Mongodb数据库-python有关的操作

flask flask-pymongo flask-mongoengine 数据内容 [{ "_id": { "$oid": "62e3525f18909374eb4de53f" }, "plat": { "wechat": "bc61736d-7ed0-47bb-ba1b-33474fecde23", "alipay": "random" }, "created_at": { "$date": { "$numberLong": "1659093727910" } }, "updated_at": { "$date": { "$numberLong": "1659093727910" } }, "nickname": "su" }] 根据 plat.wechat中来搜索用户 pymongo语法: mongo.db.user.find_one(filter={"plat.wechat":openid}) mongoengine语法: User.objects(plat__wechat=openid).first()

八月 19, 2022 · 1 分钟 · Ken

powerdns-学习如何搭建个人专属DNS服务器

powerdns | powerdns_http_api | download link 1、 环境 environment 系统 centos 7.9 2、 安装 install powerdns yum install epel-release yum-plugin-priorities curl -o /etc/yum.repos.d/powerdns-auth-45.repo https://repo.powerdns.com/repo-files/centos-auth-45.repo yum install pdns 3、 安装 install pdns-recursor yum -y install epel-release yum-plugin-priorities curl -o /etc/yum.repos.d/powerdns-rec-45.repo https://repo.powerdns.com/repo-files/centos-rec-45.repo yum -y install pdns-recursor 4、 配置 configure 修改mysql配置文件 [mysqld] /etc/my.cnf innodb_file_per_table = 1 innodb_flush_log_at_trx_commit = 0 character-set-server=utf8 collation-server=utf8_general_ci create database poweradmin; grant all on poweradmin.* to puser1@localhost identified by "wisdom123@"; flush privileges; mysql -u root poweradmin < /usr/share/doc/pdns-backend-mysql-4....

八月 17, 2022 · 1 分钟 · Ken

wechaty-描述各方法的类型

Message 简单来说就是消息,在微信中聊天的文字,转账,语音等等都是消息的一种,因此是最重要的一项 官网 # 消息类型 class MessageType(betterproto.Enum): MESSAGE_TYPE_UNSPECIFIED = 0 MESSAGE_TYPE_ATTACHMENT = 1 MESSAGE_TYPE_AUDIO = 2 MESSAGE_TYPE_CONTACT = 3 MESSAGE_TYPE_EMOTICON = 4 MESSAGE_TYPE_IMAGE = 5 图像 MESSAGE_TYPE_TEXT = 6 文字 MESSAGE_TYPE_VIDEO = 7 MESSAGE_TYPE_CHAT_HISTORY = 8 MESSAGE_TYPE_LOCATION = 9 MESSAGE_TYPE_MINI_PROGRAM = 10 MESSAGE_TYPE_TRANSFER = 11 MESSAGE_TYPE_RED_ENVELOPE = 12 MESSAGE_TYPE_RECALLED = 13 MESSAGE_TYPE_URL = 14 常用说明: type 消息类型,具体类型参考上述 print(msg.type()) text 接受的文本信息 print(msg.text()) say 回复信息,不仅文本消息,图片等都可以发送 await msg.say(msg.text()) 发送图片 from wechaty import (FileBox) file_box = FileBox....

八月 15, 2022 · 1 分钟 · Ken

wechaty-初识wechaty用途

wechaty能做到什么 能自定制微信机器人服务,为你订造专属智能客服 能利用微信强大的社交机制带来潜在利益 github | 官网教程 其他教程 wechaty.readthedocs.io 有关视频教程资源: live-coding AI情话 准备阶段,有条件的小伙伴可以自己搭建一个服务端,好处就在于免费,或者可以使用网上其他提供协议,可参考 Padlocal协议 和 Paimon协议, 本教程主要以自搭建为主

八月 15, 2022 · 1 分钟 · Ken

php-laravel升级注意事项

官网 现在laravel的最新版已经升级到了9.0,目前公司还在用5.x版本,因此对于升级的注意事项做个记录,当做预防以后的踩坑 注意事项 同一个设置成支持php7.0,php8,新的9.0仅支持php8以上,为了能平滑迁移项目,需要服务器可支持2个版本 购物车插件gloudemans/shoppingcart 不可使用 , 测试 bumbummen99/shoppingcart 是否可替代 接收参数函数 Input::get() 废弃,用request()->get() 替代 $input{$i+1} 花括号不可用 $input[$i+1] Route::controller 隐式控制路由废弃, 使用lesichkovm/laravel-advanced-route 插件 AdvancedRoute::controller 替代 队列在redis上保存的值有较大变动, laravel/vendor/laravel/framework/src/Illuminate/Queue/Queue.php createPayload函数 增加部分变量 laravel/vendor/laravel/framework/src/Illuminate/Queue/RedisQueue.php createPayload函数 attempts设置默认为0 原生类的构造函数改成__construct 对于整形和字符串判断更严格了,如mktime 参数必须是int; abs("") 会报错 有用到的废弃函数 create_function 需要更换 ORM查询返回的数据永远是obj类型, conf/database.inc.php 设置的$ORM->setFetchMode(PDO::FETCH_ASSOC); 无效,源自 https://laravel.com/docs/5.4/upgrade 以上的记录是我实际的项目产生的问题,因此不一定适合大部分人 正则表达式替换php7的语法警告 (\$[a-zA-Z\_]+)\[([a-zA-Z]+[a-zA-Z\_\d]*)\] $1['$2']

八月 15, 2022 · 1 分钟 · Ken

php-总结laravel使用技巧-001

是否有人对于每次写一个laravel的控制器都要在路由上写一堆的声明路由感到麻烦,后期维护又不好处理,这里总结下如何让自己写出的接口更加规范格式化,本人在laravel项目中使用了dingo/api .env上配置dingo的配置信息 #Dingo API API_PREFIX=api API_VERSION=v1 API_DEBUG=true 在route.php的路由方法中添加这几行代码 $api = app('Dingo\Api\Routing\Router'); $api->version('v1', function ($api) { $api->any('{slug}', '\App\Http\ApiRouter@route')->where('slug', '(.*)?'); }); 封装统一入口ApiRouter.php use App; use Dingo\Api\Routing\Helpers; use Illuminate\Routing\Controller; use Illuminate\Support\Str; use core\util\router\RouterHelper; class ApiRouter extends Controller { use Helpers; private $ns; const API_NS = 'core\bapi'; function __construct($ns) { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods:*'); header('Access-Control-Allow-Headers:*'); $this->ns = $ns; } /** * @var string Allows early access to page action. */ public static $action; /** * @var array Allows early access to page parameters....

八月 15, 2022 · 2 分钟 · Ken

Php-自定义封装加密方法

/** * 自定义的一个加解密插件 * User: staff * Date: 2019/3/27 * Time: 16:13 */ class Encrypter { private static $key = "ZmUbqPipJ0Pr7tGmkHDBazjpbKjFZc7S"; private static $cipher = "AES-256-CBC"; public static function encrypt($str) { $ivlen = openssl_cipher_iv_length(self::$cipher); $iv = openssl_random_pseudo_bytes($ivlen); $value = openssl_encrypt($str, self::$cipher, self::$key, 0, $iv); $iv = base64_encode($iv); $param = [ 'iv' => $iv, 'value' => $value ]; return base64_encode(json_encode($param)); } public static function decrypt($str) { $payload = self::getJsonPayload($str); $iv = base64_decode($payload['iv']); $decrypted = openssl_decrypt($payload['value'], self::$cipher, self::$key, 0, $iv); return $decrypted; } /** * @param $payload * @return array */ static function getJsonPayload($payload) { $payload = json_decode(base64_decode($payload), true); return $payload; } }

八月 15, 2022 · 1 分钟 · Ken

Php-根据经纬度计算直线距离

static public $DEF_PI = 3.14159265359; // PI static public $DEF_2PI= 6.28318530712; // 2*PI static public $DEF_PI180= 0.01745329252; // PI/180.0 static public $DEF_R =6370693.5; // radius of earth /** * 适用于近距离测直线距离 */ public static function GetShortDistance($lon1, $lat1, $lon2, $lat2) { // 角度转换为弧度 $ew1 = $lon1 * self::$DEF_PI180; $ns1 = $lat1 * self::$DEF_PI180; $ew2 = $lon2 * self::$DEF_PI180; $ns2 = $lat2 * self::$DEF_PI180; // 经度差 $dew = $ew1 - $ew2; // 若跨东经和西经180 度,进行调整 if ($dew > self::$DEF_PI) $dew = self::$DEF_2PI - $dew; else if ($dew < -self::$DEF_PI) $dew = self::$DEF_2PI + $dew; $dx = self::$DEF_R * cos($ns1) * $dew; // 东西方向长度(在纬度圈上的投影长度) $dy = self::$DEF_R * ($ns1 - $ns2); // 南北方向长度(在经度圈上的投影长度) // 勾股定理求斜边长 $distance = sqrt($dx * $dx + $dy * $dy); return $distance; }

八月 12, 2022 · 1 分钟 · Ken

Php-生成ssl证书所需的csr信息

/** * 生成CSR和KEY */ public function CreateCsr() { $all = request()->all(); $dn = [ "countryName" => trim(strtoupper($all['countryName'])), //所在国家 "stateOrProvinceName" => trim($all['stateOrProvinceName']), //所在省份 "localityName" => trim($all['localityName']), //所在城市 "organizationName" => trim($all['organizationName']), //注册人姓名 "organizationalUnitName" => trim($all['organizationalUnitName']), //组织名称 "commonName" => trim($all['commonName']), //公共名称 ]; if (isset($all['emailAddress']) && $all['emailAddress']) { $dn['emailAddress'] = $all['emailAddress']; } $config = [ "private_key_bits" => isset($all['keysize']) && $all['keysize'] ? $all['keysize'] : 2048, //字节数 512 1024 2048 4096 等 "private_key_type" => OPENSSL_KEYTYPE_RSA, //加密类型 'digest_alg' => 'sha256', ]; $privkey = openssl_pkey_new($config); if ($privkey === false) { $config['config'] = "D:/phpstudy_pro/Extensions/Apache2....

八月 12, 2022 · 1 分钟 · Ken