From 0a369cc83a4b0c99902b3424d20f7306c5611515 Mon Sep 17 00:00:00 2001 From: chanhengseang Date: Mon, 26 May 2025 14:10:36 -0700 Subject: [PATCH] Clean up IP shit --- .../main/java/me/zhengjie/base/BaseDTO.java | 40 ------- .../java/me/zhengjie/utils/StringUtils.java | 12 +- .../security/JwtAuthenticationEntryPoint.java | 1 + scripts/add-sport-permissions.sh | 25 ++++ scripts/create-clubs.sh | 111 ++++++++++++++++++ scripts/create-three-clubs.sh | 106 +++++++++++++++++ scripts/fix-dto-classes.sh | 28 +++++ .../java/com/srr/rest/ClubController.java | 3 + 8 files changed, 282 insertions(+), 44 deletions(-) create mode 100755 scripts/add-sport-permissions.sh create mode 100755 scripts/create-clubs.sh create mode 100755 scripts/create-three-clubs.sh create mode 100755 scripts/fix-dto-classes.sh diff --git a/eladmin-common/src/main/java/me/zhengjie/base/BaseDTO.java b/eladmin-common/src/main/java/me/zhengjie/base/BaseDTO.java index cdd1ee4c..621770ce 100644 --- a/eladmin-common/src/main/java/me/zhengjie/base/BaseDTO.java +++ b/eladmin-common/src/main/java/me/zhengjie/base/BaseDTO.java @@ -29,46 +29,6 @@ public class BaseDTO implements Serializable { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss") private Timestamp updateTime; - /** - * Method chaining setter for createBy - * @param createBy creator - * @return this instance - */ - public BaseDTO setCreateBy(String createBy) { - this.createBy = createBy; - return this; - } - - /** - * Method chaining setter for updateBy - * @param updateBy updater - * @return this instance - */ - public BaseDTO setUpdateBy(String updateBy) { - this.updateBy = updateBy; - return this; - } - - /** - * Method chaining setter for createTime - * @param createTime creation time - * @return this instance - */ - public BaseDTO setCreateTime(Timestamp createTime) { - this.createTime = createTime; - return this; - } - - /** - * Method chaining setter for updateTime - * @param updateTime update time - * @return this instance - */ - public BaseDTO setUpdateTime(Timestamp updateTime) { - this.updateTime = updateTime; - return this; - } - @Override public String toString() { ToStringBuilder builder = new ToStringBuilder(this); diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java b/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java index c6f1d958..69c59552 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java @@ -20,6 +20,7 @@ import cn.hutool.http.useragent.UserAgentUtil; import lombok.extern.slf4j.Slf4j; import net.dreamlu.mica.ip2region.core.Ip2regionSearcher; import net.dreamlu.mica.ip2region.core.IpInfo; + import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.NetworkInterface; @@ -163,7 +164,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { */ public static String getCityInfo(String ip) { IpInfo ipInfo = IP_SEARCHER.memorySearch(ip); - if(ipInfo != null){ + if (ipInfo != null) { return ipInfo.getAddress(); } return null; @@ -174,8 +175,11 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { */ public static String getBrowser(HttpServletRequest request) { UserAgent ua = UserAgentUtil.parse(request.getHeader("User-Agent")); + if (ua == null) { + return UNKNOWN; + } String browser = ua.getBrowser().toString() + " " + ua.getVersion(); - return browser.replace(".0.0.0",""); + return browser.replace(".0.0.0", ""); } /** @@ -202,10 +206,10 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { try { InetAddress candidateAddress = null; // 遍历所有的网络接口 - for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements();) { + for (Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements(); ) { NetworkInterface anInterface = interfaces.nextElement(); // 在所有的接口下再遍历IP - for (Enumeration inetAddresses = anInterface.getInetAddresses(); inetAddresses.hasMoreElements();) { + for (Enumeration inetAddresses = anInterface.getInetAddresses(); inetAddresses.hasMoreElements(); ) { InetAddress inetAddr = inetAddresses.nextElement(); // 排除loopback类型地址 if (!inetAddr.isLoopbackAddress()) { diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthenticationEntryPoint.java b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthenticationEntryPoint.java index f6884f4e..ed5a4dc1 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthenticationEntryPoint.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/security/security/JwtAuthenticationEntryPoint.java @@ -35,6 +35,7 @@ public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { + authException.printStackTrace(); // 当用户尝试访问安全的REST资源而不提供任何凭据时,将调用此方法发送401 响应 int code = HttpStatus.UNAUTHORIZED.value(); response.setStatus(code); diff --git a/scripts/add-sport-permissions.sh b/scripts/add-sport-permissions.sh new file mode 100755 index 00000000..872a229e --- /dev/null +++ b/scripts/add-sport-permissions.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Check if JWT_TOKEN is set +if [ -z "$JWT_TOKEN" ]; then + echo "JWT_TOKEN environment variable is not set. Please run login.sh first and export the token." + echo "Example: export JWT_TOKEN=\"Bearer eyJhbGciOiJIUzUxMiJ9...\"" + exit 1 +fi + +# Add sport permissions to the admin role (ID: 1) +curl -X PUT "http://localhost:8000/api/roles" \ + -H "Content-Type: application/json" \ + -H "Authorization: $JWT_TOKEN" \ + -d '{ + "id": 1, + "name": "超级管理员", + "level": 1, + "description": "超级管理员", + "dataScope": "全部", + "depts": [], + "menus": [], + "permission": "admin,sport:list,sport:add,sport:edit,sport:del,club:list,club:add,club:edit,club:del" + }' + +echo -e "\nAdded sport permissions to admin role" diff --git a/scripts/create-clubs.sh b/scripts/create-clubs.sh new file mode 100755 index 00000000..217ddc63 --- /dev/null +++ b/scripts/create-clubs.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +# Check if JWT_TOKEN is set +if [ -z "$JWT_TOKEN" ]; then + echo "JWT_TOKEN environment variable is not set. Please run login.sh first and export the token." + echo "Example: export JWT_TOKEN=\"Bearer eyJhbGciOiJIUzUxMiJ9...\"" + exit 1 +fi + +echo "Trying to determine the correct club API endpoint..." + +# Try different potential endpoints for club creation +ENDPOINTS=( + "/api/club" + "/api/sport/club" + "/api/clubs" +) + +# Get a new token first +TOKEN_RESPONSE=$(curl -s -X POST 'http://localhost:8000/auth/login' \ + -H 'Content-Type: application/json' \ + -d '{ + "username": "admin", + "password": "123456" + }') + +# Extract the token +NEW_TOKEN=$(echo $TOKEN_RESPONSE | grep -o '"token":"[^"]*' | sed 's/"token":"//') +echo "Using token: $NEW_TOKEN" + +for ENDPOINT in "${ENDPOINTS[@]}"; do + echo "Trying endpoint: $ENDPOINT" + + # Check if the endpoint exists (GET request to see if it returns 404) + STATUS=$(curl -s -o /dev/null -w "%{http_code}" -X GET "http://localhost:8000$ENDPOINT" \ + -H "Authorization: $NEW_TOKEN") + + echo " Status code: $STATUS" + + if [ "$STATUS" != "404" ]; then + echo "Found working endpoint: $ENDPOINT" + + # Create Club 1: SF Tennis Club + echo "Creating SF Tennis Club..." + curl -X POST "http://localhost:8000$ENDPOINT" \ + -H "Content-Type: application/json" \ + -H "Authorization: $NEW_TOKEN" \ + -d '{ + "name": "SF Tennis Club", + "description": "Premier tennis club in San Francisco with indoor and outdoor courts.", + "icon": "sf-tennis-club-icon", + "sort": 1, + "enabled": true, + "location": "San Francisco, CA", + "longitude": -122.4194, + "latitude": 37.7749 + }' + echo + + # Create Club 2: Seattle Badminton Club + echo "Creating Seattle Badminton Club..." + curl -X POST "http://localhost:8000$ENDPOINT" \ + -H "Content-Type: application/json" \ + -H "Authorization: $NEW_TOKEN" \ + -d '{ + "name": "Seattle Badminton Club", + "description": "Professional badminton facility with Olympic-standard courts.", + "icon": "seattle-badminton-icon", + "sort": 2, + "enabled": true, + "location": "Seattle, WA", + "longitude": -122.3321, + "latitude": 47.6062 + }' + echo + + # Create Club 3: LA Pickleball Center + echo "Creating LA Pickleball Center..." + curl -X POST "http://localhost:8000$ENDPOINT" \ + -H "Content-Type: application/json" \ + -H "Authorization: $NEW_TOKEN" \ + -d '{ + "name": "LA Pickleball Center", + "description": "Southern California\'s largest dedicated pickleball facility.", + "icon": "la-pickleball-icon", + "sort": 3, + "enabled": true, + "location": "Los Angeles, CA", + "longitude": -118.2437, + "latitude": 34.0522 + }' + echo + + # Try to list clubs to verify they were created + echo "Listing clubs:" + curl -X GET "http://localhost:8000$ENDPOINT" \ + -H "Content-Type: application/json" \ + -H "Authorization: $NEW_TOKEN" + echo + + break + fi +done + +if [ "$STATUS" == "404" ]; then + echo "All endpoints returned 404. The club API may not be properly deployed." + echo "Checking if we can access the sport API:" + curl -s -X GET "http://localhost:8000/api/sport" \ + -H "Content-Type: application/json" \ + -H "Authorization: $NEW_TOKEN" +fi diff --git a/scripts/create-three-clubs.sh b/scripts/create-three-clubs.sh new file mode 100755 index 00000000..9137b64d --- /dev/null +++ b/scripts/create-three-clubs.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +# First get a new token +echo "Getting JWT token..." +TOKEN_RESPONSE=$(curl -s -X POST 'http://localhost:8000/auth/login' \ + -H 'Content-Type: application/json' \ + -d '{ + "username": "admin", + "password": "123456" + }') + +# Extract the token and prepare Bearer token +TOKEN=$(echo $TOKEN_RESPONSE | grep -o '"token":"[^"]*' | sed 's/"token":"//') +BEARER_TOKEN="Bearer $TOKEN" +echo "Token obtained successfully" + +echo "Trying different club API endpoints..." + +# List of possible endpoints to try +endpoints=("/api/club" "/api/clubs" "/api/sport/club") + +# Try each endpoint +for endpoint in "${endpoints[@]}"; do + echo "Testing endpoint: $endpoint" + status=$(curl -s -o /dev/null -w "%{http_code}" -X GET "http://localhost:8000$endpoint" \ + -H "Authorization: $BEARER_TOKEN") + + echo "Status code: $status" + + if [ "$status" != "404" ]; then + working_endpoint=$endpoint + echo "Found working endpoint: $working_endpoint" + break + fi +done + +if [ -z "$working_endpoint" ]; then + echo "Could not find a working club API endpoint. Creating clubs directly in the database instead." + # Here we would add database commands if needed + + # As a fallback, let's verify we can still access the sport API + echo "Checking if sport API is accessible:" + curl -s "http://localhost:8000/api/sport" \ + -H "Authorization: $BEARER_TOKEN" + exit 1 +fi + +# Create Club 1: SF Tennis Club +echo "Creating SF Tennis Club..." +curl -X POST "http://localhost:8000$working_endpoint" \ + -H "Content-Type: application/json" \ + -H "Authorization: $BEARER_TOKEN" \ + -d '{ + "name": "SF Tennis Club", + "description": "Premier tennis club in San Francisco with indoor and outdoor courts.", + "icon": "sf-tennis-club-icon", + "sort": 1, + "enabled": true, + "location": "San Francisco, CA", + "longitude": -122.4194, + "latitude": 37.7749 + }' +echo + +# Create Club 2: Seattle Badminton Club +echo "Creating Seattle Badminton Club..." +curl -X POST "http://localhost:8000$working_endpoint" \ + -H "Content-Type: application/json" \ + -H "Authorization: $BEARER_TOKEN" \ + -d '{ + "name": "Seattle Badminton Club", + "description": "Professional badminton facility with Olympic-standard courts.", + "icon": "seattle-badminton-icon", + "sort": 2, + "enabled": true, + "location": "Seattle, WA", + "longitude": -122.3321, + "latitude": 47.6062 + }' +echo + +# Create Club 3: LA Pickleball Center +echo "Creating LA Pickleball Center..." +curl -X POST "http://localhost:8000$working_endpoint" \ + -H "Content-Type: application/json" \ + -H "Authorization: $BEARER_TOKEN" \ + -d '{ + "name": "LA Pickleball Center", + "description": "Southern California'\''s largest dedicated pickleball facility.", + "icon": "la-pickleball-icon", + "sort": 3, + "enabled": true, + "location": "Los Angeles, CA", + "longitude": -118.2437, + "latitude": 34.0522 + }' +echo + +# List clubs to verify they were created +echo "Listing clubs:" +curl -X GET "http://localhost:8000$working_endpoint" \ + -H "Content-Type: application/json" \ + -H "Authorization: $BEARER_TOKEN" +echo + +echo "Club creation process completed!" diff --git a/scripts/fix-dto-classes.sh b/scripts/fix-dto-classes.sh new file mode 100755 index 00000000..668c4910 --- /dev/null +++ b/scripts/fix-dto-classes.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# List of all DTO classes that extend BaseDTO +DTO_FILES=( + "/Users/chanhengseang/Documents/study/backend/eladmin-tools/src/main/java/me/zhengjie/service/dto/LocalStorageDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/maint/service/dto/DatabaseDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DeptDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/maint/service/dto/ServerDeployDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/maint/service/dto/AppDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/maint/service/dto/DeployDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/RoleDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/MenuDto.java" + "/Users/chanhengseang/Documents/study/backend/eladmin-system/src/main/java/me/zhengjie/modules/system/service/dto/DictDetailDto.java" +) + +# Fix each file +for file in "${DTO_FILES[@]}"; do + echo "Fixing $file" + + # Get the class name from the file path + class_name=$(basename "$file" .java) + + # Replace "extends BaseDTO" with "extends BaseDTO" + sed -i '' "s/extends BaseDTO implements/extends BaseDTO<$class_name> implements/g" "$file" +done + +echo "All DTO files have been updated!" diff --git a/sport/src/main/java/com/srr/rest/ClubController.java b/sport/src/main/java/com/srr/rest/ClubController.java index b8bd4ae0..2dfb245b 100644 --- a/sport/src/main/java/com/srr/rest/ClubController.java +++ b/sport/src/main/java/com/srr/rest/ClubController.java @@ -15,6 +15,7 @@ */ package com.srr.rest; +import lombok.extern.slf4j.Slf4j; import me.zhengjie.annotation.Log; import com.srr.domain.Club; import com.srr.service.ClubService; @@ -40,6 +41,7 @@ import com.srr.dto.ClubDto; @RestController @RequiredArgsConstructor @Api(tags = "clubs") +@Slf4j @RequestMapping("/api/club") public class ClubController { @@ -64,6 +66,7 @@ public class ClubController { @ApiOperation("Add clubs") @PreAuthorize("@el.check('club:add')") public ResponseEntity createClub(@Validated @RequestBody Club resources){ + log.info("createClub"); clubService.create(resources); return new ResponseEntity<>(HttpStatus.CREATED); }