mirror of
https://github.com/HangarMC/Hangar.git
synced 2025-01-30 14:30:08 +08:00
fix(backend): make sure user and project name are case-insensitive everywhere
This commit is contained in:
parent
589e9db6a9
commit
9e1aed4a72
@ -51,11 +51,11 @@ public class LogProjectFilter implements Filter<LogProjectFilterInstance, String
|
||||
@Override
|
||||
public void createSql(final StringBuilder sb, final SqlStatement<?> q) {
|
||||
if (StringUtils.isNotBlank(this.authorName)) {
|
||||
sb.append(" AND la.p_owner_name = :authorName");
|
||||
sb.append(" AND lower(la.p_owner_name) = lower(:authorName)");
|
||||
q.bind("authorName", this.authorName);
|
||||
}
|
||||
if (StringUtils.isNotBlank(this.projectSlug)) {
|
||||
sb.append(" AND la.p_slug = :projectSlug");
|
||||
sb.append(" AND lower(la.p_slug) = lower(:projectSlug)");
|
||||
q.bind("projectSlug", this.projectSlug);
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public class LogSubjectFilter implements Filter<LogSubjectFilterInstance, String
|
||||
@Override
|
||||
public void createSql(final StringBuilder sb, final SqlStatement<?> q) {
|
||||
if (StringUtils.isNotBlank(this.subjectName)) {
|
||||
sb.append(" AND la.s_name = :subjectName");
|
||||
sb.append(" AND lower(la.s_name) = lower(:subjectName)");
|
||||
q.bind("subjectName", this.subjectName);
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ public class LogUserFilter implements Filter<LogUserFilterInstance, String> {
|
||||
@Override
|
||||
public void createSql(final StringBuilder sb, final SqlStatement<?> q) {
|
||||
if (StringUtils.isNotBlank(this.userName)) {
|
||||
sb.append(" AND la.user_name = :userName");
|
||||
sb.append(" AND lower(la.user_name) = lower(:userName)");
|
||||
q.bind("userName", this.userName);
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public class ProjectAuthorFilter implements Filter<ProjectAuthorFilterInstance,
|
||||
|
||||
@Override
|
||||
public void createSql(final StringBuilder sb, final SqlStatement<?> q) {
|
||||
sb.append(" AND ").append("p.owner_name").append(" = ").append(":ownerName");
|
||||
sb.append(" AND ").append("lower(p.owner_name)").append(" = ").append("lower(:ownerName)");
|
||||
q.bind("ownerName", this.ownerName);
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ public interface PermissionsDAO {
|
||||
@SqlQuery("SELECT coalesce(gt.permission, B'0'::bit(64))::bigint perm_value" +
|
||||
" FROM users u " +
|
||||
" LEFT JOIN global_trust gt ON u.id = gt.user_id" +
|
||||
" WHERE u.id = :userId OR u.name = :userName")
|
||||
" WHERE u.id = :userId OR lower(u.name) = lower(:userName)")
|
||||
Permission _getGlobalPermission(Long userId, String userName);
|
||||
|
||||
default Permission getGlobalPermission(final long userId) {
|
||||
@ -29,7 +29,7 @@ public interface PermissionsDAO {
|
||||
@SqlQuery("SELECT (coalesce(gt.permission, B'0'::bit(64)) | coalesce(pt.permission, B'0'::bit(64)) | coalesce(ot.permission, B'0'::bit(64)))::bigint AS perm_value" +
|
||||
" FROM users u " +
|
||||
" LEFT JOIN global_trust gt ON u.id = gt.user_id" +
|
||||
" LEFT JOIN projects p ON (lower(p.owner_name) = lower(:author) AND p.slug = :slug) OR p.id = :projectId" +
|
||||
" LEFT JOIN projects p ON (lower(p.owner_name) = lower(:author) AND lower(p.slug) = lower(:slug)) OR p.id = :projectId" +
|
||||
" LEFT JOIN project_trust pt ON u.id = pt.user_id AND pt.project_id = p.id" +
|
||||
" LEFT JOIN organization_trust ot ON u.id = ot.user_id AND ot.organization_id = p.owner_id" +
|
||||
" WHERE u.id = :userId")
|
||||
|
@ -39,7 +39,7 @@ public interface UsersDAO {
|
||||
u.theme,
|
||||
exists(SELECT 1 FROM organizations o WHERE u.id = o.user_id) AS is_organization
|
||||
FROM users u
|
||||
WHERE u.name = :name
|
||||
WHERE lower(u.name) = lower(:name)
|
||||
OR u.id = :id
|
||||
GROUP BY u.id
|
||||
""")
|
||||
|
@ -23,7 +23,7 @@ public interface HangarUsersDAO {
|
||||
u.uuid o_user_uuid
|
||||
FROM users u
|
||||
LEFT JOIN organizations o ON u.id = o.user_id
|
||||
WHERE u.name = :userName
|
||||
WHERE lower(u.name) = lower(:userName)
|
||||
""")
|
||||
Pair<UserTable, OrganizationTable> getUserAndOrg(String userName);
|
||||
|
||||
|
@ -21,7 +21,7 @@ public interface HangarProjectPagesDAO {
|
||||
" exists(SELECT 1 FROM project_home_pages php WHERE php.page_id = pp.id AND php.project_id = p.id) AS home" +
|
||||
" FROM project_pages pp" +
|
||||
" JOIN projects p ON pp.project_id = p.id" +
|
||||
" WHERE lower(p.owner_name) = lower(:author) AND lower(p.slug) = lower(:slug) AND pp.slug = :pageSlug")
|
||||
" WHERE lower(p.owner_name) = lower(:author) AND lower(p.slug) = lower(:slug) AND lower(pp.slug) = lower(:pageSlug)")
|
||||
ExtendedProjectPage getProjectPage(String author, String slug, String pageSlug);
|
||||
|
||||
@SqlQuery("SELECT pp.*," +
|
||||
|
@ -55,9 +55,6 @@ public interface UserDAO {
|
||||
return this._getUserTable(null, null, uuid);
|
||||
}
|
||||
|
||||
@SqlQuery("SELECT * FROM users WHERE email = :email")
|
||||
UserTable getUserTableByEmail(String email);
|
||||
|
||||
@SqlQuery("""
|
||||
SELECT u.name
|
||||
FROM users u
|
||||
|
@ -37,6 +37,6 @@ public interface OrganizationMembersDAO extends MembersDAO<OrganizationMemberTab
|
||||
" FROM organization_members uom" +
|
||||
" JOIN organizations o ON o.id = uom.organization_id" +
|
||||
" JOIN users u ON uom.user_id = u.id" +
|
||||
" WHERE u.name = :user")
|
||||
" WHERE lower(u.name) = lower(:user)")
|
||||
Map<String, Boolean> getUserOrganizationMembershipVisibility(String user);
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public interface ProjectPagesDAO {
|
||||
@SqlQuery("SELECT * FROM project_pages WHERE project_id = :projectId AND parent_id = :parentId AND name = :name")
|
||||
ProjectPageTable getChildPage(long projectId, long parentId, String name);
|
||||
|
||||
@SqlQuery("SELECT * FROM project_pages WHERE project_id = :projectId AND parent_id IS NULL AND slug = :slug")
|
||||
@SqlQuery("SELECT * FROM project_pages WHERE project_id = :projectId AND parent_id IS NULL AND lower(slug) = lower(:slug)")
|
||||
ProjectPageTable getRootPage(long projectId, String slug);
|
||||
|
||||
@SqlQuery("SELECT * FROM project_pages WHERE project_id = :projectId AND id = :pageId")
|
||||
|
@ -62,7 +62,7 @@ public interface OrganizationRolesDAO extends IRolesDAO<OrganizationRoleTable> {
|
||||
JOIN users u ON uor.user_id = u.id
|
||||
JOIN users ou ON ou.id = o.user_id
|
||||
JOIN users ow ON o.owner_id = ow.id
|
||||
WHERE u.name = :user AND uor.accepted IS TRUE
|
||||
WHERE lower(u.name) = lower(:user) AND uor.accepted IS TRUE
|
||||
""")
|
||||
Map<String, OrganizationRoleTable> getUserOrganizationRoles(String user, Long userId);
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ public interface ProjectsApiDAO {
|
||||
" JOIN user_project_roles upr ON p.id = upr.project_id " +
|
||||
" JOIN users u ON upr.user_id = u.id " +
|
||||
" JOIN roles r ON upr.role_type = r.name " +
|
||||
" WHERE p.slug = :slug AND p.owner_name = :author " +
|
||||
" WHERE lower(p.slug) = lower(:slug) AND lower(p.owner_name) = lower(:author) " +
|
||||
" GROUP BY u.name ORDER BY max(r.permission::bigint) DESC " +
|
||||
" <offsetLimit>")
|
||||
List<ProjectMember> getProjectMembers(String author, String slug, @BindPagination RequestPagination pagination);
|
||||
@ -143,7 +143,7 @@ public interface ProjectsApiDAO {
|
||||
" FROM projects p " +
|
||||
" JOIN user_project_roles upr ON p.id = upr.project_id " +
|
||||
" JOIN users u ON upr.user_id = u.id " +
|
||||
" WHERE p.slug = :slug AND p.owner_name = :author " +
|
||||
" WHERE lower(p.slug) = lower(:slug) AND lower(p.owner_name) = lower(:author) " +
|
||||
" GROUP BY u.name")
|
||||
long getProjectMembersCount(String author, String slug);
|
||||
|
||||
@ -164,7 +164,7 @@ public interface ProjectsApiDAO {
|
||||
" JOIN users u ON ps.user_id = u.id " +
|
||||
" LEFT JOIN user_global_roles ugr ON u.id = ugr.user_id" +
|
||||
" LEFT JOIN roles r ON ugr.role_id = r.id" +
|
||||
" WHERE p.slug = :slug AND p.owner_name = :author " +
|
||||
" WHERE lower(p.slug) = lower(:slug) AND lower(p.owner_name) = lower(:author) " +
|
||||
" GROUP BY u.id" +
|
||||
" LIMIT :limit OFFSET :offset")
|
||||
List<User> getProjectStargazers(String author, String slug, long limit, long offset);
|
||||
@ -172,7 +172,7 @@ public interface ProjectsApiDAO {
|
||||
@SqlQuery("SELECT count(ps.user_id) " +
|
||||
" FROM projects p " +
|
||||
" JOIN project_stars ps ON p.id = ps.project_id " +
|
||||
" WHERE p.slug = :slug AND p.owner_name = :author " +
|
||||
" WHERE lower(p.slug) = lower(:slug) AND lower(p.owner_name) = lower(:author) " +
|
||||
" GROUP BY ps.user_id")
|
||||
Long getProjectStargazersCount(String author, String slug);
|
||||
|
||||
@ -193,7 +193,7 @@ public interface ProjectsApiDAO {
|
||||
" JOIN users u ON pw.user_id = u.id " +
|
||||
" LEFT JOIN user_global_roles ugr ON u.id = ugr.user_id" +
|
||||
" LEFT JOIN roles r ON ugr.role_id = r.id" +
|
||||
" WHERE p.slug = :slug AND p.owner_name = :author" +
|
||||
" WHERE lower(p.slug) = lower(:slug) AND lower(p.owner_name) = lower(:author)" +
|
||||
" GROUP BY u.id" +
|
||||
" LIMIT :limit OFFSET :offset")
|
||||
List<User> getProjectWatchers(String author, String slug, long limit, long offset);
|
||||
@ -201,7 +201,7 @@ public interface ProjectsApiDAO {
|
||||
@SqlQuery("SELECT count(pw.user_id) " +
|
||||
" FROM projects p " +
|
||||
" JOIN project_watchers pw ON p.id = pw.project_id " +
|
||||
" WHERE p.slug = :slug AND p.owner_name = :author " +
|
||||
" WHERE lower(p.slug) = lower(:slug) AND lower(p.owner_name) = lower(:author) " +
|
||||
" GROUP BY pw.user_id")
|
||||
Long getProjectWatchersCount(String author, String slug);
|
||||
|
||||
@ -213,8 +213,8 @@ public interface ProjectsApiDAO {
|
||||
" LEFT JOIN project_versions_downloads pvd ON dates.day = pvd.day" +
|
||||
" LEFT JOIN project_views pv ON dates.day = pv.day AND pvd.project_id = pv.project_id" +
|
||||
" WHERE " +
|
||||
" p.owner_name = :author AND " +
|
||||
" p.slug = :slug AND" +
|
||||
" lower(p.owner_name) = lower(:author) AND " +
|
||||
" lower(p.slug) = lower(:slug) AND" +
|
||||
" (pvd IS NULL OR pvd.project_id = p.id)" +
|
||||
" GROUP BY pv.views, dates.day")
|
||||
Map<String, DayProjectStats> getProjectStats(String author, String slug, OffsetDateTime fromDate, OffsetDateTime toDate);
|
||||
|
@ -40,7 +40,7 @@ public interface UsersApiDAO {
|
||||
" WHERE " +
|
||||
" <if(!canSeeHidden)> (hp.visibility = 0" +
|
||||
" <if(userId)>OR (<userId> = ANY(hp.project_members) AND hp.visibility != 4)<endif>) AND<endif>" +
|
||||
" u.name = :user" +
|
||||
" lower(u.name) = lower(:user)" +
|
||||
" ORDER BY <sortOrder> LIMIT :limit OFFSET :offset")
|
||||
List<ProjectCompact> getUserStarred(String user, @Define boolean canSeeHidden, @Define Long userId, @Define String sortOrder, long limit, long offset);
|
||||
|
||||
@ -52,7 +52,7 @@ public interface UsersApiDAO {
|
||||
" WHERE " +
|
||||
" <if(!canSeeHidden)> (hp.visibility = 0" +
|
||||
" <if(userId)>OR (<userId> = ANY(hp.project_members) AND hp.visibility != 4)<endif>) AND<endif>" +
|
||||
" u.name = :user")
|
||||
" lower(u.name) = lower(:user)")
|
||||
long getUserStarredCount(String user, @Define boolean canSeeHidden, @Define Long userId);
|
||||
|
||||
@RegisterConstructorMapper(ProjectCompact.class)
|
||||
@ -77,7 +77,7 @@ public interface UsersApiDAO {
|
||||
" WHERE " +
|
||||
" <if(!canSeeHidden)> (hp.visibility = 0" +
|
||||
" <if(userId)>OR (<userId> = ANY(hp.project_members) AND hp.visibility != 4)<endif>) AND<endif>" +
|
||||
" u.name = :user" +
|
||||
" lower(u.name) = lower(:user)" +
|
||||
" ORDER BY <sortOrder> LIMIT :limit OFFSET :offset")
|
||||
List<ProjectCompact> getUserWatching(String user, @Define boolean canSeeHidden, @Define Long userId, @Define String sortOrder, long limit, long offset);
|
||||
|
||||
@ -89,7 +89,7 @@ public interface UsersApiDAO {
|
||||
" WHERE " +
|
||||
" <if(!canSeeHidden)> (hp.visibility = 0" +
|
||||
" <if(userId)>OR (<userId> = ANY(hp.project_members) AND hp.visibility != 4)<endif>) AND<endif>" +
|
||||
" u.name = :user")
|
||||
" lower(u.name) = lower(:user)")
|
||||
long getUserWatchingCount(String user, @Define boolean canSeeHidden, @Define Long userId);
|
||||
|
||||
@RegisterConstructorMapper(User.class)
|
||||
@ -140,7 +140,7 @@ public interface UsersApiDAO {
|
||||
SELECT uh.old_name, uh.new_name, uh.date
|
||||
FROM users_history uh
|
||||
JOIN users u ON uh.uuid = u.uuid
|
||||
WHERE u.name = :name AND uh.date >= :date
|
||||
WHERE lower(u.name) = lower(:name) AND uh.date >= :date
|
||||
ORDER BY date DESC
|
||||
""")
|
||||
List<UserNameChange> getUserNameHistory(@NotNull String name, @NotNull OffsetDateTime date);
|
||||
|
@ -194,8 +194,8 @@ public interface VersionsApiDAO {
|
||||
" JOIN platform_versions plv ON pvpd.platform_version_id = plv.id," +
|
||||
" (SELECT generate_series(:fromDate::date, :toDate::date, INTERVAL '1 DAY') AS day) dates" +
|
||||
" LEFT JOIN project_versions_downloads pvd ON dates.day = pvd.day" +
|
||||
" WHERE p.owner_name = :author" +
|
||||
" AND p.slug = :slug" +
|
||||
" WHERE lower(p.owner_name) = lower(:author)" +
|
||||
" AND lower(p.slug) = lower(:slug)" +
|
||||
" AND pv.version_string = :versionString" +
|
||||
" AND plv.platform = :platform" +
|
||||
" AND (pvd IS NULL OR (pvd.project_id = p.id AND pvd.version_id = pv.id));")
|
||||
|
Loading…
Reference in New Issue
Block a user