Persist authorization key

Useful until step 2 stops failing half the time
master
Lonami Exo 2018-07-25 19:53:48 +02:00
parent 7cfd9034d0
commit 757f684c6b
5 changed files with 32 additions and 6 deletions

3
.gitignore vendored
View File

@ -7,3 +7,6 @@ build/
**/tl/Abstract.java
**/tl/Types.java
**/tl/Functions.java
# Authorization Key
*.key

View File

@ -1,19 +1,42 @@
package io.github.lonamiwebs.overgram;
import io.github.lonamiwebs.overgram.crypto.AuthKey;
import io.github.lonamiwebs.overgram.network.MTProtoSender;
import io.github.lonamiwebs.overgram.network.MTProtoState;
import io.github.lonamiwebs.overgram.network.connection.TcpFull;
import io.github.lonamiwebs.overgram.tl.Functions;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public class Overgram {
private static void saveAuthKey(final AuthKey authKey, final File file) {
try (final FileOutputStream out = new FileOutputStream(file)) {
out.write(authKey.key);
} catch (IOException ignored) {
}
}
private static AuthKey loadAuthKey(final File file) {
try (final FileInputStream in = new FileInputStream(file)) {
final byte[] key = new byte[256];
assert in.read(key) == key.length;
return new AuthKey(key);
} catch (IOException ignored) {
return null;
}
}
public static void main(final String... args) throws IOException, InterruptedException, ExecutionException {
final MTProtoSender sender = new MTProtoSender(new MTProtoState(), new TcpFull());
final File authKey = new File("auth.key");
final MTProtoSender sender = new MTProtoSender(new MTProtoState(loadAuthKey(authKey)), new TcpFull());
try {
sender.connect("149.154.167.91", 443);
saveAuthKey(sender.state.authKey, authKey);
final Future result = sender.send(new Functions.Ping());
System.out.println(result.get());
} finally {

View File

@ -15,7 +15,7 @@ public class MTProtoPlainSender {
public MTProtoPlainSender(final Connection connection) {
this.connection = connection;
this.state = new MTProtoState();
this.state = new MTProtoState(null);
}
public <T extends TLObject> T send(final TLRequest request) throws IOException, ClassNotFoundException {

View File

@ -16,7 +16,7 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
public class MTProtoSender {
private final MTProtoState state;
public final MTProtoState state;
private final Connection connection;
private String ip;
private int port;

View File

@ -23,13 +23,13 @@ public class MTProtoState {
private int sequence;
private long lastMsgId;
public MTProtoState() {
public MTProtoState(final AuthKey authKey) {
this.authKey = authKey;
salt = 0;
id = new SecureRandom().nextLong();
timeOffset = 0;
sequence = 0;
lastMsgId = 0;
authKey = null;
salt = 0;
}
public TLMessage createMessage(final TLObject object) {