Giter Club home page Giter Club logo

blessing-skin-server's Introduction

Travis Building Status Codecov Latest Stable Version PHP 5.5.9+ License Twitter Follow

优雅的开源 Minecraft 皮肤站,现在,回应您的等待。

Blessing Skin 是一款能让您上传、管理和分享您的 Minecraft 皮肤和披风的 Web 应用程序。与修改游戏材质包不同的是,所有人都能在游戏中看到各自的皮肤和披风(当然,前提是玩家们要使用同一个皮肤站)。

Blessing Skin 是一个开源的 PHP 项目,这意味着您可以自由地在您的服务器上部署它。这里有一个 演示站点

特性

  • 完整实现了一个皮肤站该有的功能
  • 支持单用户多个角色
  • 通过皮肤库来分享您的皮肤和披风!
  • 易于使用
    • 可视化的用户、角色、材质管理页面
    • 详细的站点配置页面
    • 多处 UI/UX 优化只为更好的用户体验
  • 安全
    • 支持多种安全密码 Hash 算法
    • 注册可要求 Email 验证(插件)
    • 防止恶意请求的积分系统
  • 强大的可扩展性
    • 多种多样的插件
    • 支持与 Authme/Discuz 等程序的用户数据对接
    • 支持自定义 Yggdrasil API 外置登录系统

环境要求

Blessing Skin 对您的服务器有一定的要求。在大多数情况下,下列所需的 PHP 扩展已经开启。

  • 一台支持 URL 重写的主机,Nginx、Apache 或 IIS
  • PHP >= 5.5.9 (服务器不支持?)
  • 安装并启用如下 PHP 扩展:
    • OpenSSL
    • PDO
    • Mbstring
    • Tokenizer
    • GD

如果你使用的是 PHP 7.2,请先阅读 Wiki - 在 PHP 7.2 上运行

快速使用

请参阅 Wiki - 快速安装向导

screenshot

插件系统

Blessing Skin 提供了强大的插件系统,您可以通过添加多种多样的插件来为您的皮肤站添加功能。

详情请参阅 Wiki - 插件系统介绍

自行构建

如果你想为此项目作贡献,或者抢先尝试未发布的新功能,你应该先用 Git 上的代码部署。

不推荐不熟悉 shell 操作以及不想折腾的用户使用。

从 Git 上 clone 源码并安装依赖:

$ git clone https://github.com/printempw/blessing-skin-server.git
$ composer install
$ yarn install

运行自动化测试(可跳过):

$ yarn test
$ ./vendor/bin/phpunit

构建前端代码!

$ yarn run build

接下来请参考「快速安装向导」进行后续安装。

问题报告

请参阅 Wiki - 报告问题的正确姿势

版权

Copyright 2016-2018 printempw and contributors.

Blessing Skin 是基于 GNU General Public License version 3 开放源代码的自由软件,你可以遵照 GPLv3 协议来修改或重新发布本程序。

例外情况:任何为 Blessing Skin 皮肤站程序开发、调用了 Blessing Skin 插件 API 的插件程序,在未使用 Blessing Skin 程序源代码的情况下,无须采用 GPLv3 协议,也不强制要求开放插件源代码。

程序原作者为 @printempw,转载请注明。

blessing-skin-server's People

Contributors

g-plane avatar lzjluzijie avatar prinsss avatar tnqzh123 avatar xfl03 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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blessing-skin-server's Issues

UniSkinAPI not implemented correctly

When accessing https://skin.prinzeugen.net/rg.json, I get the following response:

{
    "cape": "",
    "skins": {
        "default": "c94c049e5fd3911107d91db5d938aeca45ce307cb94cf3c17d92303f2c365739",
        "slim": ""
    },
    "username": "rg"
}

The correct name for username field is player_name.
And there should be a model_preference field indicating the textures to be loaded.
Otherwise UniSkinMod assumes that the player don't want to load any skins.

index.php 有一处XSS

俺根据源代码,构造了这个地址:http(s)://**/index.php?msg=6666%22);%3C/script%3E%3Cscript%3Ealert(%22hack!!

你打开会显示“hack!!”的
,可以做很多事哦
修复方案:htmlspecialchars,你懂得~
同是玩web的,不应该哈
我还没开始找其它注入点,建议全部排查

skin.prinzeugen.net 无法通过HTTPS访问

repo介绍里demo链接是https://skin.prinzeugen.net,点进去 unexpectedly closed connection 吓了那么一跳>.<
切成http又能看到三只饼干啦w(误
还有不用CDN真的好么= =...

对Blessing Skin Server v3的几点建议

  1. 个性化设置的配色,可以通过数值自定义RGB颜色。
  2. v2到v3,旧用户的名字作为nickname,然后允许用户以nickname登录(新老用户都能以nickname登录)。接着提示或强制用户补充邮箱信息。如果是提示,则让用户补充邮箱信息后奖励积分。如果是强制,则在用户补充邮箱信息后才允许进行其它操作。
  3. 每个目录下创建空的index.html防止列出目录内容。
  4. 注册之后还需要登录。为什么不能注册之后直接跳转进去用户中心?
  5. 从皮肤库添加皮肤到自己的衣柜时,要求填写皮肤名字,默认是空的。能不能改为默认是原来皮肤已有的名字,让懒人~~(例如我)~~直接快速添加?
  6. 在皮肤库中点击皮肤的哈希值可以下载皮肤,但建议文件名应为皮肤名称.png
  7. 能不能加个自定义积分换算,例如默认是1 score = 1KB,然后我可以设置成5 score = 1KB。另外是否考虑加个签到随机数范围设置。(默认是10~100吧?)
  8. 用户管理页面考虑一下添加“设为管理员”和“取消管理员”按钮
  9. 签到时间计算能否可以可选择地设置像Discuz的dsu签到插件以每天的0时计算签到周期?
    10.站点公告支持Markdown就好了

演示站删除账号报错

Symfony\Component\Debug\Exception\FatalThrowableError: Class 'App\Models\DB' not found in file /home/wwwroot/skin.prinzeugen.net/app/Models/User.php on line 259
Stack trace:

  1. Symfony\Component\Debug\Exception\FatalThrowableError->() /home/wwwroot/skin.prinzeugen.net/app/Models/User.php:259

详细信息:本站已关闭重置密码功能

出现了一些错误:

错误码: 8

详细信息:本站已关闭重置密码功能

Hello i have this problem i think its mean i dont have allowed password resseting but i cant find where is function to enable password reseting
(im from czech republic sry for my bad english)

Sry im retarded now i see setings in .env

出现错误

Warning: mysqli::mysqli() expects parameter 5 to be long, string given in /home/u185635302/public_html/Skins/admin/install.php on line 54

Warning: mysqli::query(): Couldn't fetch mysqli in /home/u185635302/public_html/Skins/includes/Database.class.php on line 38

Warning: mysqli::query(): Couldn't fetch mysqli in /home/u185635302/public_html/Skins/admin/install.php on line 156

数据表创建失败
照理来说不应该的,请带上错误信息联系作者:

Warning: main(): Couldn't fetch mysqli in /home/u185635302/public_html/Skins/admin/install.php on line 159

虚拟空间安装程序(环境PHP7.0)出现报错

ErrorException: proc_open(): CreateProcess failed, error code - 5 in file D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Application.php on line 924
Stack trace:
  1. ErrorException->() D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Application.php:924
  2. proc_open() D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Application.php:924
  3. Symfony\Component\Console\Application->getConsoleMode() D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Application.php:699
  4. Symfony\Component\Console\Application->getTerminalDimensions() D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Style\SymfonyStyle.php:354
  5. Symfony\Component\Console\Style\SymfonyStyle->getTerminalWidth() D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Style\SymfonyStyle.php:52
  6. Symfony\Component\Console\Style\SymfonyStyle->__construct() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Console\OutputStyle.php:29
  7. Illuminate\Console\OutputStyle->__construct() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Console\Command.php:153
  8. Illuminate\Console\Command->run() D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Application.php:794
  9. Symfony\Component\Console\Application->doRunCommand() D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Application.php:186
 10. Symfony\Component\Console\Application->doRun() D:\wwwroot\a13321991990\wwwroot\vendor\symfony\console\Application.php:117
 11. Symfony\Component\Console\Application->run() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Console\Application.php:64
 12. Illuminate\Console\Application->call() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php:170
 13. Illuminate\Foundation\Console\Kernel->call() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php:217
 14. Illuminate\Support\Facades\Facade->__callStatic() D:\wwwroot\a13321991990\wwwroot\app\Http\Controllers\SetupController.php:42
 15. App\Http\Controllers\SetupController->finish() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:80
 16. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Controller.php:80
 17. Illuminate\Routing\Controller->callAction() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php:146
 18. Illuminate\Routing\ControllerDispatcher->call() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php:94
 19. Illuminate\Routing\ControllerDispatcher->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:52
 20. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:52
 21. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:102
 22. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:102
 23. Illuminate\Pipeline\Pipeline->then() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php:96
 24. Illuminate\Routing\ControllerDispatcher->callWithinStack() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\ControllerDispatcher.php:54
 25. Illuminate\Routing\ControllerDispatcher->dispatch() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Route.php:174
 26. Illuminate\Routing\Route->runController() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Route.php:140
 27. Illuminate\Routing\Route->run() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Router.php:724
 28. Illuminate\Routing\Router->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:52
 29. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:52
 30. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\app\Http\Middleware\CheckInstallation.php:15
 31. App\Http\Middleware\CheckInstallation->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 32. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 33. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 34. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 35. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\app\Http\Middleware\AfterSessionBooted.php:31
 36. App\Http\Middleware\AfterSessionBooted->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 37. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 38. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 39. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 40. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\View\Middleware\ShareErrorsFromSession.php:49
 41. Illuminate\View\Middleware\ShareErrorsFromSession->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 42. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 43. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 44. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 45. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Session\Middleware\StartSession.php:64
 46. Illuminate\Session\Middleware\StartSession->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 47. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 48. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 49. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 50. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse.php:37
 51. Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 52. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 53. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 54. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 55. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\app\Http\Middleware\RedirectIfUrlEndsWithSlash.php:22
 56. App\Http\Middleware\RedirectIfUrlEndsWithSlash->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 57. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 58. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 59. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 60. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Cookie\Middleware\EncryptCookies.php:59
 61. Illuminate\Cookie\Middleware\EncryptCookies->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 62. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 63. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 64. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 65. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:102
 66. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:102
 67. Illuminate\Pipeline\Pipeline->then() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Router.php:726
 68. Illuminate\Routing\Router->runRouteWithinStack() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Router.php:699
 69. Illuminate\Routing\Router->dispatchToRoute() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Router.php:675
 70. Illuminate\Routing\Router->dispatch() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:246
 71. Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:52
 72. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:52
 73. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\app\Http\Middleware\DetectLanguagePrefer.php:12
 74. App\Http\Middleware\DetectLanguagePrefer->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 75. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 76. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 77. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 78. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode.php:44
 79. Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 80. call_user_func_array() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:136
 81. Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 82. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Routing\Pipeline.php:32
 83. Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:102
 84. call_user_func() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Pipeline\Pipeline.php:102
 85. Illuminate\Pipeline\Pipeline->then() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:132
 86. Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter() D:\wwwroot\a13321991990\wwwroot\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:99
 87. Illuminate\Foundation\Http\Kernel->handle() D:\wwwroot\a13321991990\wwwroot\bootstrap\handler.php:19
 88. require() D:\wwwroot\a13321991990\wwwroot\index.php:25

IIS 全新安装,皮肤库内无法正常预览皮肤,游戏内无法正常显示皮肤。

如题,问题如下
https://ooo.0o0.ooo/2016/08/15/57b281a9bda76.png
https://ooo.0o0.ooo/2016/08/15/57b283f713c5b.png

附上 CustomSkinLoader 的 log
[2016-08-16 11:07:09 pool-2-thread-1 INFO] CustomSkinLoader 13.2
[2016-08-16 11:07:09 pool-2-thread-1 INFO] Log File: E:\DimensionCraft 7.0.3.minecraft\CustomSkinLoader\CustomSkinLoader.log
[2016-08-16 11:07:09 pool-2-thread-1 INFO] Config File: E:\DimensionCraft 7.0.3.minecraft\CustomSkinLoader\CustomSkinLoader.json
[2016-08-16 11:07:09 pool-2-thread-1 INFO] Try to load config.
[2016-08-16 11:07:09 pool-2-thread-1 INFO] Successfully load config.
[2016-08-16 11:07:09 pool-2-thread-1 INFO] Enable: true
[2016-08-16 11:07:09 pool-2-thread-1 INFO] LoadList: 2
[2016-08-16 11:07:09 pool-2-thread-1 INFO] 1/2 Try to load profile from 'DimensionCraft Skin Server'.
[2016-08-16 11:07:09 pool-2-thread-1 INFO] Try to read 'http://cyztskin.ddmcloud.com/csl/Ag_Key.json'
[2016-08-16 11:07:09 pool-2-thread-1 INFO] Successfully read (Response Code: 200 , Content Length: 176)
[2016-08-16 11:07:09 pool-2-thread-1 INFO] Ag_Key's profile loaded.
[2016-08-16 11:07:09 pool-2-thread-1 INFO] SkinUrl: http://cyztskin.ddmcloud.com/csl/textures/278e44724b9751a72ae8da78d8945be858e3c1999f9a125051569efc132f97d9 , Model: default , CapeUrl: null)

目录权限问题

我把所有的文件传到虚拟主机,然后就没法删除了。最后找来找去,是这个目录:
blessing-skin-server-v3.1.2\vendor\symfony\finder\Tests\Fixtures\r+e.gex[c]a(r)s\dir
的问题(其实还有好几个,我只是列出最典型的一个)。
最后解决的办法是设定目录权限为所有权限。

那么问题来了,这个如此奇怪的目录到底是干啥用的?。。。另外还有好几个目录存在问题,都是那种看起来很奇怪的。我删除了这些目录,也并没有啥问题出现啊。。。那为什么压缩包中如此多莫名其妙的目录呢?是不是应该注意一下这个问题呢?

细节问题

  • 管理面板中“角色管理”页面,点击“预览材质”还是会跳转到旧版的 URL,即 skinlib/show?tid=
  • “我的衣柜”中,没有直接点击材质,只是点击材质下方的齿轮,就触发了 MSP.changeSkin()MSP.changeCape()
  • “用户中心”中的“角色管理”页面没有使用 @include('vendor.texture-preview')

关于皮肤与数据库的问题

比较急!懒得用英文了。这个问题不算太严重,如果你把皮肤站目录下缓存的皮肤删掉,那么皮肤站上就会出现一些有趣的问题,可以仔细看看!

建议添加一功能

发现它没有“忘记密码”的功能。另外可以考虑加入“在线更新”的功能(像WordPress那样)。

几个小问题

  1. 后台的确不能通过用户管理删除admin了,但是admin可以在个人资料秒杀自己……
  2. 经过部分测试运营,建议在用户管理处增加“修改用户名”选项。
  3. 字符串严格语法表达方式。建议稍加严肃对待与用户交互时显示的文本(特别是提示类信息),如果太过玩笑和乐趣,有可能增加用户的不屑之心里。
  4. 缩小左边侧栏,显示的那个BS标题貌似无法通过后台修改,只能修改源文件。

BUG类:
黑色主题-白侧边栏主题无法正确显示标题栏,依然是白色。

建议添加是否允许上传披风功能

披风是一个特别的部位,建议添加一个是否允许上传披风的功能。
即:普通皮肤随意上传,但是披风,必须管理员在后台开启这个功能,或者关闭后只能管理员上传……或者管理员可以指定一个或多个用户,只有指定的用户可以上传披风。

检查更新页面出现错误

检查更新 Check Update

Notice: 出现了一些错误

详细信息:Undefined index: github

文件位置:/home/wwwroot/skin/app/Services/Updater.php: 55

一些发展建议

只是一些个人的建议,我会慢慢补充的。

关于仪表盘(针对管理员):

  1. 加入允许注册和禁止注册选项(这真的很重要,特别是对于那些只是用于自己服务器的朋友们...);
  2. 禁止管理员admin被删除(这很重要。。。谨防手残)。
  3. 加入后台添加用户的功能(这也很重要,参见第一条)。

关于新用户注册:

  1. 加入邮件验证机制;
  2. 验证码(可有可无)。

其他一些问题:

  1. 有关仪表盘用户的“#”编号我还没看懂,为啥管理员是1,再注册一个就是……15了……
    我的建议:去除用户编号,以用户名的字符串解决一切问题而不是编号,避免强迫症。
    所谓用户编号这个被称为UID的东西已经在phpwind和Discuz中留下了很多问题,甚至MC的物品ID也造成了很多很多的问题,因此能避开这种数字自排序ID,就尽量不用。
  2. 加入UUID识别功能。
    对于皮肤站那肯定首打离线模式了(……在线模式……嗨说白了真正的正版用户还用得着皮肤站……),那么首先,离线模式的UUID是服务端根据用户名自动生成的,这个算法也很简单,您可以让皮肤站也按照UUID来办事(离线模式嘛,根据用户名获取UUID),意思就是,不用我上面说的那个编号而是UUID,这岂不是一举两得呢。

其他问题有待补充完善。

站点配置提交出错

例如,在设置站点公告之后,点击提交,会出现Function ereg() is deprecated错误,原因是ereg()早已在php 5.3的时候废掉了,而现在大多数都在使用5.5左右的版本。
解决办法,找到../admin/options.php的第40行,将
($key == "site_url" && ereg("/$", $value))
修改为
($key == "site_url" && preg_match("/.*(\/)$/", $value))
就可以正常判断url末尾是不是有斜杠了。

json不更新

角色第一次换肤后成功创建生成json,但是换肤后json不更新

使用了cdn,但是更新cdn以后任然没用

自建虚拟机环境:Nginx 1.4.2、php5.2/php5.3/php5.4/php5.5/php5.6、mysql、ZendOptimizer、java18/java17/java16、tomcat8/tomcat7/tomcat6
基本模块:php mysql zend ctype filter hash session standard Reflection SPL suhosin json ldap pcntl pcre ftp zip zlib Suhosin libxml
数据库组件:PDO pdo_mysql pdo_sqlite pdo_sqlite SQLite mysql mysqli
加密组件:Zend Optimizer cgi-fcgi mcrypt openssl
xml组件:xmlreader xmlwriter SimpleXML libxml
图形组件:gd imagick ctype mbstring iconv

皮肤站使用CDN后部分功能异常

由于我将皮肤站架设在国外主机,为了提高访问速度,我使用了CloudFlare的CDN。但使用CDN后皮肤预览功能失效,同时上传皮肤的界面也变成普通的“浏览文件”文字按钮。望作者能在下一版本中增加对CDN的支持。

建议增加增量更新功能

因为我有对代码进行部分修改(主要是展示给用户的文本),然而每次后台升级都会把这些修改还原Orz
所以我提议增加增量更新功能,只下载和替换有变更的文件,同时在后台中展示有变更的文件,这样更方便我修改代码。

v3.0.3 删除材质按钮有bug 数据库有错误

image

下面是log
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'tid_steve' at row 1 (SQL: update players set preference = default, tid_steve = , tid_alex = , tid_cape = , last_modified = 2016-08-25 18:19:46 where pid = 4) in file /var/www/skin/vendor/illuminate/database/Connection.php on line 713
Stack trace:

  1. Illuminate\Database\QueryException->() /var/www/skin/vendor/illuminate/database/Connection.php:713
  2. PDOException->() /var/www/skin/vendor/illuminate/database/Connection.php:464
  3. PDOStatement->execute() /var/www/skin/vendor/illuminate/database/Connection.php:464
  4. Illuminate\Database\Connection->Illuminate\Database{closure}() /var/www/skin/vendor/illuminate/database/Connection.php:706
  5. Illuminate\Database\Connection->runQueryCallback() /var/www/skin/vendor/illuminate/database/Connection.php:669
  6. Illuminate\Database\Connection->run() /var/www/skin/vendor/illuminate/database/Connection.php:467
  7. Illuminate\Database\Connection->affectingStatement() /var/www/skin/vendor/illuminate/database/Connection.php:410
  8. Illuminate\Database\Connection->update() /var/www/skin/vendor/illuminate/database/Query/Builder.php:2072
  9. Illuminate\Database\Query\Builder->update() /var/www/skin/vendor/illuminate/database/Eloquent/Builder.php:531
  10. Illuminate\Database\Eloquent\Builder->update() /var/www/skin/vendor/illuminate/database/Eloquent/Model.php:1551
  11. Illuminate\Database\Eloquent\Model->performUpdate() /var/www/skin/vendor/illuminate/database/Eloquent/Model.php:1470
  12. Illuminate\Database\Eloquent\Model->save() /var/www/skin/app/Controllers/PlayerController.php:141
  13. App\Controllers\PlayerController->clearTexture() /var/www/skin/vendor/pecee/simple-router/src/Pecee/SimpleRouter/RouterEntry.php:377
  14. call_user_func_array() /var/www/skin/vendor/pecee/simple-router/src/Pecee/SimpleRouter/RouterEntry.php:377
  15. Pecee\SimpleRouter\RouterEntry->renderRoute() /var/www/skin/vendor/pecee/simple-router/src/Pecee/SimpleRouter/RouterBase.php:163
  16. Pecee\SimpleRouter\RouterBase->routeRequest() /var/www/skin/vendor/pecee/simple-router/src/Pecee/SimpleRouter/SimpleRouter.php:22
  17. Pecee\SimpleRouter\SimpleRouter->start() /var/www/skin/app/Services/Boot.php:121
  18. App\Services\Boot->bootRouter() /var/www/skin/app/Services/Application.php:39
  19. App\Services\Application->run() /var/www/skin/index.php:16

一个Bug

在皮肤库中搜索一个皮肤,然后在搜索结果的页面点击“上传新皮肤”会被跳转到./skinlib/skinlib/upload而不是./skinlib/upload,然后出现404错误。在预览站和自己搭建的站点上测试均有此问题。

缓存失效时间修改不回来

前天手贱把缓存失效时间改成了31536000,现在修改为10,但是页面返回的数据任然显示max-age=31536000, public
这个如何解决?这算不算bug?

url读取有问题

[2016-11-07 21:22:54 鱿鱼君 INFO] Loading 鱿鱼君's profile.
[2016-11-07 21:22:54 鱿鱼君 INFO] 1/3 Try to load profile from 'Blessing Skin'.
[2016-11-07 21:22:54 鱿鱼君 INFO] Try to read 'https://skin.prinzeugen.net/csl/鱿鱼君.json' with user agent 'null'.
[2016-11-07 21:22:55 鱿鱼君 INFO] Failed to read (Response Code: 500)
[2016-11-07 21:22:55 鱿鱼君 INFO] Profile not found.

能魔改吗……

sp170423_165640

绝对不是浏览器问题
嘛……从v2升v3就这样啦……
然后进/setup说已安装
然后点下一步
escapeshellarg() has been disabled for security reasons

但是用v2又有个提示……强迫症表示好闹心

皮肤异常

IIS环境,服务器上部分玩家的皮肤异常,会变一些皮肤站的皮肤库里没有的皮肤。
json配置文件

{
  "version": "14.6",
  "enable": true,
  "loadlist": [
    {
      "name": "Mojang",
      "type": "MojangAPI"
    },
    {
      "name": "Playground skin",
      "type": "CustomSkinAPI",
      "root": "http://skin.kyaron.top/"
    },
    {
      "name": "LocalSkin",
      "type": "Legacy",
      "checkPNG": false,
      "skin": "LocalSkin/skins/{USERNAME}.png",
      "model": "default",
      "cape": "LocalSkin/capes/{USERNAME}.png",
      "elytra": "LocalSkin/elytras/{USERNAME}.png"
    }
  ],
  "enableSkull": true,
  "enableDynamicSkull": true,
  "enableTransparentSkin": true,
  "ignoreHttpsCertificate": false,
  "cacheExpiry": 10,
  "enableUpdateSkull": false,
  "enableLocalProfileCache": false,
  "enableCacheAutoClean": false
}

演示站boom了

OOM command not allowed when used memory > 'maxmemory'.

如果您是访客,这说明网站程序出现了一些错误,请您稍后再试或联系站长。
如果您是站长,请开启 .env 中的 APP_DEBUG 以查看详细信息。

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.