diff --git a/pom.xml b/pom.xml
index 7e65d99..94e643d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -90,6 +90,11 @@
luaj-jse
3.0.1
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-xml
+ 2.11.1
+
diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/AuthProcessor.java b/src/main/java/com/alterdekim/hearthhack/component/processor/AuthProcessor.java
index b55cf07..5bfd387 100644
--- a/src/main/java/com/alterdekim/hearthhack/component/processor/AuthProcessor.java
+++ b/src/main/java/com/alterdekim/hearthhack/component/processor/AuthProcessor.java
@@ -72,6 +72,8 @@ public class AuthProcessor extends Processor {
= Protocol.VerifyWebCredentialsRequest.parseFrom(packet.getBody());
log.info( new String( verifyWebCredentialsRequest.getWebCredentials().toByteArray() ) );
+ String token = new String( verifyWebCredentialsRequest.getWebCredentials().toByteArray() );
+
Protocol.Header h = Processor.generateResponse(0, packet.getHeader().getToken(), 0, 0);
conn.send(new BattleNetPacket(h, new byte[0]));
diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java
index 7ceb49f..a9039aa 100644
--- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java
+++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/Boosters.java
@@ -4,6 +4,7 @@ import com.alterdekim.Protocol;
import com.alterdekim.hearthhack.component.TcpConnection;
import com.alterdekim.hearthhack.config.ServerConfig;
import com.alterdekim.hearthhack.service.IService;
+import com.alterdekim.hearthhack.service.UserService;
import com.alterdekim.hearthhack.util.BattleNetPacket;
import com.alterdekim.hearthhack.util.GetAccountInfoRequest;
@@ -14,10 +15,12 @@ import static com.alterdekim.hearthhack.util.GetAccountInfoRequest.BOOSTERS;
public class Boosters extends GenericParser {
private ServerConfig config;
+ private UserService userService;
@Override
public void setResources(IService service, ServerConfig config) {
this.config = config;
+ this.userService = (UserService) service;
}
@Override
diff --git a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java
index 5d02427..b40e229 100644
--- a/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java
+++ b/src/main/java/com/alterdekim/hearthhack/component/processor/client/request/generic/CardValues.java
@@ -32,7 +32,6 @@ public class CardValues extends GenericParser {
public void parseGenericRequest(int token, TcpConnection conn) throws Exception {
CardsDBF cards = DBFParser.parseCards(config.getDbfPath());
- log.info("CardsDBF: {}", cards);
Protocol.CardValues.Builder cardVals = Protocol.CardValues.newBuilder();
cards.getRecords().forEach(c -> {
@@ -56,6 +55,24 @@ public class CardValues extends GenericParser {
.setBuy(400)
.setSell(100)
.setNerfed(false));
+ cardVals.addCards(Protocol.CardValue.newBuilder()
+ .setCard(
+ Protocol.CardDef.newBuilder()
+ .setAsset(
+ Integer.parseInt(
+ fields.stream()
+ .filter(p -> p.getColumn().equals("ID"))
+ .findFirst()
+ .get()
+ .getVal()
+ )
+ )
+ .setPremium(0)
+ .build()
+ )
+ .setBuy(400)
+ .setSell(100)
+ .setNerfed(false));
});
Protocol.CardValues vals = cardVals.setCardNerfIndex(5).build();
diff --git a/src/main/java/com/alterdekim/hearthhack/dbf/CardsDBF.java b/src/main/java/com/alterdekim/hearthhack/dbf/CardsDBF.java
index ad759ca..a483965 100644
--- a/src/main/java/com/alterdekim/hearthhack/dbf/CardsDBF.java
+++ b/src/main/java/com/alterdekim/hearthhack/dbf/CardsDBF.java
@@ -1,5 +1,8 @@
package com.alterdekim.hearthhack.dbf;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.*;
import java.util.List;
@@ -10,8 +13,17 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
public class CardsDBF {
+ @JacksonXmlProperty(isAttribute = true)
private String name;
+
+ @JsonProperty("SourceFingerprint")
private String sourceFingerprint;
+
+ @JsonProperty("Column")
+ @JacksonXmlElementWrapper(useWrapping = false)
private List columns;
+
+ @JsonProperty("Record")
+ @JacksonXmlElementWrapper(useWrapping = false)
private List records;
}
diff --git a/src/main/java/com/alterdekim/hearthhack/dbf/DBFCard.java b/src/main/java/com/alterdekim/hearthhack/dbf/DBFCard.java
index 6083a04..c9e10da 100644
--- a/src/main/java/com/alterdekim/hearthhack/dbf/DBFCard.java
+++ b/src/main/java/com/alterdekim/hearthhack/dbf/DBFCard.java
@@ -1,5 +1,7 @@
package com.alterdekim.hearthhack.dbf;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import lombok.*;
import java.util.List;
@@ -9,6 +11,9 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@ToString
+
public class DBFCard {
+ @JsonProperty("Field")
+ @JacksonXmlElementWrapper(useWrapping = false)
private List fields;
}
diff --git a/src/main/java/com/alterdekim/hearthhack/dbf/DBFColumn.java b/src/main/java/com/alterdekim/hearthhack/dbf/DBFColumn.java
index 04f3628..865dc1f 100644
--- a/src/main/java/com/alterdekim/hearthhack/dbf/DBFColumn.java
+++ b/src/main/java/com/alterdekim/hearthhack/dbf/DBFColumn.java
@@ -1,5 +1,7 @@
package com.alterdekim.hearthhack.dbf;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.*;
@Getter
@@ -7,7 +9,10 @@ import lombok.*;
@AllArgsConstructor
@NoArgsConstructor
@ToString
+
public class DBFColumn {
+ @JacksonXmlProperty(isAttribute = true)
private String name;
+ @JacksonXmlProperty(isAttribute = true)
private String type;
}
diff --git a/src/main/java/com/alterdekim/hearthhack/dbf/DBFField.java b/src/main/java/com/alterdekim/hearthhack/dbf/DBFField.java
index 88db3ba..b9d0239 100644
--- a/src/main/java/com/alterdekim/hearthhack/dbf/DBFField.java
+++ b/src/main/java/com/alterdekim/hearthhack/dbf/DBFField.java
@@ -1,5 +1,7 @@
package com.alterdekim.hearthhack.dbf;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText;
import lombok.*;
@Getter
@@ -8,6 +10,8 @@ import lombok.*;
@NoArgsConstructor
@ToString
public class DBFField {
+ @JacksonXmlProperty(isAttribute = true)
private String column;
+ @JacksonXmlText
private String val;
}
diff --git a/src/main/java/com/alterdekim/hearthhack/entity/Booster.java b/src/main/java/com/alterdekim/hearthhack/entity/Booster.java
new file mode 100644
index 0000000..a707b9a
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/entity/Booster.java
@@ -0,0 +1,25 @@
+package com.alterdekim.hearthhack.entity;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "boosters")
+public class Booster {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @Column(nullable = false)
+ private Integer type;
+
+ @Column(nullable = false)
+ private Long userId;
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/entity/CardBack.java b/src/main/java/com/alterdekim/hearthhack/entity/CardBack.java
index 852164b..a956b53 100644
--- a/src/main/java/com/alterdekim/hearthhack/entity/CardBack.java
+++ b/src/main/java/com/alterdekim/hearthhack/entity/CardBack.java
@@ -19,4 +19,7 @@ public class CardBack {
@Column(nullable=false)
private Integer backId;
+
+ @Column(nullable=false)
+ private Long userId;
}
diff --git a/src/main/java/com/alterdekim/hearthhack/entity/CardStack.java b/src/main/java/com/alterdekim/hearthhack/entity/CardStack.java
new file mode 100644
index 0000000..c7b3635
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/entity/CardStack.java
@@ -0,0 +1,25 @@
+package com.alterdekim.hearthhack.entity;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "card_stack")
+public class CardStack {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @Column(nullable=false)
+ private Integer asset;
+
+ @Column(nullable=false)
+ private Integer premium;
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/entity/HeroXP.java b/src/main/java/com/alterdekim/hearthhack/entity/HeroXP.java
new file mode 100644
index 0000000..b0d41b6
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/entity/HeroXP.java
@@ -0,0 +1,37 @@
+package com.alterdekim.hearthhack.entity;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Table(name = "hero_xp")
+public class HeroXP {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @Column(nullable = false)
+ private Long userId;
+
+ @Column(nullable = false)
+ private Integer classId;
+
+ @Column(nullable = false)
+ private Integer level;
+
+ @Column(nullable = false)
+ private Integer currXp;
+
+ @Column(nullable = false)
+ private Integer maxXp;
+
+ @Column(nullable = false)
+ private Long nextRewardId;
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/entity/User.java b/src/main/java/com/alterdekim/hearthhack/entity/User.java
index ec64bc3..71bcdaf 100644
--- a/src/main/java/com/alterdekim/hearthhack/entity/User.java
+++ b/src/main/java/com/alterdekim/hearthhack/entity/User.java
@@ -38,10 +38,10 @@ public class User {
private List roles = new ArrayList<>();
@Column(nullable = false)
- private Long dustBalance;
+ private Integer dustBalance = 0;
@Column(nullable = false)
- private Long goldBalance;
+ private Integer goldBalance = 0;
@Column(nullable = false)
private Integer defaultCardBack = 0;
diff --git a/src/main/java/com/alterdekim/hearthhack/entity/UserCard.java b/src/main/java/com/alterdekim/hearthhack/entity/UserCard.java
index 1527429..54cce35 100644
--- a/src/main/java/com/alterdekim/hearthhack/entity/UserCard.java
+++ b/src/main/java/com/alterdekim/hearthhack/entity/UserCard.java
@@ -22,8 +22,5 @@ public class UserCard {
private Long userId;
@Column(nullable = false)
- private Integer asset;
-
- @Column(nullable = false)
- private Integer premium;
+ private Long cardStackId;
}
diff --git a/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java b/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java
index 9d84621..b8de9b5 100644
--- a/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java
+++ b/src/main/java/com/alterdekim/hearthhack/parser/DBFParser.java
@@ -1,101 +1,20 @@
package com.alterdekim.hearthhack.parser;
import com.alterdekim.hearthhack.dbf.CardsDBF;
-import com.alterdekim.hearthhack.dbf.DBFCard;
-import com.alterdekim.hearthhack.dbf.DBFColumn;
-import com.alterdekim.hearthhack.dbf.DBFField;
-import lombok.Getter;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import lombok.extern.slf4j.Slf4j;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
+import java.io.File;
@Slf4j
public class DBFParser extends DefaultHandler {
public static CardsDBF parseCards(String path) {
- SAXParserFactory factory = SAXParserFactory.newInstance();
- try (InputStream is = new FileInputStream(path + "/CARD.xml")) {
- SAXParser saxParser = factory.newSAXParser();
- DBFParser handler = new DBFParser();
- saxParser.parse(is, handler);
- return handler.getResult();
- } catch (ParserConfigurationException | SAXException | IOException e) {
+ try {
+ XmlMapper xmlMapper = new XmlMapper();
+ return xmlMapper.readValue(new File(path + "/CARD.xml"), CardsDBF.class);
+ } catch (Exception e) {
log.error(e.getMessage());
}
return new CardsDBF();
}
-
- private final StringBuilder currentValue = new StringBuilder();
-
- @Getter
- private CardsDBF result;
-
- @Override
- public void startDocument() {
- result = new CardsDBF();
- result.setColumns(new ArrayList<>());
- result.setRecords(new ArrayList<>());
- }
-
- @Override
- public void startElement(
- String uri,
- String localName,
- String qName,
- Attributes attributes) {
-
- currentValue.setLength(0);
-
- switch (qName) {
- case "SourceFingerprint":
- result.setSourceFingerprint(attributes.getValue(qName));
- break;
- case "Column":
- DBFColumn column = new DBFColumn();
- column.setName(attributes.getValue("name"));
- column.setType(attributes.getValue("type"));
- result.getColumns().add(column);
- break;
- case "Record":
- result.getRecords().add(new DBFCard(new ArrayList<>()));
- break;
- case "Field":
- DBFField field = new DBFField();
- field.setColumn(attributes.getValue("column"));
- result.getRecords()
- .get(result.getRecords().size()-1)
- .getFields()
- .add(field);
- break;
- case "Dbf":
- result.setName(attributes.getValue("name"));
- }
- }
-
- public void endElement(String uri,
- String localName,
- String qName) {
- if( qName.equals("Field") ) {
- List fields = result.getRecords()
- .get(result.getRecords().size()-1)
- .getFields();
- fields.get(fields.size()-1).setVal(currentValue.toString());
- result.getRecords()
- .get(result.getRecords().size()-1)
- .setFields(fields);
- }
- }
-
- public void characters(char[] ch, int start, int length) {
- currentValue.append(ch, start, length);
- }
}
diff --git a/src/main/java/com/alterdekim/hearthhack/repository/BoosterRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/BoosterRepository.java
new file mode 100644
index 0000000..246b463
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/repository/BoosterRepository.java
@@ -0,0 +1,10 @@
+package com.alterdekim.hearthhack.repository;
+
+import com.alterdekim.hearthhack.entity.Booster;
+import com.alterdekim.hearthhack.entity.HeroXP;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface BoosterRepository extends JpaRepository {
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/repository/CardBackRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/CardBackRepository.java
new file mode 100644
index 0000000..efae020
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/repository/CardBackRepository.java
@@ -0,0 +1,10 @@
+package com.alterdekim.hearthhack.repository;
+
+import com.alterdekim.hearthhack.entity.CardBack;
+import com.alterdekim.hearthhack.entity.HeroXP;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface CardBackRepository extends JpaRepository {
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/repository/DeckRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/DeckRepository.java
new file mode 100644
index 0000000..b71c4aa
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/repository/DeckRepository.java
@@ -0,0 +1,10 @@
+package com.alterdekim.hearthhack.repository;
+
+import com.alterdekim.hearthhack.entity.Deck;
+import com.alterdekim.hearthhack.entity.HeroXP;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DeckRepository extends JpaRepository {
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/repository/HeroXPRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/HeroXPRepository.java
new file mode 100644
index 0000000..dd1fcd5
--- /dev/null
+++ b/src/main/java/com/alterdekim/hearthhack/repository/HeroXPRepository.java
@@ -0,0 +1,9 @@
+package com.alterdekim.hearthhack.repository;
+
+import com.alterdekim.hearthhack.entity.HeroXP;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface HeroXPRepository extends JpaRepository {
+}
diff --git a/src/main/java/com/alterdekim/hearthhack/repository/RoleRepository.java b/src/main/java/com/alterdekim/hearthhack/repository/RoleRepository.java
index 8e0a9b2..3403946 100644
--- a/src/main/java/com/alterdekim/hearthhack/repository/RoleRepository.java
+++ b/src/main/java/com/alterdekim/hearthhack/repository/RoleRepository.java
@@ -2,9 +2,11 @@ package com.alterdekim.hearthhack.repository;
import com.alterdekim.hearthhack.entity.Role;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
import java.util.List;
+@Repository
public interface RoleRepository extends JpaRepository {
Role findByName(String name);
diff --git a/src/main/java/com/alterdekim/hearthhack/service/UserService.java b/src/main/java/com/alterdekim/hearthhack/service/UserService.java
index 0b41d90..b73b56d 100644
--- a/src/main/java/com/alterdekim/hearthhack/service/UserService.java
+++ b/src/main/java/com/alterdekim/hearthhack/service/UserService.java
@@ -3,14 +3,14 @@ package com.alterdekim.hearthhack.service;
import com.alterdekim.hearthhack.dto.UserDTO;
import com.alterdekim.hearthhack.entity.Role;
import com.alterdekim.hearthhack.entity.User;
-import com.alterdekim.hearthhack.repository.RoleRepository;
-import com.alterdekim.hearthhack.repository.UserRepository;
+import com.alterdekim.hearthhack.repository.*;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
+import java.util.Optional;
import java.util.stream.Collectors;
@RequiredArgsConstructor
@@ -20,6 +20,10 @@ public class UserService implements IService {
private final UserRepository userRepository;
private final RoleRepository roleRepository;
private final PasswordEncoder passwordEncoder;
+ private final HeroXPRepository heroXPRepository;
+ private final DeckRepository deckRepository;
+ private final CardBackRepository cardBackRepository;
+ private final BoosterRepository boosterRepository;
public void saveUser(UserDTO userDto) {
@@ -47,6 +51,24 @@ public class UserService implements IService {
.collect(Collectors.toList());
}
+ public boolean authMe(String token) {
+ String[] arr = token.split("\\-");
+ if( arr.length != 3 ) return false;
+ String hash = arr[1];
+ Long id = Long.parseLong(arr[2]);
+ Optional user = this.userRepository.findById(id);
+ if( user.isEmpty() ) return false;
+ String raw = user.get().getId() + user.get().getPassword() + user.get().getUsername();
+ return passwordEncoder.matches(raw, hash);
+ }
+
+ public String genHash(Long id) throws Exception {
+ Optional user = this.userRepository.findById(id);
+ if( user.isEmpty() ) throw new Exception();
+ String hash = passwordEncoder.encode(user.get().getId() + user.get().getPassword() + user.get().getUsername());
+ return "HH-"+hash+"-"+id;
+ }
+
public User findById(Long id) {
return userRepository.findById(id).orElse(null);
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XmlElement.java b/src/main/java/com/alterdekim/hearthhack/xml/XmlElement.java
deleted file mode 100644
index 351d83d..0000000
--- a/src/main/java/com/alterdekim/hearthhack/xml/XmlElement.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.alterdekim.hearthhack.xml;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import static com.alterdekim.hearthhack.xml.XmlType.Attribute;
-
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.FIELD)
-public @interface XmlElement {
- String name() default "";
- XmlType type() default Attribute;
- boolean inheritName() default true;
-}
\ No newline at end of file
diff --git a/src/main/java/com/alterdekim/hearthhack/xml/XmlType.java b/src/main/java/com/alterdekim/hearthhack/xml/XmlType.java
deleted file mode 100644
index 9c91b60..0000000
--- a/src/main/java/com/alterdekim/hearthhack/xml/XmlType.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.alterdekim.hearthhack.xml;
-
-public enum XmlType {
- Attribute,
- ChildElement,
- PlainValue,
- NestedList,
- List
-}