Fixed Jabit Server, 'status' request should now work
This commit is contained in:
parent
a1541dd51b
commit
21b0e64130
@ -44,10 +44,10 @@ dependencies {
|
|||||||
compile "ch.dissem.jabit:jabit-core:$jabitVersion"
|
compile "ch.dissem.jabit:jabit-core:$jabitVersion"
|
||||||
compile "ch.dissem.jabit:jabit-networking:$jabitVersion"
|
compile "ch.dissem.jabit:jabit-networking:$jabitVersion"
|
||||||
compile "ch.dissem.jabit:jabit-repositories:$jabitVersion"
|
compile "ch.dissem.jabit:jabit-repositories:$jabitVersion"
|
||||||
compile "ch.dissem.jabit:jabit-cryptography-spongy:$jabitVersion"
|
compile "ch.dissem.jabit:jabit-cryptography-bouncy:$jabitVersion"
|
||||||
compile "ch.dissem.jabit:jabit-extensions:$jabitVersion"
|
compile "ch.dissem.jabit:jabit-extensions:$jabitVersion"
|
||||||
|
|
||||||
compile 'com.h2database:h2:1.4.187'
|
compile 'com.h2database:h2:1.4.194'
|
||||||
|
|
||||||
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
|
providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
|
||||||
testCompile("org.springframework.boot:spring-boot-starter-test")
|
testCompile("org.springframework.boot:spring-boot-starter-test")
|
||||||
|
@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2015 Christian Basler
|
|
||||||
*
|
|
||||||
* 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 ch.dissem.bitmessage.server;
|
|
||||||
|
|
||||||
import ch.dissem.bitmessage.BitmessageContext;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.util.TimerTask;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Christian Basler
|
|
||||||
*/
|
|
||||||
public class CleanupJob extends TimerTask {
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(CleanupJob.class);
|
|
||||||
private final BitmessageContext ctx;
|
|
||||||
|
|
||||||
public CleanupJob(BitmessageContext ctx) {
|
|
||||||
this.ctx = ctx;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
try {
|
|
||||||
ctx.cleanup();
|
|
||||||
} catch (Throwable t) {
|
|
||||||
LOG.error("Problem while cleaning inventory", t);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -23,7 +23,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
|||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@EnableSwagger2
|
@EnableSwagger2
|
||||||
@ComponentScan(basePackageClasses = JabitServerController.class)
|
@ComponentScan(basePackageClasses = JabitServerApplication.class)
|
||||||
public class JabitServerApplication {
|
public class JabitServerApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
package ch.dissem.bitmessage.server;
|
package ch.dissem.bitmessage.server;
|
||||||
|
|
||||||
import ch.dissem.bitmessage.BitmessageContext;
|
import ch.dissem.bitmessage.BitmessageContext;
|
||||||
import ch.dissem.bitmessage.cryptography.sc.SpongyCryptography;
|
import ch.dissem.bitmessage.cryptography.bc.BouncyCryptography;
|
||||||
import ch.dissem.bitmessage.entity.BitmessageAddress;
|
import ch.dissem.bitmessage.entity.BitmessageAddress;
|
||||||
import ch.dissem.bitmessage.entity.payload.Pubkey;
|
import ch.dissem.bitmessage.entity.payload.Pubkey;
|
||||||
import ch.dissem.bitmessage.networking.nio.NioNetworkHandler;
|
import ch.dissem.bitmessage.networking.nio.NioNetworkHandler;
|
||||||
@ -96,7 +96,7 @@ public class JabitServerConfig {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public Cryptography cryptography() {
|
public Cryptography cryptography() {
|
||||||
Cryptography cryptography = new SpongyCryptography();
|
Cryptography cryptography = new BouncyCryptography();
|
||||||
Singleton.initialize(cryptography); // needed for admins and clients
|
Singleton.initialize(cryptography); // needed for admins and clients
|
||||||
return cryptography;
|
return cryptography;
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,7 @@ import ch.dissem.bitmessage.entity.Plaintext;
|
|||||||
import ch.dissem.bitmessage.server.entities.Broadcasts;
|
import ch.dissem.bitmessage.server.entities.Broadcasts;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
import org.springframework.web.bind.annotation.CrossOrigin;
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
@ -32,7 +33,6 @@ import javax.annotation.Resource;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Timer;
|
|
||||||
|
|
||||||
import static ch.dissem.bitmessage.server.Converter.broadcasts;
|
import static ch.dissem.bitmessage.server.Converter.broadcasts;
|
||||||
import static ch.dissem.bitmessage.server.Converter.message;
|
import static ch.dissem.bitmessage.server.Converter.message;
|
||||||
@ -60,6 +60,8 @@ public class JabitServerController {
|
|||||||
@Resource
|
@Resource
|
||||||
private Set<String> blacklist;
|
private Set<String> blacklist;
|
||||||
@Inject
|
@Inject
|
||||||
|
private BitmessageAddress identity;
|
||||||
|
@Inject
|
||||||
private BitmessageContext ctx;
|
private BitmessageContext ctx;
|
||||||
|
|
||||||
@RequestMapping(value = "status", method = GET, produces = "application/json")
|
@RequestMapping(value = "status", method = GET, produces = "application/json")
|
||||||
@ -104,9 +106,18 @@ public class JabitServerController {
|
|||||||
return broadcasts(broadcaster, messages);
|
return broadcasts(broadcaster, messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Scheduled(cron = "0 0 0 * * *")
|
||||||
|
public void broadcastStatus() {
|
||||||
|
ctx.broadcast(identity, "Status", ctx.status().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Scheduled(cron = "0 0 2 * * *")
|
||||||
|
public void cleanup() {
|
||||||
|
ctx.cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
ctx.startup();
|
ctx.startup();
|
||||||
new Timer().scheduleAtFixedRate(new CleanupJob(ctx), 1 * HOUR, 24 * HOUR);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,18 +19,22 @@ package ch.dissem.bitmessage.server;
|
|||||||
import ch.dissem.bitmessage.BitmessageContext;
|
import ch.dissem.bitmessage.BitmessageContext;
|
||||||
import ch.dissem.bitmessage.entity.BitmessageAddress;
|
import ch.dissem.bitmessage.entity.BitmessageAddress;
|
||||||
import ch.dissem.bitmessage.entity.Plaintext;
|
import ch.dissem.bitmessage.entity.Plaintext;
|
||||||
|
import ch.dissem.bitmessage.entity.valueobject.extended.Message;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
|
import static ch.dissem.bitmessage.entity.Plaintext.Encoding.EXTENDED;
|
||||||
|
import static ch.dissem.bitmessage.entity.Plaintext.Type.MSG;
|
||||||
import static ch.dissem.bitmessage.server.Constants.*;
|
import static ch.dissem.bitmessage.server.Constants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Christian Basler
|
* @author Christian Basler
|
||||||
*/
|
*/
|
||||||
public class ServerListener implements BitmessageContext.Listener {
|
public class ServerListener implements BitmessageContext.Listener.WithContext {
|
||||||
private final static Logger LOG = LoggerFactory.getLogger(ServerListener.class);
|
private final static Logger LOG = LoggerFactory.getLogger(ServerListener.class);
|
||||||
|
|
||||||
private final Collection<BitmessageAddress> admins;
|
private final Collection<BitmessageAddress> admins;
|
||||||
@ -40,6 +44,9 @@ public class ServerListener implements BitmessageContext.Listener {
|
|||||||
private final Collection<String> shortlist;
|
private final Collection<String> shortlist;
|
||||||
private final Collection<String> blacklist;
|
private final Collection<String> blacklist;
|
||||||
|
|
||||||
|
private BitmessageContext ctx;
|
||||||
|
private BitmessageAddress identity;
|
||||||
|
|
||||||
public ServerListener(Collection<BitmessageAddress> admins,
|
public ServerListener(Collection<BitmessageAddress> admins,
|
||||||
Collection<BitmessageAddress> clients,
|
Collection<BitmessageAddress> clients,
|
||||||
Collection<String> whitelist,
|
Collection<String> whitelist,
|
||||||
@ -52,13 +59,50 @@ public class ServerListener implements BitmessageContext.Listener {
|
|||||||
this.blacklist = blacklist;
|
this.blacklist = blacklist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setContext(BitmessageContext ctx) {
|
||||||
|
this.ctx = ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
private BitmessageAddress getIdentity() {
|
||||||
|
if (identity == null) {
|
||||||
|
List<BitmessageAddress> identities = ctx.addresses().getIdentities();
|
||||||
|
if (!identities.isEmpty()) {
|
||||||
|
identity = identities.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return identity;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void receive(Plaintext message) {
|
public void receive(Plaintext message) {
|
||||||
if (admins.contains(message.getFrom())) {
|
if (admins.contains(message.getFrom())) {
|
||||||
String[] command = message.getSubject().trim().toLowerCase().split("\\s+");
|
String[] command = message.getSubject().trim().toLowerCase().split("\\s+");
|
||||||
String data = message.getText();
|
String data = message.getText();
|
||||||
if (command.length == 2) {
|
if (command.length == 1) {
|
||||||
switch (command[1]) {
|
switch (command[0].toLowerCase()) {
|
||||||
|
case "status":
|
||||||
|
Plaintext.Builder response = new Plaintext.Builder(MSG);
|
||||||
|
response.from(getIdentity());
|
||||||
|
response.to(message.getFrom());
|
||||||
|
if (message.getEncoding() == EXTENDED) {
|
||||||
|
response.message(
|
||||||
|
new Message.Builder()
|
||||||
|
.subject("RE: status")
|
||||||
|
.body(ctx.status().toString())
|
||||||
|
.addParent(message)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
response.message("RE: status", ctx.status().toString());
|
||||||
|
}
|
||||||
|
ctx.send(response.build());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG.info("ignoring unknown command " + message.getSubject());
|
||||||
|
}
|
||||||
|
} else if (command.length == 2) {
|
||||||
|
switch (command[1].toLowerCase()) {
|
||||||
case "client":
|
case "client":
|
||||||
case "clients":
|
case "clients":
|
||||||
updateUserList(CLIENT_LIST, clients, command[0], data);
|
updateUserList(CLIENT_LIST, clients, command[0], data);
|
||||||
@ -79,14 +123,14 @@ public class ServerListener implements BitmessageContext.Listener {
|
|||||||
updateList(BLACKLIST, blacklist, command[0], data);
|
updateList(BLACKLIST, blacklist, command[0], data);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG.trace("ignoring unknown command " + message.getSubject());
|
LOG.info("ignoring unknown command " + message.getSubject());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateUserList(String file, Collection<BitmessageAddress> list, String command, String data) {
|
private void updateUserList(String file, Collection<BitmessageAddress> list, String command, String data) {
|
||||||
switch (command) {
|
switch (command.toLowerCase()) {
|
||||||
case "set":
|
case "set":
|
||||||
list.clear();
|
list.clear();
|
||||||
case "add":
|
case "add":
|
||||||
@ -111,7 +155,7 @@ public class ServerListener implements BitmessageContext.Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateList(String file, Collection<String> list, String command, String data) {
|
private void updateList(String file, Collection<String> list, String command, String data) {
|
||||||
switch (command) {
|
switch (command.toLowerCase()) {
|
||||||
case "set":
|
case "set":
|
||||||
list.clear();
|
list.clear();
|
||||||
case "add":
|
case "add":
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
logging.file=jabit.log
|
logging.file=jabit.log
|
||||||
logging.level.*=DEBUG
|
logging.level.*=DEBUG
|
||||||
logging.level.ch.dissem.*=WARN
|
logging.level.ch.dissem.*=DEBUG
|
||||||
bitmessage.port=18444
|
bitmessage.port=18444
|
||||||
|
database.url=jdbc:h2:mem:jabit;DB_CLOSE_DELAY=10
|
||||||
bitmessage.connection.ttl.hours=12
|
bitmessage.connection.ttl.hours=12
|
||||||
bitmessage.connection.limit=100
|
bitmessage.connection.limit=100
|
||||||
|
Loading…
Reference in New Issue
Block a user