forked from I2P_Developers/i2p.i2p
- Nicer profile dump - More efficient profile lookup for display - Fix dumpprofile NPE - Change file suffix from .dat to .txt.gz
74 lines
1.9 KiB
Java
74 lines
1.9 KiB
Java
package net.i2p.router.web;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Set;
|
|
|
|
import net.i2p.data.DataFormatException;
|
|
import net.i2p.data.Hash;
|
|
|
|
/**
|
|
* Dump the peer profile data if given a full B64 peer string or prefix.
|
|
*
|
|
*/
|
|
public class StatHelper extends HelperBase {
|
|
private String _peer;
|
|
|
|
/**
|
|
* Caller should strip HTML (XSS)
|
|
*/
|
|
public void setPeer(String peer) { _peer = peer; }
|
|
|
|
/**
|
|
* Look up based on a b64 prefix or full b64.
|
|
* Prefix is inefficient.
|
|
*/
|
|
public String getProfile() {
|
|
if (_peer == null || _peer.length() <= 0)
|
|
return "No peer specified";
|
|
if (_peer.length() >= 44)
|
|
return outputProfile();
|
|
Set<Hash> peers = _context.profileOrganizer().selectAllPeers();
|
|
for (Hash peer : peers) {
|
|
if (peer.toBase64().startsWith(_peer)) {
|
|
return dumpProfile(peer);
|
|
}
|
|
}
|
|
return "Unknown peer " + _peer;
|
|
}
|
|
|
|
/**
|
|
* Look up based on the full b64 - efficient
|
|
* @since 0.8.5
|
|
*/
|
|
private String outputProfile() {
|
|
Hash peer = new Hash();
|
|
try {
|
|
peer.fromBase64(_peer);
|
|
return dumpProfile(peer);
|
|
} catch (DataFormatException dfe) {
|
|
return "Bad peer hash " + _peer;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* dump the profile
|
|
* @since 0.8.5
|
|
*/
|
|
private String dumpProfile(Hash peer) {
|
|
try {
|
|
WriterOutputStream wos = new WriterOutputStream(_out);
|
|
boolean success = _context.profileOrganizer().exportProfile(peer, wos);
|
|
if (success) {
|
|
wos.flush();
|
|
_out.flush();
|
|
return "";
|
|
} else {
|
|
return "Unknown peer " + _peer;
|
|
}
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
return "IO Error " + e;
|
|
}
|
|
}
|
|
}
|