mirror of
				https://github.com/TitanEmbeds/Titan.git
				synced 2025-11-04 07:47:10 +01:00 
			
		
		
		
	Prevent duplicate ip hashes from showing up the unauth list, Set unauth table to default horizontal
This commit is contained in:
		@@ -4,6 +4,8 @@ from titanembeds.decorators import discord_users_only
 | 
				
			|||||||
from titanembeds.utils import discord_api
 | 
					from titanembeds.utils import discord_api
 | 
				
			||||||
from titanembeds.database import db, Guilds, UnauthenticatedUsers, UnauthenticatedBans
 | 
					from titanembeds.database import db, Guilds, UnauthenticatedUsers, UnauthenticatedBans
 | 
				
			||||||
from titanembeds.oauth import authorize_url, token_url, make_authenticated_session, get_current_authenticated_user, get_user_managed_servers, check_user_can_administrate_guild, check_user_permission, generate_avatar_url, generate_guild_icon_url, generate_bot_invite_url
 | 
					from titanembeds.oauth import authorize_url, token_url, make_authenticated_session, get_current_authenticated_user, get_user_managed_servers, check_user_can_administrate_guild, check_user_permission, generate_avatar_url, generate_guild_icon_url, generate_bot_invite_url
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
user = Blueprint("user", __name__)
 | 
					user = Blueprint("user", __name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -90,7 +92,6 @@ def administrate_guild(guild_id):
 | 
				
			|||||||
    all_members = db.session.query(UnauthenticatedUsers).filter(UnauthenticatedUsers.guild_id == guild_id).order_by(UnauthenticatedUsers.last_timestamp).all()
 | 
					    all_members = db.session.query(UnauthenticatedUsers).filter(UnauthenticatedUsers.guild_id == guild_id).order_by(UnauthenticatedUsers.last_timestamp).all()
 | 
				
			||||||
    all_bans = db.session.query(UnauthenticatedBans).filter(UnauthenticatedBans.guild_id == guild_id).all()
 | 
					    all_bans = db.session.query(UnauthenticatedBans).filter(UnauthenticatedBans.guild_id == guild_id).all()
 | 
				
			||||||
    users = prepare_guild_members_list(all_members, all_bans)
 | 
					    users = prepare_guild_members_list(all_members, all_bans)
 | 
				
			||||||
    users.reverse()
 | 
					 | 
				
			||||||
    dbguild_dict = {"unauth_users": db_guild.unauth_users}
 | 
					    dbguild_dict = {"unauth_users": db_guild.unauth_users}
 | 
				
			||||||
    return render_template("administrate_guild.html.j2", guild=guild['content'], dbguild=dbguild_dict, members=users, permissions=permissions)
 | 
					    return render_template("administrate_guild.html.j2", guild=guild['content'], dbguild=dbguild_dict, members=users, permissions=permissions)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -120,6 +121,8 @@ def me():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
def prepare_guild_members_list(members, bans):
 | 
					def prepare_guild_members_list(members, bans):
 | 
				
			||||||
    all_users = []
 | 
					    all_users = []
 | 
				
			||||||
 | 
					    ip_pool = []
 | 
				
			||||||
 | 
					    members = sorted(members, key=lambda k: datetime.datetime.strptime(str(k.last_timestamp), "%Y-%m-%d %H:%M:%S"), reverse=True)
 | 
				
			||||||
    for member in members:
 | 
					    for member in members:
 | 
				
			||||||
        user = {
 | 
					        user = {
 | 
				
			||||||
            "id": member.id,
 | 
					            "id": member.id,
 | 
				
			||||||
@@ -133,6 +136,7 @@ def prepare_guild_members_list(members, bans):
 | 
				
			|||||||
            "banned_by": None,
 | 
					            "banned_by": None,
 | 
				
			||||||
            "banned_reason": None,
 | 
					            "banned_reason": None,
 | 
				
			||||||
            "ban_lifted_by": None,
 | 
					            "ban_lifted_by": None,
 | 
				
			||||||
 | 
					            "aliases": [],
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        for banned in bans:
 | 
					        for banned in bans:
 | 
				
			||||||
            if banned.ip_address == member.ip_address:
 | 
					            if banned.ip_address == member.ip_address:
 | 
				
			||||||
@@ -143,7 +147,16 @@ def prepare_guild_members_list(members, bans):
 | 
				
			|||||||
                user['banned_reason'] = banned.reason
 | 
					                user['banned_reason'] = banned.reason
 | 
				
			||||||
                user['ban_lifted_by'] = banned.lifter_id
 | 
					                user['ban_lifted_by'] = banned.lifter_id
 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
 | 
					        if user["ip"] not in ip_pool:
 | 
				
			||||||
            all_users.append(user)
 | 
					            all_users.append(user)
 | 
				
			||||||
 | 
					            ip_pool.append(user["ip"])
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            for usr in all_users:
 | 
				
			||||||
 | 
					                if user["ip"] == usr["ip"]:
 | 
				
			||||||
 | 
					                    alias = user["username"]+"#"+str(user["discrim"])
 | 
				
			||||||
 | 
					                    if len(usr["aliases"]) < 5 and alias not in usr["aliases"]:
 | 
				
			||||||
 | 
					                        usr["aliases"].append(alias)
 | 
				
			||||||
 | 
					                    continue
 | 
				
			||||||
    return all_users
 | 
					    return all_users
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@user.route("/ban", methods=["POST"])
 | 
					@user.route("/ban", methods=["POST"])
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										77
									
								
								titanembeds/static/css/administrate_guild.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								titanembeds/static/css/administrate_guild.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					/* Responsive table CSS, directly from materializecss - slightly modified */
 | 
				
			||||||
 | 
					/* Used to accomplish having permanent horizontal table */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table.responsive-table {
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  border-collapse: collapse;
 | 
				
			||||||
 | 
					  border-spacing: 0;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  table-layout: fixed;
 | 
				
			||||||
 | 
					  /* sort out borders */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table td:empty:before {
 | 
				
			||||||
 | 
					  content: '\00a0';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table th,
 | 
				
			||||||
 | 
					table.responsive-table td {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  vertical-align: top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table th {
 | 
				
			||||||
 | 
					  text-align: left;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table thead {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  float: left;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table thead tr {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  padding: 0 10px 0 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table thead tr th::before {
 | 
				
			||||||
 | 
					  content: "\00a0";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table tbody {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  width: auto;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  overflow-x: auto;
 | 
				
			||||||
 | 
					  white-space: nowrap;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table tbody tr {
 | 
				
			||||||
 | 
					  display: inline-block;
 | 
				
			||||||
 | 
					  vertical-align: top;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table th {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  text-align: right;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table td {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  min-height: 1.25em;
 | 
				
			||||||
 | 
					  text-align: left;
 | 
				
			||||||
 | 
					  padding: 13px 5px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table tr {
 | 
				
			||||||
 | 
					  padding: 0 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table thead {
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					  border-right: 1px solid #d0d0d0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table.bordered th {
 | 
				
			||||||
 | 
					  border-bottom: 0;
 | 
				
			||||||
 | 
					  border-left: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table.bordered td {
 | 
				
			||||||
 | 
					  border-left: 0;
 | 
				
			||||||
 | 
					  border-right: 0;
 | 
				
			||||||
 | 
					  border-bottom: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table.bordered tr {
 | 
				
			||||||
 | 
					  border: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					table.responsive-table.bordered tbody tr {
 | 
				
			||||||
 | 
					  border-right: 1px solid #d0d0d0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,6 +1,10 @@
 | 
				
			|||||||
{% extends 'site_layout.html.j2' %}
 | 
					{% extends 'site_layout.html.j2' %}
 | 
				
			||||||
{% block title %}Administrate Guild: {{ guild['name'] }}{% endblock %}
 | 
					{% block title %}Administrate Guild: {{ guild['name'] }}{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block additional_head_elements %}
 | 
				
			||||||
 | 
					  <link type="text/css" rel="stylesheet" href="{{ url_for('static', filename='css/administrate_guild.css') }}">
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% block content %}
 | 
					{% block content %}
 | 
				
			||||||
<h1>Administrating: {{ guild['name'] }}</h1>
 | 
					<h1>Administrating: {{ guild['name'] }}</h1>
 | 
				
			||||||
<p class="flow-text">For this server, you are allowed the following actions:
 | 
					<p class="flow-text">For this server, you are allowed the following actions:
 | 
				
			||||||
@@ -72,6 +76,7 @@
 | 
				
			|||||||
                        <th>Banned by</th>
 | 
					                        <th>Banned by</th>
 | 
				
			||||||
                        <th>Banned Reason</th>
 | 
					                        <th>Banned Reason</th>
 | 
				
			||||||
                        <th>Ban Lifted by</th>
 | 
					                        <th>Ban Lifted by</th>
 | 
				
			||||||
 | 
					                        <th>Recent Aliases</th>
 | 
				
			||||||
                    </tr>
 | 
					                    </tr>
 | 
				
			||||||
                  </thead>
 | 
					                  </thead>
 | 
				
			||||||
                  <tbody>
 | 
					                  <tbody>
 | 
				
			||||||
@@ -91,11 +96,22 @@
 | 
				
			|||||||
                        <td>{{ member['banned_by'] }}</td>
 | 
					                        <td>{{ member['banned_by'] }}</td>
 | 
				
			||||||
                        <td>{{ member['banned_reason'] }}</td>
 | 
					                        <td>{{ member['banned_reason'] }}</td>
 | 
				
			||||||
                        <td>{{ member['ban_lifted_by'] }}</td>
 | 
					                        <td>{{ member['ban_lifted_by'] }}</td>
 | 
				
			||||||
 | 
					                        <td>
 | 
				
			||||||
 | 
					                          <ul>
 | 
				
			||||||
 | 
					                            {% if member['aliases']|length > 0 %}
 | 
				
			||||||
 | 
					                              {% for alias in member['aliases'] %}
 | 
				
			||||||
 | 
					                              <li>{{ alias }}</li>
 | 
				
			||||||
 | 
					                              {% endfor %}
 | 
				
			||||||
 | 
					                            {% else %}
 | 
				
			||||||
 | 
					                              <li>None</li>
 | 
				
			||||||
 | 
					                            {% endif %}
 | 
				
			||||||
 | 
					                          </ul>
 | 
				
			||||||
 | 
					                        </td>
 | 
				
			||||||
                      </tr>
 | 
					                      </tr>
 | 
				
			||||||
                    {% endfor %}
 | 
					                    {% endfor %}
 | 
				
			||||||
                  </tbody>
 | 
					                  </tbody>
 | 
				
			||||||
                </table>
 | 
					                </table>
 | 
				
			||||||
                <p>Note that all bans are by IP. Seeing duplicates? It is because users are generated a unique session on each browser load.</p>
 | 
					                <p>Note that all bans are by IP. Seeing duplicates? It is because users are generated a unique session on each browser load. (Though we try to remove/concat any duplicates IP hashes)</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,6 +12,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <title>{% block title %}{% endblock %} - Titan Embeds for Discord</title>
 | 
					    <title>{% block title %}{% endblock %} - Titan Embeds for Discord</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {% block additional_head_elements %}{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {% include 'google_analytics.html.j2' %}
 | 
					    {% include 'google_analytics.html.j2' %}
 | 
				
			||||||
  </head>
 | 
					  </head>
 | 
				
			||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user