Giter Club home page Giter Club logo

blessing-skin-plugins's People

Contributors

asnxthaony avatar big-cake-jpg avatar cqjjjzr avatar dz-paji avatar g-plane avatar hank9999 avatar hempflower avatar hilookas avatar mochaap avatar prinsss avatar serinanya avatar smyhw avatar tnqzh123 avatar xiaomengxinx avatar yushijinhun avatar yuxuanzuo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

blessing-skin-plugins's Issues

[Yggdrasil] User not found when user exists

Hi,
I'm using a modified version of Helios launcher to use Yggdrasil API on my Blessing Skin instance.
The launcher asks me for login before letting me launch Minecraft (so I cannot use Authlib-injector).
I replaced all occurences of authserver.mojang.com to my server Yggdrasil address and replaced endpoints/authenticate, /invalidate,... by /authserver/authenticate, /authserver/invalidate,...

When I log in with a username it says that the user does not exists and when I log in with my email (with 3 players added) it says I don't have a Premium account cause the server response fires a code (screenshot below in comments)

Can you help me debugging this ?

The script which manage connection to Yggdrasil :
https://github.com/Terebros-MC/HeliosLauncher/blob/master/app/assets/js/mojang.js

论坛数据对接插件报错

BS版本:v4.0.4
插件版本:2.0.0
服务器环境:MySQL 5.6.16-log/Nginx 1.13.6.2/PHP-7.2
初次安装点击启用插件后报错:
详细信息:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'where email = ? limit 1' at line 1 (SQL: select * where email = 【本账户邮箱】 limit 1)

邀请码注册界面placeholder出错

已自行解决,现提交issue供开发者参考。

invitation-codes插件在注册页面的placeholder框内不显示“邀请码”或“Invitation Code”。而是显示“Iinvitation-codes.placeholder”。

解决方法:
在plugins/invitation-codes/lang文件夹的en和zh_CN文件夹中,编辑”front-end.yml“文件,


placeholder: 邀请码
改为
placeholder: "邀请码"


placeholder: Invitation Code
改为
placeholder: "Invitation Code"

问题即可解决

Yggdrasil api 登录后 皮肤不显示

The Problem 问题描述

使用nginx后,Yggdrasil 的皮肤在游戏内无法加载,但是按照常见问题中的访问url可以加载皮肤图片(之前使用apache没有这个问题)

Environment 运行环境

Blessing Skin
版本 5.0.0
应用环境 production
是否处于调试状态 No
Laravel 版本 7.18.0
服务器
PHP 版本 7.4.11
Web 服务软件 nginx/1.18.0
操作系统 Linux 3.10.0-957.27.2.el7.x86_64 x86_64

Error Message 错误信息

Steps to Reproduce 重现步骤

使用nginx

mounted的时间似乎有问题

刚刚更新的注册邀请码插件3.0.0中无法在注册页面中插入相关表格
QQ图片20200408164844

blessing.event.on('mounted', ({ el }) => {
	$("main").before('<div class="input-group mb-3"><input class="form-control" id="invitation-code" required="required" type="text" placeholder="邀请码"> <div class="input-group-append"><div class="input-group-text"><span class="fas fa-id-card"></span></div></div></div>');
})

这样修改后可以显示出相关表格,但有点强迫症 input在form外边了,应该是mounted事件的时间有问题,在之前就触发了这个事件

5.0.0beta2安装腾讯COS5插件后无法使用

The Problem 问题描述

5.0.0beta2安装腾讯COS5插件后无法使用

Environment 运行环境

Error Message 错误信息

500 Internal Server Error
详细信息:Target class [parsedown] does not exist. (View: /mcskin/plugins/textures-qcloud-cos/views/config.blade.php)

Steps to Reproduce 重现步骤

插件 yggdrasil-api setLocale(NULL) 后导致 500 错误。

laravel translator 的 locale 不应该为 NULL,如果是 NULL,会在调用 trans 函数翻译文本时,在 spatie/laravel-translation-loader/src/TranslationLoaderManager.php:27 处抛出错误,错误信息是 Argument 1 passed to Spatie\TranslationLoader\TranslationLoaderManager::getTranslationsForTranslationLoaders() must be of the type string, null given, called in ... ,即 locale 必须为字符串类型,而不能是 NULL。

上述错误体现在实际使用上,就是 hmcl 在输入错误密码后,会提示网络错误,并且用 wireshark 抓包后,显示 500 ,并且响应体为空(错误信息的渲染也需要调用 trans 函数)

yggdrasil-api 的 plugins/yggdrasil-api/src/Controllers/AuthController.php:285 执行了 setLocale ,而并未对 locale 类型进行检查,这会导致数据库中的 NULL 通过这里传递到 laravel translator ,导致上面的错误。

建议:

  • 在用户注册或安装程序创建管理员时应该设置一个默认 Locale (不应为 NULL)。
  • 插件在 setLocale 时,应该检查用户的语言是否为 NULL,如果是,应该回退到默认语言。(兼容旧版本)

Environment 运行环境

  • Blessing Skin 版本 (Version of Blessing Skin): 5.0.0
  • PHP 版本 (Version of PHP): 7.4.8
  • Apache / Nginx: Apache/2.4.38 (Debian)
  • Docker Desktop (wsl2)
  • hmcl 3.3.163

Error Message 错误信息

这是在启动器输入错误密码,服务器返回 500 时,服务器的错误日志:https://paste.ubuntu.com/p/37xqrvYM3d/

这是在尝试找到问题原因时,在 vendor/laravel/framework/src/Illuminate/Translation/Translator.php:409 处设置了 if(!$locale) throw new Error(); 断点后,服务器的错误日志(即调用栈):https://paste.ubuntu.com/p/7ypxjk3XXw/

重现步骤

全新安装 blessing-skin-server 5.0 ,通过手动解压,执行 artisan plugin:enable ,安装 yggdrasil-api 插件。

用管理员账户尝试登陆游戏,并且输入错误的密码。

更新插件后,出现500错误

刚才更新了batch-import和hitokoto,由于是一起更新的,不确定是哪个出了问题,刷新页面后,站点出现500错误
err

[功能请求]邮箱域名检查

The Problem 问题描述

新功能请求

请在面板里添加邮箱后缀限制,防止一些免费匿名邮箱的垃圾邮件攻击

authme-integration插件的同步似乎有点问题

SyncWithAuthme.php 下的

        // 初始化在 Authme 那边注册的用户
        User::where('realname', '<>', '')
            ->get()
            ->filter(function ($user) {
                return $user->players->count() == 0;
            })
            ->each(function ($user) {
                $user->nickname = $user->realname;
                $user->score = option('user_initial_score');
                $user->register_at = Carbon::now();
                $user->last_sign_at = Carbon::now()->subDay();
                $user->save();

                $player = new Player;
                $player->name = $user->realname;
                $player->uid = $user->uid;
                $player->tid_skin = 0;
                $player->save();
            });

好像每次访问网站都会执行
导致执行了大量的SQL
QQ图片20200412011813

请支持Flarum论坛

建议增加对Flarum论坛程序进行数据对接,让玩家使用这个论坛系统账号密码登录皮肤站,使用MIT公共协议,数据库+论坛结构简单。

讨论 Yggdrasil 材质上传 API

API 规范在 yushijinhun/authlib-injector#90 中已经详细叙述,下面讨论的主要是 BS 具体实现的问题。

1. 公开 or 私密?

Yggdrasil 的材质上传 API 中,并没有参数用于设置材质的公开 / 私密。在我看来,材质应当默认私密,理由如下:

  1. 用户可能并不希望自己的材质被公开
  2. 用户可能没有预料到通过此方法上传的材质会被公开
  3. 通过此 API 上传的材质,其名称并没有被指定,因此不宜公开

@tnqzh123 指出默认私密存在的问题:

  1. 私密材质较公开材质消耗更多的积分,如果用户积分不足,上传可能会失败

2. 材质名称

材质上传 API 中没有材质名称参数,因此 BS 需要为其指定一个临时材质名称

API 规范建议客户端包含一项 filename 参数,即材质文件名。如果这一参数存在,则可以考虑用在临时材质名称中。

在我看来,可以用这种方法构造临时材质名称:upload-{filename}-{datetime}。其中 {filename} 即请求参数中的 filename,如果未包含则用 unnamed 替代。{datetime} 即时间戳,格式为 yyyyMMddHHmmss

3. 公开前要求重新设置材质名称?

通过这一 API 上传的材质,由于其名称是临时指定的,因此不宜直接公开。我认为,在用户将材质设为公开前,应先要求他修改材质名称。(注:可能并不是特别需要这一功能)

4. 原先材质是否保留?

如果我们将原先上传的材质保留,那么在多次上传材质后,用户很可能会遇到积分不足的情况,此时他就不得不删除一些旧材质。如果我们在用户上传材质时,删除原先材质,就可以尽量避免这种情况的出现。

这一问题有待进一步的讨论。在此我先抛出下面几个问题:

  1. 是否可以添加一个选项,让用户选择是保留还是删除旧材质?
    • 默认值应该为哪个?
  2. 删除旧材质时,哪些材质是可以删除的?
    • 在我看来,如果原先的材质也是通过 API 接口上传,并且没有被设为公开,没有在其他角色上使用,那么就是可以删除的。
  3. 删除旧材质时,采用何种删除策略?
    • 激进:每次上传时删除旧材质。
    • 懒惰:积分不足时触发删除。

功能建议

建议增加对phpbb论坛程序进行数据对接,让玩家使用这个论坛系统账号密码登录皮肤站,毕竟这个论坛系统比Discuz开放,他用的是GNU通用公共许可协议。

yggdrasil-api result set return error

重现:当登陆并选择角色完成一次后,启动器再次利用access-token登录时,yggdrasil-api返回的将是没有角色。需要退出登陆,并重新输入密码获取access-token

插件适配 v4 进度跟踪

  • authme-integration
  • avatar-api(已整合进核心)
  • batch-import
  • bs-super-cache(已整合进核心)
  • config-generator
  • example-plugin
  • forum-integration
  • get-score-by-sharing(已整合进核心)
  • hello-dolly
  • insane-profile-cache
  • invitation-codes
  • redis(已整合进核心)
  • report-texture(已整合进核心)
  • seo-meta-tags(已整合进核心)
  • single-player-limit(已整合进核心)
  • static-file-cdn(已整合进核心)
  • textures-aliyun-oss
  • textures-qcloud-cos
  • textures-qiniu-storage
  • yggdrasil-api

新插件请求:材质标签

增加材质标签插件,理想情况下的具体具体细节如下:

  • 用户在上传材质时上传材质后可以设置(添加或删除)任意材质标签
  • 一个材质可以设置不同的标签
  • 用户可以根据材质标签查找材质
  • 皮肤库首页增设「标签」一栏,随机抽取一些皮肤库中的材质的标签展示给用户,当用户点击某个标签时可以直接搜索这个标签的材质
  • 在衣柜中也展示材质标签(显示在皮肤预览下方就好)并提供标签搜索

Demo 可以参考 WordPress 的「标签」功能。

上述功能不一定要全部实现,但最好在可行的情况下实现尽量多的功能。

Edit by @tnqzh123

正版验证与yggdrasil问题、邀请码插件新功能建议、新插件建议

(纯用户视角,自己不会写,有能写的朋友考虑一下😂感谢)

新增插件

  1. 一个简易的在线皮肤披风编辑器
  2. 超过一定时间未登录(皮肤站或yggdrasil均为登录过)回收账号(或取消激活状态(“激活状态”见下文的建议))

已有插件改进

邀请码插件

  1. 正版账号也需要邀请码(使用邀请码实现一个类似白名单的功能)
  2. 可以先注册账号再使用邀请码激活(便于实现基于邀请码的入服测试)

正版验证与yggdrasil

yggdrasil-api 插件的 wiki 中表示

如果您或您所使用的皮肤站安装有「正版验证」插件,并且您的账号经过了正版验证,则可以使用 任意一款启动器(只需要允许自定义 JVM 参数),然后在启动器的设置中修改 JVM 参数以使游戏客户端加载 authlib-injector 即可。

使用 HMCL 的外置登录能正常地登入服务器。然而,正版启动器(最新版 authlib-injector.jar 已放到正确位置)中添加启动参数(-javaagent:authlib-injector.jar=我的皮肤站地址/api/yggdrasil),无法正常登入服务器。有趣的是,在 HMCL 中使用正版登录,然后添加上述启动参数依然无法登入服务器。不知是插件的问题还是启动参数未正确填写的问题。如果是启动参数未正确填写的问题,请问应该如何填写呢(wiki上并未就此展开介绍)?

如果可以的话,希望能在wiki上写得更清楚一点。

你们的皮肤站真的很好用!麻烦开发者了!谢谢!

single-player-limit无效

我的皮肤站版本是4.4.0
为了方便管理,我需要这个插件
但启用后,皮肤站仍然可以创建多个角色,启动器也可以选择多个角色。
image
image
image
注:该角色是我开启插件之后创建的。

插件在更新和使用上出了一些问题

Environment 运行环境

Blessing Skin 版本 :v5.0.0 - Crescent Moon Dance(非自行构建)
PHP 版本 :php7.3.4nts_p
Apache / Nginx : Apache

The Problem 问题描述

在更新Oauth客户端核心时返回了如下的错误

严重错误

ZipArchive::extractTo(): File exists

详细信息

[1] app\Services\Unzip.php#L30
[2] app\Http\Controllers\MarketController.php#L69
[3] app\Http\Middleware\CheckRole.php#L22
[4] app\Http\Middleware\FireUserAuthenticated.php#L15
[5] app\Http\Middleware\EnsureEmailFilled.php#L17
[6] app\Http\Middleware\RejectBannedUser.php#L23
[7] app\Http\Middleware\RedirectToSetup.php#L28
[8] app\Http\Middleware\EnforceEverGreen.php#L23
[9] app\Http\Middleware\DetectLanguagePrefer.php#L30
[10] app\Http\Middleware\ConvertEmptyStringsToNull.php#L23

开启信任代理会导致全站500错误

如果我启用信任代理插件会导致全站500
(非框架的500,是直接返回的服务器状态代码中的500内部错误)
这个问题在5.0.0正式版中也发生过

forum-integration 插件启用时SQL语句出错

启用插件时会出现SQL语句错误导致的严重错误,错误信息如下

SQLSTATE[42000]: Syntax error or access violation: 1103 Incorrect table name "(SQL: select * from '' where 'email'= 登录邮箱 limit 1"

是语句缺失了表名导致的(好像WHERE条件的单引号也有问题...我不太会=w=)
没找到相关代码故提出Issue

论坛数据对接插件出错

之前有人提过这个。。。
是我的问题还是什么。。。
php : 7.2.16
nginx : 1.16.0
mysql : 5.6.43
500 Internal Server Error
详细信息:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where email = ? limit 1' at line 1 (SQL: select * where email = 内容被隐藏 limit 1)

API 实现与规范不符

  • /api/profiles/minecraft 不能正确处理重复的查询
    • 发送例如 ["character1", "character1"] 这样重复的查询请求时,响应中应只包含一个 character1 角色的信息,但事实上会包含两个 character1
  • sessionserver/session/minecraft/profile/:uuid 未指定unsigned=false 时,默认应不包含signature
    • 当未指定unsigned参数时,该API的查询结果会包含signature,但按照规范是不应包含的。这样做(在数字签名过程中)会造成不必要的性能损耗。
  • /authserver/refresh 不应该允许改变选中的角色
    • 若一个令牌已经绑定到一个角色,那么是不能再改变绑定到其它角色的,即使是用户自己的其它角色。
    • 应返回 400 Bad Request
  • /sessionserver/session/minecraft/join 应要求请求中包含的角色与令牌绑定的角色一致
    • 如果一个用户有两个角色,尝试用绑定了其中一个角色的令牌去请求该API,并且请求中的角色为该用户的另一个角色,操作会成功,但按规范应失败。
    • 前提同上,尝试用未绑定角色的令牌去请求该API,并且请求中的角色为该用户的一个角色,操作会成功,但按规范应失败。
    • 应返回 403 Forbidden
  • (won't fix) 材质 hash 的计算不合标准。
  • 部分API的返回值不合标准
    • /authserver/validate 在 accessToken 不正确时,应返回 403 Forbidden ,实际为 400 Bad Request
    • /sessionserver/session/minecraft/join 在 accessToken 不正确时,应返回 403 Forbidden ,实际为 400 Bad Request
    • /sessionserver/session/minecraft/join 当请求中的角色不属于用户自己时,应返回 403 Forbidden ,实际为 400 Bad Request
    • /sessionserver/session/minecraft/join 当请求中的角色不存在时,应返回 403 Forbidden ,实际为 400 Bad Request
      • 虽然有些怪异,但Mojang是如此的。

yggdrasil api 正版验证无法进入服务器

今天实验发现,正版启动器无法直接加入使用authlib-injector的服务器,此前该正版账号已经在皮肤站做了正版验证。会提示“failed to verify username”
今后的版本是否可以正版玩家在皮肤站验证后直接加入authlib服务器,或许可以参考
YggdrasilOfficialProxy的实现原理

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.