Skip to content

Commit

Permalink
add AUTO detect charsetname on GUI
Browse files Browse the repository at this point in the history
  • Loading branch information
prprhyt committed Oct 29, 2019
1 parent 421835d commit 1df3149
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/main/java/core/packetproxy/gui/GUIHistory.java
Original file line number Diff line number Diff line change
Expand Up @@ -405,9 +405,13 @@ public void actionPerformed(ActionEvent actionEvent) {
try {
Packet packet = gui_packet.getPacket();
Http http = new Http(packet.getSentData());
CharSetUtility charsetutil = CharSetUtility.getInstance();
if(charsetutil.isAuto()){
charsetutil.setGuessedCharSet(http.getBody());
}
String copyData = http.getMethod() + "\t" +
http.getURL(packet.getServerPort()) + "\t" +
new String(http.getBody(), CharSetUtility.getInstance().getCharSet());
new String(http.getBody(), charsetutil.getCharSet());
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
StringSelection selection = new StringSelection(copyData);
clipboard.setContents(selection, selection);
Expand Down
31 changes: 31 additions & 0 deletions src/main/java/core/packetproxy/gui/RawTextPane.java
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,9 @@ public void keyPressed(KeyEvent e) {
url_decoder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String chasetName = charSetUtility.getCharSet();
int position_start = getSelectionStart();
int position_end = getSelectionEnd();
Expand All @@ -174,6 +177,10 @@ public void actionPerformed(ActionEvent actionEvent) {
try {
int position_start = getSelectionStart();
int position_end = getSelectionEnd();

if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
byte[] data = new String(getData(), charSetUtility.getCharSet()).substring(position_start, position_end).getBytes();
GUIDecoderDialog dlg = new GUIDecoderDialog();
if (Utils.indexOf(data, 0, data.length, "_".getBytes()) >= 0 ||
Expand All @@ -194,6 +201,9 @@ public void actionPerformed(ActionEvent actionEvent) {
jwt_decoder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String charSetName = charSetUtility.getCharSet();
int position_start = getSelectionStart();
int position_end = getSelectionEnd();
Expand All @@ -215,6 +225,9 @@ public void actionPerformed(ActionEvent actionEvent) {
unicode_unescaper.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String charSetName = charSetUtility.getCharSet();
int position_start = getSelectionStart();
int position_end = getSelectionEnd();
Expand All @@ -241,6 +254,9 @@ public void actionPerformed(ActionEvent actionEvent) {
url_encoder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String charSetName = charSetUtility.getCharSet();
int position_start = getSelectionStart();
int position_end = getSelectionEnd();
Expand All @@ -259,6 +275,9 @@ public void actionPerformed(ActionEvent actionEvent) {
base64_encoder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String charSetName = charSetUtility.getCharSet();
int position_start = getSelectionStart();
int position_end = getSelectionEnd();
Expand All @@ -277,6 +296,9 @@ public void actionPerformed(ActionEvent actionEvent) {
base64url_encoder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String charSetName = charSetUtility.getCharSet();
int position_start = getSelectionStart();
int position_end = getSelectionEnd();
Expand All @@ -295,6 +317,9 @@ public void actionPerformed(ActionEvent actionEvent) {
jwt_encoder.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String charSetName = charSetUtility.getCharSet();
int position_start = getSelectionStart();
int position_end = getSelectionEnd();
Expand Down Expand Up @@ -324,6 +349,9 @@ public void actionPerformed(ActionEvent actionEvent) {
unicode_escaper.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
try {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String charSetName = charSetUtility.getCharSet();
int position_start = getSelectionStart();
int position_end = getSelectionEnd();
Expand Down Expand Up @@ -360,6 +388,9 @@ public void mousePressed(MouseEvent event) {
}

public void setData(byte[] data) throws Exception {
if(charSetUtility.isAuto()){
charSetUtility.setGuessedCharSet(getData());
}
String charSetName = charSetUtility.getCharSet();
init_flg = true;
fin_flg = true;
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/core/packetproxy/util/CharSetUtility.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
public class CharSetUtility {
private static CharSetUtility instance=null;
private static String DEFAULT_CHARSET = "UTF-8";
private static String AUTO_CHARSET = "AUTO";
private String charSet=DEFAULT_CHARSET;
private boolean isAuto = false;

public static CharSetUtility getInstance(){
if(null==instance){
Expand Down Expand Up @@ -151,10 +153,26 @@ public String guessCharSetFromHttpHeader(byte[] rawData){
return data.substring(s, e);
}

public boolean isAuto(){
return isAuto;
}

public void setCharSet(String charSet){
setCharSet(charSet, false);
}

public void setCharSet(String charSet, boolean autoStatusUnchanged){
if (charSet == null) {
return;
}
if (AUTO_CHARSET.equals(charSet)){
isAuto = true;
this.charSet = DEFAULT_CHARSET;
return;
}
if(!autoStatusUnchanged) {
isAuto = false;
}
if(getAvailableCharSetList().contains(charSet)){
this.charSet = charSet;
}else{
Expand All @@ -167,9 +185,26 @@ public String getCharSet(){
return charSet;
}

private String guessedCharSet(byte[] rawData){
String charset = guessCharSetFromHttpHeader(rawData);
if(!"".equals(charset)){
return charset;
}
charset = guessCharSetFromMetatag(rawData);
if(!"".equals(charset)){
return charset;
}
return DEFAULT_CHARSET;
}

public void setGuessedCharSet(byte[] rawData){
setCharSet(guessedCharSet(rawData), true);
}

public List<String> getAvailableCharSetList(){
List<String> ret = new ArrayList<>();
try {
ret.add(AUTO_CHARSET);
for(CharSet charset: CharSets.getInstance().queryAll()){
ret.add(charset.toString());
}
Expand Down

0 comments on commit 1df3149

Please sign in to comment.