tainz / communitybridge Goto Github PK
View Code? Open in Web Editor NEWA Minecraft plugin for connecting your game to your website.
Home Page: https://www.spigotmc.org/resources/communitybridge.2232/
A Minecraft plugin for connecting your game to your website.
Home Page: https://www.spigotmc.org/resources/communitybridge.2232/
Originally requested by: http://dev.bukkit.org/profiles/Blommeke77/
(Originally requested by http://dev.bukkit.org/profiles/Hvarr/ via bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/108-support-for-smf-forums-bans-database/)
Dear developer,
I could not find myself able to add a support for my SMF forum ban database. I found that SMF has a dedicated bans table where it just throws in usernames and some other info like ban reason. I was not able however to find a field with banned 1\0 in members table.
Could you please add a support for SMF?
Maybe I missed something. Please double check if my info is correct.
Let me clarify my understanding of SMF's ban information. From what you said, it has a separate table to store bans. What are the fields/columns on that table? Guessing, so the precise names won't be right...
ban_table ----- user_id username ban_reason
any others?
My sense is that "someone is banned if they have an entry on this table".
I'll review the ban config and see if there is a way that 1.x supports this. I've a crazy schedule ahead of me so I'm not sure when I'll do so, though.
it's even more complicated. It has two ban tables.
The first table is smf_ban_groups:
Fields are: Image doesn't fit, so open it in a new tab.
The second table is smf_ban_items
Fields are: Image doesn't fit, so open it in a new tab.
Fields of smf_members are: id_member member_name date_registered posts id_group lngfile last_login real_name instant_messages unread_messages new_pm buddy_list pm_ignore_list pm_prefs mod_prefs message_labels passwd openid_uri email_address personal_text gender birthdate website_title website_url location icq aim yim msn hide_email show_online time_format signature time_offset avatar pm_email_notify karma_bad karma_good usertitle notify_announcements notify_regularity notify_send_body notify_types member_ip member_ip2 secret_question secret_answer id_theme is_activated validation_code id_msg_last_visit additional_groups smiley_set id_post_group total_time_logged_in password_salt ignore_boards warning passwd_flood pm_receive_from
as you can see, smf_members has nothing that tells us if user is banned or not.
For some reason I entirely missed your reply. Thank you for the detailed information. I've added this to the mix for getting the banning system rewritten, planned for 2.x.
Thank you Feaelin.
Add support for synchronizing ban information between the web application and the Minecraft server's ban file.
Originally pointed out by: http://dev.bukkit.org/profiles/CoolV1994/ via Bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/126-secondary-group-is-treated-like-primary-group/
What version of Community Bridge are you using?
1.12.10
What version of Bukkit are you using?
1.5.2 R0.1
Which Permission Plugin are you using and what version?
Group Manager 2.10.1
What forum/CMS/web app and its version are you using?
vBulletin 4.2.1
Make a copy of your config.yml with the MySQL username and password erased. Either attach or paste the copy (pastie.org/pastbin or similar tool is preferred).
http://pastebin.com/s2LBjmVp
What triggers the problem (During startup, when you use a particular command, every few minutes, etc.)?
When syncing the groups, CommunityBridge will move a user to the primary group then each sub-group, but it treats secondary groups like primary groups.
What is the expected output? What do you see instead?
I expect the user to be moved to the primary group then adding the secondary groups as subgroups.
Instead the user is moved to the primary group as the primary group, then is moved to the secondary group as the primary group.
Do you have an error log of what happened?
Don't think a log is necessary, no errors were given.
More Info:
Screenshot: http://i44.tinypic.com/126bvp0.png
users.yml http://pastebin.com/cTCtP5T8
What appears to be happening is CommunityBridge is using the following GroupManager commands when syncing users
/manuadd [user] [primary group]
/manuadd [user] [secondary group 1]
/manuadd [user] [secondary group 2]
and so forth, when it should be doing the commands
/manuadd [user] [primary group]
/manuaddsub [user] [secondary group 1]
/manuaddsub [user] [secondary group 2]
It would also be important to do the command /manudelsub [user] [secondary group] when a user is no longer in that secondary group.
This is just a suggestion but i see when players join the server that it runs a sync so my suggestions is that the sync only runs with auto sync or the commands /cbsync etc.
Another suggestion would be an option to disable the msg "Registered Account, Linked to Server Forums".
Originally requested by: http://dev.bukkit.org/profiles/ebiggz/ via bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/130-fire-a-custom-event-when-you-promote-a-player/
I just was wondering if you would be willing to make a quick custom event that is called when you promote a player? My server co-owner and I write simple functionality and things for our server to make life easier for our players, mods, and us as admins. I would love to be able to act upon when a player gets promoted after they have registered successfully. We use PEX, so I tried listening to their custom event, but it seems to only fire when you use PEX commands to change a players groups/inheritance, and not anything else. I haven't done much digging or searching so maybe this is already do-able now. Let me know if there's something else I could be trying.
Thanks!
Originally requested by: http://dev.bukkit.org/profiles/kirua40/ via bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/112-mcpc-and-community-bridge-1-5-1/
This could potentially be a problem if somewhere, there is a web app that actually has a group with the ID of 0.
(Originally submitted by: http://dev.bukkit.org/profiles/BlueFusion95/ via Bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/48-register-from-minecraft-server/)
Also requested by: http://dev.bukkit.org/profiles/Dark123Summer/, http://dev.bukkit.org/profiles/pimsserver/
I think it would be awesome if you were able to register to the website from the Minecraft server. For example someone could type /register (email) (password) and it would register that email and password, as well as their Minecaft name as their username.
This is actually a tricky one. (All?) Most forums, CMSs, blogs, etc. have careful measures to prevent automated programs from accessing their registration mechanism...to defend against bots. Unfortunately, that also presents some challenges to implementing a mechanism for registration.
The ideas I've had so far will require the server admins to have very detailed knowledge of how their web application creates and stores users.
Thinking out loud here, the possible approaches are:
Someone (not I) writes a plugin for a given web application that provides CommunityBridge access to the forum's registration functionality. Preferably something that includes support for paired-key security, otherwise they'd be opening a security hole. Then CB could send the necessary information to the web application via a http request. This is possibly the "perfect world" scenario because it would use the web application's own registration mechanism to create the user: better odds of the data being in all the right places. Unfortunately, it is the least likely to happen, because to make it universal would require a web-application plugin for each and every web application, e.g., a vbulletin plugin, a xenforo plugin, a phpbb plugin, etc. I can provide the CommunityBridge side of it, but not the web-application plugin side. So the server owner/admins will have to have themselves or know/hire someone that can write such a plugin for the forum software they use. Admittedly, servers using the same web-app could "team up" on such a project...
The other approach is that in the config.yml, we have a config setting that is, well, the database insert for a new registered user with the username and password left empty (they'd be filled in by CommunityBridge). It'd require the person who was configuring CommunityBridge to have very very detailed knowledge of how the web-application creates and stores user information and there would many opportunities for someone shooting themselves in the foot. Again, folks who happen to be using the same web application could pool their knowledge, which would help.
I think the basic feature idea is a good one, I just haven't come up with a good way to get us there. I'll continue thinking on the issue, though.
Thank you for the detailed reply, I really appreciate it. I hope you are able to get things worked out and look forward to seeing how this will play out.
After completely configure community bridge v2.0.0.182 I get the following errors:
[SEVERE] [CommunityBridge] The super-user's user ID setting is not set.
[SEVERE] [CommunityBridge] Simple synchronization disabled due to prior errors.
but in my config it is set:
super-user-user-id: '1'
Any help would be appreciated!
Here is my config file (cut out the comments so it wasn't quite as long, if I cut anything out let me know):
# Community Bridge Configuration File
# -----------------------------------------------------------------------------
# General Settings
# -----------------------------------------------------------------------------
general:
log-level: config
plugin-metrics: true
auto-every-unit: minutes
auto-sync: false
auto-sync-every: 20
permissions-system: PEX
application-url: localhost/emp/forums
# Database Settings
# -----------------------------------------------------------------------------
database:
# Hostname for your MySQL Server
hostname: localhost
# MySQL Port
port: 3306
# Database Name
name: db
# Database Username
username: user
# Database Password
password: pass
# Player Linking Settings
# -----------------------------------------------------------------------------
player-user-linking:
kick-unregistered: false
auto-remind: true
auto-remind-every: 10
notify-registered-player: true
notify-unregistered-player: true
unregistered-player-group:
registered-player-group:
notify-player-of-group: true
registered-former-unregistered-only: true
table-name: smf_themes
user-id-column: id_member
uses-key: true
playername-column:
key-name: cust_ign
key-column: variable
value-column: value
# Requirements
# -----------------------------------------------------------------------------
requirement:
avatar:
enabled: false
table-name:
user-id-column:
avatar-column:
minimum-posts:
enabled: false
table-name:
user-id-column:
post-count-column:
post-count:
# Statistics Tracking
# -----------------------------------------------------------------------------
statistics:
enabled: false
table-name:
user-id-column:
uses-key: false
key-column:
value-column:
online-status:
enabled: false
column-or-key-name:
online-value:
offline-value:
last-online:
enabled: false
column-or-key-name:
formatted-column-or-key-name:
game-time:
enabled: false
column-or-key-name:
formatted-column-or-key-name:
level:
enabled: false
column-or-key-name:
current-xp:
enabled: false
column-or-key-name:
formatted-column-or-key-name:
total-xp:
enabled: false
column-or-key-name:
health:
enabled: false
column-or-key-name:
lifeticks:
enabled: false
column-or-key-name:
formatted-column-or-key-name:
wallet:
enabled: false
column-or-key-name:
# Web Application Group Configuration
# -----------------------------------------------------------------------------
app-group-config:
primary:
enabled: true
table-name: smf_members
user-id-column: id_member
uses-key: false
group-id-column: id_group
key-name:
key-column:
secondary:
enabled: true
table-name: smf_members
user-id-column: id_member
storage-method: single
group-id-column: additional_groups
group-id-delimiter: ','
key-name:
key-column:
simple-synchronization:
# Set this to true for simple synchronization
enabled: true
direction: minecraft
# Set this to true if you want the player to be notified when their primary
# group changes.
primary-group-change-notify: false
super-user-user-id: '1'
groups-treated-as-primary: ['Guest','Member','Veteran','Elder']
group-mapping:
'12' : 'Guest'
'11' : 'Member'
'10' : 'Veteran'
'9' : 'Elder'
Originally requested by: http://dev.bukkit.org/profiles/pimsserver/
and then have a set amount of time to verify their account on the site before the account on the MC server gets suspended?
This way players wouldn't have to leave the game, which makes their lives easier, which results in getting more players :)
This is somewhat similar to another feature request, but I wondered if you could elaborate on the "then have a set amount of time to verify their account" portion?
Great that you accepted this!
With "then have a set amount of time to verify their account" I mean that it'd be nice to allow players to play on the server for a set amount of time before they verify their account.
If a player connects to the server s/he will be forced to create an account with a command. After that has been done s/he can play on the server for x hours. After x hours s/he will not be allowed back into the server until s/he has verified his/her account (via email)
Originally requested by: http://dev.bukkit.org/profiles/XGZ_SAMSTERZ/ via Bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/119-warnings/
Hey !
I was thinking .. I use IPB and there is a feature that you can give warnings to people. And so I thought that maybe since alot of servers use a warnings plugin like SimpleWarnings, you can add compatibility so that when people get warnings on the server, cb automaticly gives the warning on IPB( or any other forum software) and vis-versa. also Another incompatible Web hosting application Is when you have an IPB service Hosted by the IPB company.. because they "dont allow any third party applications to acces the mysql db). This is why i transferred to the self-hosted service
Originally requested by: http://dev.bukkit.org/profiles/Zeroi9/ via bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/111-gametime-field-not-working-properly/
Everything is working now, except for the the part creating a row to track the user. I have those rows in a different table (users_stats). It works fine if the user registered on the website, but we allow ingame registrations, so I have a cronjob query that runs a couple of times per day to create users_stats accounts from users accounts, and players lose playtime from this. Is this something you could add? If update affected 0 rows, create?
Originally requested by: http://dev.bukkit.org/profiles/Hvarr/ via bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/107-rank-priorities/
It would be great if you could add some prioritization system. For example, if rank admin (1) is higher than moderator (2), but on a forum someone is still moderator(2), or a simple user(3), while on the server the same username is an admin(1), and in this situation we don't want a plugin to reduce a player to a lower rank, only if the rank on forums is higher, we than want to upgrade the player on the server as well.
Thank you.
I'm playing with the notion of an "advanced configuration" for group synchronization that is rule-based. My current thinking is that someone could set up a series of "rules". If I do that, then I think that would capture what you're wanting here, since one could put the highest ranked forum groups before the lower ranked one.
Originally requested by: http://dev.bukkit.org/profiles/Zeroi9/ via bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/127-commands-for-optional-tracking/
Commands related to the optional tracking stuff.
Like, /played or /playtime to see the playtime, would be great.
15:04:42 [INFO] [CommunityBridge] UPDATE `smf_themes` SET `value` = CASE `variable` WHEN 'cust_online' THEN '1' WHEN 'cust_lastonline' THEN '1374609882'END WHERE `id_member` = '1' AND `variable` IN ('cust_online', 'cust_lastonline');
Wordpress stores user roles in a serialized format that makes a straight insertion problematic.
Originally requested by: http://dev.bukkit.org/profiles/wexcide/ in bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/93-reward-for-posting/
Not sure if it is in plans for the future, but some type of reward system would be awesome. I know currently economy plugin support is being developed, which could play a huge role in it. For example, if a user makes a post, he could earn $10 towards the economy plugin.
Interesting. I could definitely see that as a desirable feature for community building. It will take some thought. One problem I see is it could increase the number of posts that have no substance. There'd have to be a mechanism for reversing pay out if an admin rejects a post as being unuseful or inappropiate.
Hmm. In the same vein of thought giving [some item] could be an option too. I'm mainly thinking of servers that use emeralds as their currency, but it'd be simple enough to make the item given configurable.
That would be my only concern is worthless posts filling the boards just so people can get money.
I just thought I would toss the idea your way as food for thought.
Upon running /cbsyncall or /cbsync the webapp primary groups aren't updated. I'm not sure if this is due to a config error or not. When I run the command I get this in the server log:
[INFO] [CommunityBridge] (CONSOLE) Groups and/or statistics will be synchronized for all connected players.
[INFO] [CommunityBridge] SELECT `id_group` FROM `smf_members` WHERE `id_member` = '3'
[INFO] [CommunityBridge] SELECT `additional_groups` FROM `smf_members` WHERE `id_member` = '3'
Upon inspecting my player.yml file (under CommunityBridge\Players) I find that
'primary-group-name:' is not set, but my current in game group is listed under 'group-names:'. Just wondering if that may be the culprit/config error on my part.
My config file (cut out some comments and features set to false so it wasn't quite as long, if I cut anything out let me know):
# Community Bridge Configuration File
# -----------------------------------------------------------------------------
# General Settings
# -----------------------------------------------------------------------------
general:
log-level: all
plugin-metrics: true
auto-every-unit: minutes
auto-sync: false
auto-sync-every: 20
permissions-system: PEX
application-url: localhost/emp/forums
# Database Settings
# -----------------------------------------------------------------------------
database:
# Hostname for your MySQL Server
hostname: localhost
# MySQL Port
port: 3306
# Database Name
name: db
# Database Username
username: user
# Database Password
password: pass
# Player Linking Settings
# -----------------------------------------------------------------------------
player-user-linking:
kick-unregistered: false
auto-remind: true
auto-remind-every: 10
notify-registered-player: true
notify-unregistered-player: true
unregistered-player-group:
registered-player-group:
notify-player-of-group: true
registered-former-unregistered-only: true
table-name: smf_themes
user-id-column: id_member
uses-key: true
playername-column:
key-name: cust_ign
key-column: variable
value-column: value
# Requirements (false, removed)
# Statistics Tracking (false, removed)
# Web Application Group Configuration
# -----------------------------------------------------------------------------
app-group-config:
primary:
enabled: true
table-name: smf_members
user-id-column: id_member
uses-key: false
group-id-column: id_group
key-name:
key-column:
secondary:
enabled: true
table-name: smf_members
user-id-column: id_member
storage-method: single
group-id-column: additional_groups
group-id-delimiter: ','
key-name:
key-column:
simple-synchronization:
# Set this to true for simple synchronization
enabled: true
direction: minecraft
# Set this to true if you want the player to be notified when their primary
# group changes.
primary-group-change-notify: false
super-user-user-id: '1'
groups-treated-as-primary: ['Guest','Member','Veteran','Elder']
group-mapping:
'12' : 'Guest'
'11' : 'Member'
'10' : 'Veteran'
'9' : 'Elder'
Also, when using '/cbsync' in game it returns 'null' to the player.
EDIT: Got bored and was messing around with github and this fixed the 'null' issue on my end.
https://github.com/paul1338/CommunityBridge/commit/7c959428c7d64950601e312ac5766b28259fb593
(Imported from Bukkit Tickets)
Requested by: http://dev.bukkit.org/profiles/giannoug/, http://dev.bukkit.org/profiles/fragger505/, http://dev.bukkit.org/profiles/MinecraftFreaksOnline/, http://dev.bukkit.org/profiles/xiZverx/
Using PW authentication. When a user joined the game he'd have to enter his forum password to play. If he didn't he'd be treated as not registered at all. It should be pretty straight forward, you could use the existing username verification, and add password checks maybe even with the same code (+salt+hash decription).
You can check out xAuth and AuthMe. These plugins do that, only that they don't support any rank syncing and aren't nearly as adaptable as this is. I cannot set up multi table configuration to add custom fields for example...
Currently, CommunityBridge places you in the permissions group that is mapped to the webapp's primary group if you have an account. Otherwise, it leaves you in the default group, which usually has reduced permissions.
What you want this feature to do is leave the player in the default group until they issue a command that checks their password against their account on the web application, if its correct, then they're placed in the permissions group.
Its doable. One caveat is that whoever is configuring CommunityBridge will need to know what encryption method (frequently SHA1 or MD5) the web application is using for its passwords.
Yes. But while doing some research into the password encryption when I tried to get AuthMe to work I found out this:
Anyway, I did some reading on IPB 2.x's password schema a while ago and as it turned out it is elementary to import IPB 2.x's password hashes to vBulletin 3.x. IPS chose to use the same system but hash the salt in the password hash to make it difficult to switch from vBulletin 3.x to IPB 2.x with the same password hashes.
For a visual aid, here is how vBulletin's password schema works:
md5(md5(password).salt)
Here is IPB 2.x's password schema:
md5(md5(password).md5(salt))
As far as I can understand this, it means that just using md5 hashing wont be enough for integration. You'd have to code the decryption differently for different webapps. And seeing how CB is currenty very very adaptable, it may be a problem if you had to limit your support to just a few web applications.
So in order to keep the adaptability the person configuring CB would have to know a tad more than just what hashing his webapp uses.
Wow. Yeah, I'll have to reflect on how to provide the feature flexibly. Probably consider the simplest cases and work "up" from there.
The very simplest is the forum stores the password in plain text in the database hopefully...no one actually does this...in fact, I'm disinclined to support it...'get a different app' might be in order on this one.
I'd say next is the case where it uses one of the built-in-to-mysql encryption functions (http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html).
Then perhaps provide a way to capture the variations that VB and IPB use. Probably a field for the salt and then a way to specify the method.
Originally requested by: http://dev.bukkit.org/profiles/ricardol31/
It would be great if you can add a option, that if you go a rank up that you can give that player a amount of money.
And that you can modify how much money for a group.
Originally requested by: http://dev.bukkit.org/profiles/ThoLav/ in bukkit ticket: http://dev.bukkit.org/bukkit-plugins/communitybridge-fm/tickets/100-support-for-zpermissions/
Hello,
it would be awesome if you could integrate support for zPermissions.
Then I could manage perrmissions with an WebInterface.
During 'reload' CraftBukkit complains that the background tasks are not being shut down properly during deactivation:
13:48:13 [SEVERE] Nag author: 'Feaelin' of 'CommunityBridge' about the following: This plugin is not properly shutting down its async tasks when it is being r
eloaded. This may cause conflicts with the newly loaded version of the plugin
Requested By: http://dev.bukkit.org/profiles/sossos1988/
sossos1988: Is there a way to tell Community Bridge that I would like to only have specific groups from IPB 3.4 to be allowed on the MC server. Otherwise it tells them that they are not able to join. Something to that effect.
"Require minimum posts table name" (sentence case) vs. "Tracking Table Name" (camel case).
An example config.yml for Wordpress users WITHOUT employing a Wordpress plugin such as CIMY Extra Fields. The example should have some companion documentation explaining why the given options were chosen.
So I got this installed and configured, however I'm stuck. Whenever a user joins that has registered on the forums I get this in the logs...
02:11:39 [INFO] Group not found!
02:11:39 [INFO] /manuadd | optional [world]
02:11:39 [INFO] [CommunityBridge] Setting daplayer to group null
02:11:39 [INFO] [CommunityBridge] daplayer linked to Community User #56, Group: null
Here's my config for CommunityBridge. Any help would be super!
log-level: finest
permissions-system: GroupManager
db-host: localhost
db-port: 3306
db-database: phpbb
db-username: user
db-password: pass
show-primary-group: true
kick-unregistered: false
multi-tables: false
multi-tables-use-key: false
use-banned-field: false
group-synchronization:
primary-group:
enabled: true
group-ids-to-ignore: []
group-names-to-ignore: []
groups-table:
enabled: false
table: phpbb_user_group
user-id-field: user_id
group-id-field: group_id
secondary-groups: false
auto-sync: true
auto-every-unit: minutes
auto-sync-every: 20
auto-remind: true
auto-remind-every: 5
enable-basic-tracking: false
users-table:
table: phpbb_users
user-name-field: username_clean
user-id-field: user_id
groups-id-field: group_id
default-group: 1
groups:
'12':'_MEMBERDONATE'
'1':'_GUEST'
'13':'_OWNER'
'10':'_MEMBERCHARTER'
'8':'_MOD'
'11':'_MEMBER'
'3':'_MEMBER'
'9':'_ADMIN'
Support for SMF's Custom Profile Fields
Needs INSERT ... UPDATE ON DUPLICATE. But it will also need additional info in the INSERT to begin with. The primary key is composite of member_id, theme_id, and key_name.
Add section on configuring the Player Linking section to the documentation.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.