/**
*
* @author pquiring
*
* Created : Nov 16, 2013
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javaforce.*;
public class ProxyApp extends javax.swing.JFrame implements ActionListener, Logger {
/**
* Creates new form ProxyApp
*/
public ProxyApp() {
initComponents();
setTitle("jf Web Proxy/" + Service.version);
setPosition();
//create tray icon to open app
PopupMenu popup = new PopupMenu();
show = new MenuItem("Show");
show.addActionListener(this);
popup.add(show);
popup.addSeparator();
exit = new MenuItem("Exit");
exit.addActionListener(this);
popup.add(exit);
JFImage img = new JFImage();
img.loadPNG(getClass().getClassLoader().getResourceAsStream("jfwebproxy.png"));
setIconImage(img.getImage());
icon = new TrayIcon(img.getImage(), "jf Web Proxy", popup);
icon.addActionListener(this);
tray = SystemTray.getSystemTray();
try { tray.add(icon); } catch (Exception e) { JFLog.log(e); }
readConfig();
//start service
service = new Service(8080, host.getText(), this, alwaysSecure.isSelected(), neverSecure.isSelected() , jsp.isSelected() ? "jsp" : "php");
service.start();
}
public void readConfig() {
try {
BufferedReader br = new BufferedReader(new FileReader(JF.getUserPath() + "/.jfwebproxy.cfg"));
String str = br.readLine();
host.setText(str);
String page = br.readLine();
if (page.equals("php")) {
php.setSelected(true);
}
String secure = br.readLine();
if (secure.equals("always")) {
alwaysSecure.setSelected(true);
}
else if (secure.equals("never")) {
neverSecure.setSelected(true);
}
} catch (Exception e) {
JFLog.log(e);
}
}
public void writeConfig() {
try {
String cfg = host.getText() + "\n" + (jsp.isSelected() ? "jsp" : "php") + "\n";
if (alwaysSecure.isSelected()) {
cfg += "always\n";
} else if (neverSecure.isSelected()) {
cfg += "never\n";
} else {
cfg += "default\n";
}
FileOutputStream fos = new FileOutputStream(JF.getUserPath() + "/.jfwebproxy.cfg");
fos.write(cfg.getBytes());
fos.close();
} catch (Exception e) {
JFLog.log(e);
}
}
public void restart() {
service.close();
JF.sleep(1000);
service = new Service(8080, host.getText(), this, alwaysSecure.isSelected(), neverSecure.isSelected(), jsp.isSelected() ? "jsp" : "php");
service.start();
}
public void actionPerformed(ActionEvent e) {
Object o = e.getSource();
if (o == exit) {
System.exit(0);
}
if (o == show) {
readConfig();
setVisible(true);
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
buttonGroup2 = new javax.swing.ButtonGroup();
save = new javax.swing.JButton();
Cancel = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
host = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jsp = new javax.swing.JRadioButton();
php = new javax.swing.JRadioButton();
alwaysSecure = new javax.swing.JRadioButton();
defaultSecure = new javax.swing.JRadioButton();
neverSecure = new javax.swing.JRadioButton();
setTitle("jf Web Proxy");
save.setText("Save and Restart");
save.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveActionPerformed(evt);
}
});
Cancel.setText("Cancel");
Cancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CancelActionPerformed(evt);
}
});
jLabel1.setText("Proxy Host:");
host.setText("*.appspot.com");
jLabel2.setText("Proxy Port : 8080");
buttonGroup1.add(jsp);
jsp.setSelected(true);
jsp.setText("JSP");
buttonGroup1.add(php);
php.setText("PHP");
buttonGroup2.add(alwaysSecure);
alwaysSecure.setText("Always Secure");
buttonGroup2.add(defaultSecure);
defaultSecure.setSelected(true);
defaultSecure.setText("Secure as requested");
buttonGroup2.add(neverSecure);
neverSecure.setText("Never Secure (not recommended)");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(Cancel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(save))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(host))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addGroup(layout.createSequentialGroup()
.addComponent(jsp)
.addGap(6, 6, 6)
.addComponent(php))
.addGroup(layout.createSequentialGroup()
.addComponent(defaultSecure)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(alwaysSecure)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(neverSecure)))
.addGap(0, 56, Short.MAX_VALUE)))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(host, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jsp)
.addComponent(php))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(defaultSecure)
.addComponent(alwaysSecure)
.addComponent(neverSecure))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(save)
.addComponent(Cancel))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void saveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveActionPerformed
writeConfig();
restart();
setVisible(false);
}//GEN-LAST:event_saveActionPerformed
private void CancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_CancelActionPerformed
setVisible(false);
}//GEN-LAST:event_CancelActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ProxyApp(); //NOTE:Do NOT make it visible (it places icon in tray)
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton Cancel;
private javax.swing.JRadioButton alwaysSecure;
private javax.swing.ButtonGroup buttonGroup1;
private javax.swing.ButtonGroup buttonGroup2;
private javax.swing.JRadioButton defaultSecure;
private javax.swing.JTextField host;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JRadioButton jsp;
private javax.swing.JRadioButton neverSecure;
private javax.swing.JRadioButton php;
private javax.swing.JButton save;
// End of variables declaration//GEN-END:variables
public SystemTray tray;
public TrayIcon icon;
public MenuItem exit, show;
public Service service;
public void log(String msg) {}
public void log(Throwable e) {}
private void setPosition() {
Dimension d = getSize();
Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();
setLocation(s.width/2 - d.width/2, s.height/2 - d.height/2);
}
}