mirror of
https://github.com/xpipe-io/xpipe.git
synced 2024-11-25 00:50:31 +00:00
Cleanup
This commit is contained in:
parent
6e5f131658
commit
9154a28aca
16 changed files with 2 additions and 345 deletions
|
@ -2,6 +2,7 @@ package io.xpipe.app.core.check;
|
||||||
|
|
||||||
import com.sun.jna.Function;
|
import com.sun.jna.Function;
|
||||||
import io.xpipe.app.issue.ErrorEvent;
|
import io.xpipe.app.issue.ErrorEvent;
|
||||||
|
import io.xpipe.app.issue.TrackEvent;
|
||||||
import io.xpipe.core.process.OsType;
|
import io.xpipe.core.process.OsType;
|
||||||
|
|
||||||
public class AppSidCheck {
|
public class AppSidCheck {
|
||||||
|
@ -14,6 +15,7 @@ public class AppSidCheck {
|
||||||
try {
|
try {
|
||||||
var func = Function.getFunction("c", "setsid");
|
var func = Function.getFunction("c", "setsid");
|
||||||
func.invoke(new Object[0]);
|
func.invoke(new Object[0]);
|
||||||
|
TrackEvent.info("Successfully set process sid");
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
ErrorEvent.fromThrowable(t).omit().handle();
|
ErrorEvent.fromThrowable(t).omit().handle();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
package io.xpipe.app.exchange.cli;
|
|
||||||
|
|
||||||
import io.xpipe.app.exchange.MessageExchangeImpl;
|
|
||||||
import io.xpipe.beacon.BeaconHandler;
|
|
||||||
import io.xpipe.beacon.exchange.ReadStreamExchange;
|
|
||||||
import io.xpipe.core.store.StreamDataStore;
|
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
|
|
||||||
public class ReadStreamExchangeImpl extends ReadStreamExchange
|
|
||||||
implements MessageExchangeImpl<ReadStreamExchange.Request, ReadStreamExchange.Response> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response handleRequest(BeaconHandler handler, Request msg) throws Exception {
|
|
||||||
var ds = getStoreEntryByName(msg.getName(), false);
|
|
||||||
|
|
||||||
handler.postResponse(() -> {
|
|
||||||
StreamDataStore store = ds.getStore().asNeeded();
|
|
||||||
try (var output = handler.sendBody();
|
|
||||||
InputStream inputStream = store.openInput()) {
|
|
||||||
inputStream.transferTo(output);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return Response.builder().build();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
package io.xpipe.app.exchange.cli;
|
|
||||||
|
|
||||||
import io.xpipe.app.exchange.MessageExchangeImpl;
|
|
||||||
import io.xpipe.beacon.BeaconHandler;
|
|
||||||
import io.xpipe.beacon.exchange.WriteStreamExchange;
|
|
||||||
import io.xpipe.core.store.StreamDataStore;
|
|
||||||
|
|
||||||
public class WriteStreamExchangeImpl extends WriteStreamExchange
|
|
||||||
implements MessageExchangeImpl<WriteStreamExchange.Request, WriteStreamExchange.Response> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response handleRequest(BeaconHandler handler, Request msg) throws Exception {
|
|
||||||
var ds = getStoreEntryByName(msg.getName(), false);
|
|
||||||
StreamDataStore store = ds.getStore().asNeeded();
|
|
||||||
try (var input = handler.receiveBody();
|
|
||||||
var output = store.openOutput()) {
|
|
||||||
input.transferTo(output);
|
|
||||||
}
|
|
||||||
return WriteStreamExchange.Response.builder().build();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -150,8 +150,6 @@ open module io.xpipe.app {
|
||||||
TerminalWaitExchangeImpl,
|
TerminalWaitExchangeImpl,
|
||||||
TerminalLaunchExchangeImpl,
|
TerminalLaunchExchangeImpl,
|
||||||
QueryStoreExchangeImpl,
|
QueryStoreExchangeImpl,
|
||||||
WriteStreamExchangeImpl,
|
|
||||||
ReadStreamExchangeImpl,
|
|
||||||
InstanceExchangeImpl,
|
InstanceExchangeImpl,
|
||||||
VersionExchangeImpl;
|
VersionExchangeImpl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package io.xpipe.beacon;
|
package io.xpipe.beacon;
|
||||||
|
|
||||||
import io.xpipe.beacon.exchange.WriteStreamExchange;
|
|
||||||
import io.xpipe.core.util.FailableBiConsumer;
|
import io.xpipe.core.util.FailableBiConsumer;
|
||||||
import io.xpipe.core.util.FailableConsumer;
|
import io.xpipe.core.util.FailableConsumer;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
@ -171,10 +170,6 @@ public abstract class BeaconConnection implements AutoCloseable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeStream(String name, InputStream in) {
|
|
||||||
performOutputExchange(WriteStreamExchange.Request.builder().name(name).build(), in::transferTo);
|
|
||||||
}
|
|
||||||
|
|
||||||
private BeaconException unwrapException(Exception exception) {
|
private BeaconException unwrapException(Exception exception) {
|
||||||
if (exception instanceof ServerException s) {
|
if (exception instanceof ServerException s) {
|
||||||
return new BeaconException("An internal server error occurred", s);
|
return new BeaconException("An internal server error occurred", s);
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
package io.xpipe.beacon.exchange;
|
|
||||||
|
|
||||||
import io.xpipe.beacon.RequestMessage;
|
|
||||||
import io.xpipe.beacon.ResponseMessage;
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.Value;
|
|
||||||
import lombok.extern.jackson.Jacksonized;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stores a stream of data in a storage.
|
|
||||||
*/
|
|
||||||
public class ReadStreamExchange implements MessageExchange {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getId() {
|
|
||||||
return "readStream";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Jacksonized
|
|
||||||
@Builder
|
|
||||||
@Value
|
|
||||||
public static class Request implements RequestMessage {
|
|
||||||
@NonNull
|
|
||||||
String name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Jacksonized
|
|
||||||
@Builder
|
|
||||||
@Value
|
|
||||||
public static class Response implements ResponseMessage {}
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
package io.xpipe.beacon.exchange;
|
|
||||||
|
|
||||||
import io.xpipe.beacon.RequestMessage;
|
|
||||||
import io.xpipe.beacon.ResponseMessage;
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.NonNull;
|
|
||||||
import lombok.Value;
|
|
||||||
import lombok.extern.jackson.Jacksonized;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stores a stream of data in a storage.
|
|
||||||
*/
|
|
||||||
public class WriteStreamExchange implements MessageExchange {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getId() {
|
|
||||||
return "writeStream";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Jacksonized
|
|
||||||
@Builder
|
|
||||||
@Value
|
|
||||||
public static class Request implements RequestMessage {
|
|
||||||
@NonNull
|
|
||||||
String name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Jacksonized
|
|
||||||
@Builder
|
|
||||||
@Value
|
|
||||||
public static class Response implements ResponseMessage {}
|
|
||||||
}
|
|
|
@ -29,8 +29,6 @@ open module io.xpipe.beacon {
|
||||||
LaunchExchange,
|
LaunchExchange,
|
||||||
InstanceExchange,
|
InstanceExchange,
|
||||||
EditStoreExchange,
|
EditStoreExchange,
|
||||||
WriteStreamExchange,
|
|
||||||
ReadStreamExchange,
|
|
||||||
StoreProviderListExchange,
|
StoreProviderListExchange,
|
||||||
ModeExchange,
|
ModeExchange,
|
||||||
QueryStoreExchange,
|
QueryStoreExchange,
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
package io.xpipe.core.store;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a store that has a filename.
|
|
||||||
* Note that this does not only apply to file stores but any other store as well that has some kind of file name.
|
|
||||||
*/
|
|
||||||
public interface FilenameStore extends DataStore {
|
|
||||||
|
|
||||||
default String getFileExtension() {
|
|
||||||
var split = getFileName().split("[\\\\.]");
|
|
||||||
if (split.length == 0) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return split[split.length - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
String getFileName();
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
package io.xpipe.core.store;
|
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A data store that is only represented by an InputStream.
|
|
||||||
*/
|
|
||||||
public class InputStreamStore implements StreamDataStore {
|
|
||||||
|
|
||||||
private final InputStream in;
|
|
||||||
|
|
||||||
public InputStreamStore(InputStream in) {
|
|
||||||
this.in = in;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataFlow getFlow() {
|
|
||||||
return DataFlow.INPUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canOpen() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InputStream openInput() {
|
|
||||||
return in;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
package io.xpipe.core.store;
|
|
||||||
|
|
||||||
import io.xpipe.core.util.NewLine;
|
|
||||||
import io.xpipe.core.util.StreamCharset;
|
|
||||||
|
|
||||||
public interface KnownFormatStreamDataStore extends StreamDataStore {
|
|
||||||
|
|
||||||
StreamCharset getCharset();
|
|
||||||
|
|
||||||
NewLine getNewLine();
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
package io.xpipe.core.store;
|
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
public class OutputStreamStore implements StreamDataStore {
|
|
||||||
|
|
||||||
private final OutputStream out;
|
|
||||||
|
|
||||||
public OutputStreamStore(OutputStream out) {
|
|
||||||
this.out = out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public DataFlow getFlow() {
|
|
||||||
return DataFlow.OUTPUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canOpen() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isContentExclusivelyAccessible() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InputStream openInput() {
|
|
||||||
throw new UnsupportedOperationException("No input available");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OutputStream openOutput() {
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
package io.xpipe.core.store;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
|
||||||
import io.xpipe.core.util.JacksonizedValue;
|
|
||||||
import lombok.experimental.SuperBuilder;
|
|
||||||
import lombok.extern.jackson.Jacksonized;
|
|
||||||
|
|
||||||
import java.io.FilterInputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
|
|
||||||
@JsonTypeName("stdin")
|
|
||||||
@SuperBuilder
|
|
||||||
@Jacksonized
|
|
||||||
public class StdinDataStore extends JacksonizedValue implements StreamDataStore {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isContentExclusivelyAccessible() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public InputStream openInput() {
|
|
||||||
var in = System.in;
|
|
||||||
// Prevent closing the standard in when the returned input stream is closed
|
|
||||||
return new FilterInputStream(in) {
|
|
||||||
@Override
|
|
||||||
public void close() {}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
package io.xpipe.core.store;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
|
||||||
import io.xpipe.core.util.JacksonizedValue;
|
|
||||||
import lombok.experimental.SuperBuilder;
|
|
||||||
import lombok.extern.jackson.Jacksonized;
|
|
||||||
|
|
||||||
import java.io.FilterOutputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
@JsonTypeName("stdout")
|
|
||||||
@SuperBuilder
|
|
||||||
@Jacksonized
|
|
||||||
public class StdoutDataStore extends JacksonizedValue implements StreamDataStore {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canOpen() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isContentExclusivelyAccessible() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OutputStream openOutput() {
|
|
||||||
// Create an output stream that will write to standard out but will not close it
|
|
||||||
return new FilterOutputStream(System.out) {
|
|
||||||
@Override
|
|
||||||
public void close() {}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,60 +0,0 @@
|
||||||
package io.xpipe.core.store;
|
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A data store that can be accessed using InputStreams and/or OutputStreams.
|
|
||||||
*/
|
|
||||||
public interface StreamDataStore extends DataStore {
|
|
||||||
|
|
||||||
default DataFlow getFlow() {
|
|
||||||
return DataFlow.INPUT_OUTPUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks whether this store can be opened.
|
|
||||||
* This can be not the case for example if the underlying store does not exist.
|
|
||||||
*/
|
|
||||||
default boolean canOpen() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates whether this data store can only be accessed by the current running application.
|
|
||||||
* One example are standard in and standard out stores.
|
|
||||||
*
|
|
||||||
* @see StdinDataStore
|
|
||||||
* @see StdoutDataStore
|
|
||||||
*/
|
|
||||||
default boolean isContentExclusivelyAccessible() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens an input stream that can be used to read its data.
|
|
||||||
*/
|
|
||||||
default InputStream openInput() {
|
|
||||||
throw new UnsupportedOperationException("Can't open store input");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens an input stream that is guaranteed to be buffered.
|
|
||||||
*/
|
|
||||||
default InputStream openBufferedInput() throws Exception {
|
|
||||||
var in = openInput();
|
|
||||||
if (in.markSupported()) {
|
|
||||||
return in;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new BufferedInputStream(in);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens an output stream that can be used to write data.
|
|
||||||
*/
|
|
||||||
default OutputStream openOutput() {
|
|
||||||
throw new UnsupportedOperationException("Can't open store output");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -20,8 +20,6 @@ import io.xpipe.core.process.OsType;
|
||||||
import io.xpipe.core.process.ShellDialect;
|
import io.xpipe.core.process.ShellDialect;
|
||||||
import io.xpipe.core.process.ShellDialects;
|
import io.xpipe.core.process.ShellDialects;
|
||||||
import io.xpipe.core.store.LocalStore;
|
import io.xpipe.core.store.LocalStore;
|
||||||
import io.xpipe.core.store.StdinDataStore;
|
|
||||||
import io.xpipe.core.store.StdoutDataStore;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.WildcardType;
|
import java.lang.reflect.WildcardType;
|
||||||
|
@ -35,8 +33,6 @@ public class CoreJacksonModule extends SimpleModule {
|
||||||
public void setupModule(SetupContext context) {
|
public void setupModule(SetupContext context) {
|
||||||
context.registerSubtypes(
|
context.registerSubtypes(
|
||||||
new NamedType(InPlaceSecretValue.class),
|
new NamedType(InPlaceSecretValue.class),
|
||||||
new NamedType(StdinDataStore.class),
|
|
||||||
new NamedType(StdoutDataStore.class),
|
|
||||||
new NamedType(LocalStore.class),
|
new NamedType(LocalStore.class),
|
||||||
new NamedType(ArrayType.class),
|
new NamedType(ArrayType.class),
|
||||||
new NamedType(WildcardType.class),
|
new NamedType(WildcardType.class),
|
||||||
|
|
Loading…
Reference in a new issue