Skip to content

Commit

Permalink
Changed app layout
Browse files Browse the repository at this point in the history
  • Loading branch information
PetrM97 committed Mar 9, 2017
1 parent 16e79d0 commit 6006b28
Show file tree
Hide file tree
Showing 7 changed files with 230 additions and 92 deletions.
32 changes: 23 additions & 9 deletions src/classes/cz/alej/michalik/totp/client/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JViewport;

Expand All @@ -40,27 +41,32 @@ public class App {
private final static String PATH = "client.properties";
public final static float FONT_SIZE = 48f;
public static final Color COLOR = new Color(255, 255, 255);
// Záznamy
private static Properties p = new Properties();
// Okno
private static JFrame window = new JFrame("TOTP");
// Hlavní panel - záznamy + tlačítko
private static MainPanel mainPanel = new MainPanel(p);
// Obsahuje rámec pro posun na hlavním panelu
private static JScrollPane scrollFrame = new JScrollPane(mainPanel);
// Panel pro posun v hlavním panelu se záznamy
private static JScrollPane scrollFrame = new JScrollPane();
// Tlačítko pro přidání nových záznamů
private static JPanel ap = new AddPanel(p);

/**
* Spustí grafické prostředí
*
* @param args
*/
public static void main(String[] args) {
// Parametry okna
/* Parametry okna */
// Ukončení programu při zavření
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setMinimumSize(new Dimension(320, 240));
// Rozvržení obsahu podle osy Y
window.setLayout(new BoxLayout(window.getContentPane(), BoxLayout.Y_AXIS));
// Umístění okna určí OS
window.setLocationByPlatform(true);

p.setProperty("-1", "Test;GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ");

// Načte uložené hodnoty
loadProperties();
saveProperties();
Expand All @@ -71,13 +77,15 @@ public static void main(String[] args) {
}

/**
* Načte nastavení a vykreslí ho do aplikace
* Načte nastavení a vykreslí změny do aplikace
*/
public static void loadProperties() {
System.out.println("Překresluji");
// Vytvoří soubor při prvním spuštění
if (new File(PATH).exists() == false) {
saveProperties();
}
// Načte nastavení ze souboru
try {
p.load(new FileReader(PATH));
} catch (FileNotFoundException e) {
Expand All @@ -88,16 +96,22 @@ public static void loadProperties() {
e.printStackTrace();
}

// Odstraním současný obsah
window.remove(scrollFrame);
window.remove(ap);
// Aktualizuji obsah
ap = new AddPanel(p);
scrollFrame = new JScrollPane(new MainPanel(p));

mainPanel = new MainPanel(p);

scrollFrame = new JScrollPane(mainPanel);
// Nastavení hlavního panelu se záznamy
scrollFrame.setPreferredSize(new Dimension(640, 480));
// Nastavení pro plynulé scrollování
scrollFrame.getVerticalScrollBar().setUnitIncrement(16);
scrollFrame.getViewport().setScrollMode(JViewport.BACKINGSTORE_SCROLL_MODE);

// Do okna přidám panely s novým obsahem
window.add(scrollFrame);
window.add(ap);

window.repaint();
window.setVisible(true);
Expand Down
43 changes: 43 additions & 0 deletions src/classes/cz/alej/michalik/totp/client/CLI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
Copyright 2017 Petr Michalík
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cz.alej.michalik.totp.client;

import java.util.Scanner;

import cz.alej.michalik.totp.util.OTPFactory;

public class CLI {

private static String otp = "TOTP";

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

while (in.hasNext()) {
String secret = in.nextLine();
if (secret.equals("")) {
continue;
}
String pass = new OTPFactory().getOTP(otp, secret.getBytes()).toString();
System.out.println(pass);
}

in.close();

}

}
13 changes: 0 additions & 13 deletions src/classes/cz/alej/michalik/totp/client/MainPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,6 @@ public MainPanel(Properties p) {
c.gridy += 1;
}

// Výplň pro nahuštění panelů
c.fill = GridBagConstraints.VERTICAL;
c.weighty = 10;

this.add(new JPanel(), c);

c.fill = GridBagConstraints.HORIZONTAL;
c.anchor = GridBagConstraints.SOUTH;
c.weighty = 0.5;
c.gridy = 99;
// Přidá panel pro přidání nových záznamů
this.add(new AddPanel(p), c);

}

}
55 changes: 28 additions & 27 deletions src/classes/cz/alej/michalik/totp/util/HOTP.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
package cz.alej.michalik.totp.util;

/**
* Třída pro generování HOTP hesla z HMAC hashe podle RFC4226
* Třída pro generování HOTP hesla z HMAC hashe podle RFC4226. Implementuje
* Fluent interface.
*
* @author Petr Michalík
* @see HMAC
Expand All @@ -25,7 +26,7 @@
*/
public class HOTP implements OTP {
// Běžně se počítá heslo od nuly
private int count = 0;
private long count = 0;
// HMAC objekt
private HMAC hmac = new HMAC();
// Běžná délka hesla je 6 číslic
Expand Down Expand Up @@ -66,14 +67,14 @@ public HOTP(byte[] secret, int count) {
}

/**
* Nastaví sdílené heslo
* Nastaví algoritmus výpočtu HMAC hashe
*
* @param secret
* heslo jako byte[]
* @return HOTP třída
* @param alg
* algoritmus
* @return sebe
*/
public HOTP setSecret(byte[] secret) {
hmac.setKey(secret);
public HOTP setAlgorithm(String alg) {
hmac.setAlgorithm(alg);
return this;
}

Expand All @@ -82,10 +83,10 @@ public HOTP setSecret(byte[] secret) {
*
* @param count
* hodnota počítadla
* @return HOTP třída
* @return sebe
*/
public HOTP setCounter(long c) {
count = (int) c;
count = c;
// Počítadlo je 8-bytové pole
byte[] counter = new byte[8];
// Je třeba z čísla udělat 8-bytové pole
Expand All @@ -103,7 +104,7 @@ public HOTP setCounter(long c) {
*
* @param digits
* počet číslic
* @return HOTP třída
* @return sebe
* @throws Error
* špatný počet číslic
*/
Expand All @@ -117,23 +118,32 @@ public HOTP setDigits(int digits) {
}

/**
* Nastaví algoritmus výpočtu HMAC hashe
* Nastaví sdílené heslo
*
* @param alg
* algoritmus
* @return HOTP třída
* @param secret
* heslo jako byte[]
* @return sebe
*/
public HOTP setAlgorithm(String alg) {
hmac.setAlgorithm(alg);
public HOTP setSecret(byte[] secret) {
hmac.setKey(secret);
return this;
}

/**
* Vrátí nastavený algoritmus
*
* @return algoritmus
*/
public String getAlgorithm() {
return hmac.getAlgorithm();
}

/**
* Vrátí nastavenou hodnotu počítadla
*
* @return počítadlo
*/
public int getCounter() {
public long getCounter() {
return count;
}

Expand All @@ -146,15 +156,6 @@ public int getDigits() {
return digits;
}

/**
* Vrátí nastavený algoritmus
*
* @return algoritmus
*/
public String getAlgorithm() {
return hmac.getAlgorithm();
}

/**
* Vypočítá HOTP heslo pro danou hodnotu počítadla
*
Expand Down
3 changes: 2 additions & 1 deletion src/classes/cz/alej/michalik/totp/util/OTP.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@
*
*/
public interface OTP {
public int getDigits();

public String getAlgorithm();

public int getDigits();

public int get();

public String toString();
Expand Down
79 changes: 75 additions & 4 deletions src/classes/cz/alej/michalik/totp/util/OTPFactory.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,98 @@
/*
Copyright 2017 Petr Michalík
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cz.alej.michalik.totp.util;

/**
* Factory pro vytvoření OTP třídy implementující fluent interface.
*
* @author Petr Michalík
* @see OTP
*/
public class OTPFactory {

// Výchozí hodnoty
int digits = 6;
String alg = "HmacSHA1";
int step = 30;
long counter = 0;

/**
* Vytvoří OTP třídu
*
* @param otpType
* OTP typ (TOTP nebo HOTP)
* @param secret
* sdílené heslo
* @return vytvořená {@link OTP} třída
*/

public OTP getOTP(String otpType, byte[] secret) {
if (otpType.equalsIgnoreCase("TOTP")) {
return new TOTP().setSecret(secret).setDigits(digits).setAlgorithm(alg);
return new TOTP().setSecret(secret).setDigits(digits).setAlgorithm(alg).setCounter(counter).setStep(step);
} else if (otpType.equalsIgnoreCase("HOTP")) {
return new HOTP().setSecret(secret).setDigits(digits).setAlgorithm(alg);
return new HOTP().setSecret(secret).setDigits(digits).setAlgorithm(alg).setCounter(counter);
}
return null;
}

/**
* Nastaví algoritmus výpočtu HMAC hashe
*
* @param algorithm
* algoritmus
* @return sebe
*/
public OTPFactory setAlgorithm(String algorithm) {
this.alg = algorithm;
return this;
}

/**
* Nastaví počítadlo
*
* @param counter
* hodnota počítadla
* @return sebe
*/
public OTPFactory setCounter(long counter) {
this.counter = counter;
return this;
}

/**
* Nastaví počet číslic hesla v rozmezí od 6 do 8 číslic
*
* @param d
* počet číslic
* @return sebe
*/
public OTPFactory setDigits(int d) {
this.digits = d;
return this;
}

public OTPFactory setAlgorithm(String algorithm) {
this.alg = algorithm;
/**
* Nastaví jak často se budou hesla generovat. Lze použít pouze pro TOTP.
*
* @param step
* počet vteřin
* @return sebe
*/
public OTPFactory setStep(int step) {
this.step = step;
return this;
}

Expand Down
Loading

0 comments on commit 6006b28

Please sign in to comment.