Skip to end of metadata
Go to start of metadata


 

Allgemeines

Transfers können synchron sowie asynchron über die API durchgeführt werden. Ein Transfer kann mehrere Dateien enthalten und wird anschließend auf den Cryptshare Server hochgeladen, verschlüsselt und den Empfängern zu Verfügung gestellt. Abhängig von den verwendeten Transfereinstellungen werden die Empfänger und der Absender nach der Bereitstellung des Transfers beanchrichtigt.

Bevor ein Transfer durchgeführt werden kann muss dieser, wie im Kapitel 'Transfer vorbereiten' beschrieben, vorbereitet werden. Anschließend kann der Transfer entweder synchron oder asynchron durchgeführt werden.

Standardservereinstellungen abrufen

Die Standardeinstellungen, wie beispielsweise die maximale Transfergröße, werden am Cryptshare Server festgelegt und gelten sofern sie nicht von spezifischen Policyeinstellungen übersteuert werden. Diese Einstellungen können mittels #requestTransferData() abgerufen werden. Das Rückgabe-Objekt enthält die folgenden Eisntellungen:

  • Maximale Liegezeit für Transfers
  • Maximale Transfergröße in MB
// Schritt 1: Erzeugen einer Client-Instanz
 
// Anlegen der URL zu Ihrem Cryptshare Server
WebServiceUri serviceUri = new WebServiceUri("https://cryptshare.server.com");
      
// Erzeugen der Verbindung zum Cryptshare Server
CryptshareConnection connection = new CryptshareConnection(serviceUri);
      
// Erzeugen der Client-Instanz unter Verwendung der Absenderadresse,
// der Verbindung zum Server und des Pfades für denn lokalen Verifizierungsspeicher.
Client client = new Client("sender_email@server.com", connection, "C:\temp");

// Allgemeine Transfereisntellungen abrufen
TransferSettings settings = client.requestTransferData();
 
System.out.println("Maximale Liegezeit in Tagen = " + transferSettings.getStorageDuration());
System.out.println("Maximale Transfergröße in MB = " + transferSettings.getTransferLimit());

Transfer Vorbereiten

Bevor ein Transfer agesendet werden kann muss dieser mit den folgenden Parametern vorbereitet werden:

  • Kontaktdaten des Absenders
    • Name
    • Telefonnummer
    • E-Mail Adresse
  • Das zu verwendende Passwortverfahren (Optional)
  • Der Nachrichtentext für die Absenderbenachrichtung (Optional)
  • Die Empfänger-E-Mail Adressen
  • Die Sprache der Benachrichtigung (Optional)
  • Die gewünschte Liegezeit für den Transfer (Optional)
  • Die zu übertragenden Dateien

Wird der Transfer nicht gestattet da einige Empfänger dafür nicht zugelassen werden so wird eine Exception geworfen. Um dies zu vermeiden kann vor dem Transfer eine Policyüberprüfung durchgeführt werden.

Das Passwortverfahren

Manuelles Passwort - 'manual'

Ein Passwort muss explizit vom Absender eingegeben werden. Das Passwort kann mit den Funktionen aus dem Kapitel 'Passwortfunktionen' auf die aktuellen Sicherheitsanforderungen überprüft werden.
Der Empfänger muss bei diesem Verfahren Kontakt mit dem Absender aufnehmen um das Passwort zu erfahren.

Generiertes Passwort - 'generated'

Der Client fordert bei diesem Verfahren ein automatisch generiertes Passwort vom Server an welches die geforderten Sicherheitsanforderungen erfüllt.
Der Empfänger muss bei diesem Verfahren Kontakt mit dem Absender aufnehmen um das Passwort zu erfahren.

Kein Passwort - 'none'

Bei diesem Verfahren muss keiner der Beteiligten ein Passwort für den Transfer angeben. Dies wird vom Server für den Anwender 'unsichtbar' gehandhabt.

Beachten Sie bitte, dass dieser Modus als der unsichserste Modus gilt und daher nur in ausgewählten Fällen verwendet werden sollte.

Die Benachrichtigungssprache

Die Beanchrichtigungsprache kann für den Absender und die Empfänger separat über den entsprechenden ISO-639-1 Code angegeben werden. Sie können nur Sprachen angeben welche auf dem Server auch als Sprachpaket installiert sind (siehe Kapitel 'Sprach-Ressourcen').

Der Benachrichtigungtext

Soll für die Empfängerbenachrichtigung ein eigener Text verwendet werden so kann dieser über die Setter im Transfer-Objekt übergeben werden, entweder als Zeichenkette oder direkt als Stream. Der Text muss im UTF-8 Format angegeben werden und kann HTML-Markup enthalten.
Desweiteren kann auch ein eigener Betreff für die Benachrichtigung  im Plaintext-Format übergeben werden.

Vertrauliche Nachrichten

Auf dieselbe Weise wie ein Benachrichtigungstext angegeben werden kann, kann auch eine vertrauliche Nachricht zu dem Transfer hinzugefügt werden. Diese wird zusammen mit den Transferdateien verschlüsselt und kann von den Empfängern beim Abruf des Transfers eingesehen werden. Ein optionaler Betreff für die vertrauliche Nachricht kann ebenfalls festgelegt werden.


Cryptshare Transfer vorbereiten
// URL zum Cryptshare Server
WebServiceUri uri = new WebServiceUri("https://cryptshare.yourdomain.com");

// Verbindungsinstanz zum Cryptshare Server
CryptshareConnection connection = new CryptshareConnection(uri);

// Client für das Absenden der Requests
Client client = new Client("john.adams@yourdomain.com", connection, "C:\\temp\\client.store");

// Erzeugen eine Transfer Instanz
Transfer transfer = new Transfer();

// Festlegen des Absendernamens
transfer.setSenderName("John Adams");

// Festlegen der Absender-Telefonnummer
transfer.setSenderPhone("234 5467");

/**
 * Festlegen des Benachrichtigungstextes für die Empfängerbenachrichtigung.
 * Der Text kann direkt als UTF-8-codierter InputStream übergeben werden.
 **/
try {
   FileInputStream inputStream = new FileInputStream("C:\\temp\\message.txt");
   // Nachricht wird als InputStream übergeben. Der Stream wird automatisch
   // geschlossen.
   transfer.setMessage(inputStream);
} catch (Exception ex) {
   // Anzeigen einer Fehlernachricht bei Auftreten eines Fehlers
   System.err.println("Der Nachrichteninhalt konnte nicht gelesen werden!");
}

// Festlegen des Betreffs für die Empfängerbenachrichtigung
transfer.setSubject("Betreff für diesen Transfer");

// Festlegen der Empfänger
List<String> recipients = new ArrayList<String>();
recipients.add("jane.doe@abc.com");
recipients.add("jack.smith@xyz.com");

// Abrufen der Policy für diese Absender/Empfänger-Kombination um Sicher
// zu stellen, dass diese auch zugelassen sind.
Policy policy = client.requestPolicy(recipients);

// Nur zulässige Empfänger zum Transfer hinzufügen
if (policy.getFailedAddresses() != null && !policy.getFailedAddresses().isEmpty()) {
   for (String recipient : recipients) {
      if (!policy.getFailedAddresses().contains(recipient)) {
         transfer.addRecipient(recipient);
      } else {
         System.out.println("Der Empfänger ist unzulässig: " + recipient);
      }
   }
} else {
   // Alle Empfänger sind zugelassen.
   transfer.addRecipients(recipients);
}

// Sofern durch die Policy erlaubt sender wir außerdem eine Vertrauliche
// Nachricht
if (policy.isAllowConfidentialMessage()) {
   transfer.setConfidentialSubject("Betreff der vertraulichen Nachricht");
   transfer.setConfidentialMessage("Vertraulicher Nachrichtentext");
}

// Fahre nur dann fort wenn mindestens ein gültiger Empfänger vorhanden ist
if (transfer.getRecipients() == null || transfer.getRecipients().isEmpty())
   throw new IllegalStateException("Keine gültigen Empfänger gefunden. Der Transfer wird abgebrochen.");

// Festlegen des Passwortverfahrens. In diesem Falle wird der als am
// sichersten geltende Modus verwendet.
PasswordMode passwordMode;
List<PasswordMode> allowedPasswordModes = policy.getPasswordMode();
if (allowedPasswordModes.contains(PasswordMode.GENERATED))
   passwordMode = PasswordMode.GENERATED;
else if (allowedPasswordModes.contains(PasswordMode.MANUAL))
   passwordMode = PasswordMode.MANUAL;
else
   passwordMode = PasswordMode.NONE;
transfer.setPasswordMode(passwordMode);

// Für den manuellen Passwortmodus muss ein Passwort angegeben werden.
if (passwordMode.equals(PasswordMode.MANUAL)) {
   // Angeben eines manuellen Passwortes
   transfer.setPassword("p4$$w0rd");
}

// Dateinamen sollen in E-Mail Benachrichtigungen erwähnt werden
transfer.setShowFilenames(true);

// Der Empfänger soll benachrichtigt werden wenn Dateien heruntergeladen
// werden.
transfer.setInformAboutDownload(true);

// Die Empfängerbenachrichtigung soll auf Englisch versendet werden.
transfer.setRecipientLanguage("en");

// Die Absenderbenachrichtigung soll auf Englisch versendet werden.
transfer.setSenderLanguage("en");

// Festlegen des Datums an dem der Transfer abläuft.
// In diesem Falle wird das erlaubte maximum verwendet.
int storageDuration = policy.getStorageDuration();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_MONTH, storageDuration);
transfer.setExpirationDate(cal.getTime());

// Hinzufügen der Dateien zum Transfer. Für jede Datei muss eine TransferFile-Instanz
// erzeugt werden.
transfer.addFile(new TransferFile("C:\\temp\\transfer_file_01.txt"));

// Hinzufügen einer Datei als Stream der von einer anderen Anwendung kommen kann.
// In diesem Falle wird der Stream aus einer vorhandenen Datei erzeugt.
try {
   File inputFile = new File("C:\\temp\\transfer_file_02.txt");
   FileInputStream inputStream = new FileInputStream(inputFile);
   long streamSize = inputFile.length();

   // Erzeugen der TransferFile-Instanz mit Dateiname und Dateigröße
   TransferFile streamFile = new TransferFile("MyAttachment.txt", inputStream, streamSize);
   transfer.addFile(streamFile);
} catch (Exception ex) {
   ex.printStackTrace();
}
// Hinzufügen einer weiteren Datei.
transfer.addFile(new TransferFile("C:\\temp\\transfer_file_03.txt"));

/**
 * Nun ist das Transfer-Objekt für den synchronen oder asynchronen Versand
 * vorbereitet.
 **/


Transfer durchführen

Synchron

Ist der Transfer, wie im vorigen Kapitel beschrieben, vorbereitet so kann dieser nun mittels der Methode #performTransfer(Transfer, TransferUploadListener) synchron bereitgestellt werden. Folgende Parameter müssen dabei angegeben werden:

  • Der vorbereitete Transfer
  • Ein TransferUploadListener zur Anzeige des Transferfortschritts

Da dies eine synchrone Operation ist, wird die Methode so lange 'blockieren' bis alle Dateien hochgeladen und der Transfer abgeschlossen ist.

Durchführen eines synchronen Transfers
// Schritt 1: Erzeugen einer Client-Instanz
 
// Anlegen der URL zu Ihrem Cryptshare Server
WebServiceUri serviceUri = new WebServiceUri("https://cryptshare.server.com");
      
// Erzeugen der Verbindung zum Cryptshare Server
CryptshareConnection connection = new CryptshareConnection(serviceUri);
      
// Erzeugen der Client-Instanz unter Verwendung der Absenderadresse,
// der Verbindung zum Server und des Pfades für denn lokalen Verifizierungsspeicher.
Client client = new Client("sender_email@server.com", connection, "C:\\temp");

// Vorbereiten des Transferobjektes wie in vorigem Kapitel beschrieben.
Transfer transfer = ...
 
// Durchführen eines synchronen Transfers mit anonymen TransferUploadListener.
// Die Methode blockiert so lange bis der Transfer abgeschlossen ist.
client.performTransfer(transfer, new TransferUploadListener() { 
    @Override
    public void handleUploadProgressChanged(ProgressChangedEvent evt) {
        // Diese Methode wird während des Uploads wiederholt aufgerufen und gibt
        // den Transferfortschritt auf der Kommandozeile aus.
        double percent = (((double) evt.getBytesUploaded() / evt.getBytesTotal()) * 100.0);
        System.out.println("Transferfortschritt ... " + ((int)percent) + "%");
    }
 
    @Override
    public void handleUploadCompleted(UploadCompletedEvent evt) {
        // Diese Methode wird aufgerufen wenn alle Dateien auf den Server hochgeladen wurden.
        System.out.println("Upload vollständig!");
    }
 
    @Override
    public void handleUploadInterrupted(UploadInterruptedEvent evt) {
        // Diese Methode wird aufgerufen wenn ein Fehler während des Uploads auftritt
        System.out.println("Während des Uploads ist ein Fehler aufgetreten: " + evt.getException());
    }
 
    @Override
    public void handleTransferCanceled() {
        // Diese Methode wird aufgerufen wenn der Transfer
        // mittels #cancelTransfer() abgebrochen wurde.
        System.out.println("Der Transfer wurde vom Benutzer abgebrochen.");
    }
});

Asynchron

Ist der Transfer, wie im vorigen Kapitel beschrieben, vorbereitet so kann dieser nun mittels der Methode #beginTransfer(Transfer, TransferUploadListener) asynchron bereitgestellt werden. Folgende Parameter müssen dabei angegeben werden:

  • Der vorbereitete Transfer
  • Ein TransferUploadListener zur Anzeige des Transferfortschritts

Entgegen dem synchronen Upload wird diese Methode unmittelbar abgeschlossen nachdem der Transfer in einem eigenen Thread gestartet wurde. Ist der Transfer abgeschlossen so wird die Methode TransferUploadListener#handleUploadCompleted(UploadCompletedEvent) aufgerufen.

Durchführen eines asynchronen Transfers
// Schritt 1: Erzeugen einer Client-Instanz
 
// Anlegen der URL zu Ihrem Cryptshare Server
WebServiceUri serviceUri = new WebServiceUri("https://cryptshare.server.com");
      
// Erzeugen der Verbindung zum Cryptshare Server
CryptshareConnection connection = new CryptshareConnection(serviceUri);
      
// Erzeugen der Client-Instanz unter Verwendung der Absenderadresse,
// der Verbindung zum Server und des Pfades für denn lokalen Verifizierungsspeicher.
Client client = new Client("sender_email@server.com", connection, "C:\temp");

// Vorbereiten des Transferobjektes wie in vorigem Kapitel beschrieben.
Transfer transfer = ...
 
// Starten eines asynchronen Transfers mit anonymen TransferUploadListener.
// Die Methode wird unmittelbar nach Aufruf beendet.
client.beginTransfer(transfer, new TransferUploadListener() {   
    @Override
    public void handleUploadProgressChanged(ProgressChangedEvent evt) {
        // Diese Methode wird während des Uploads wiederholt aufgerufen und gibt
        // den Transferfortschritt auf der Kommandozeile aus.
        double percent = (((double) evt.getBytesUploaded() / evt.getBytesTotal()) * 100.0);
        System.out.println("Transferfortschritt ... " + ((int)percent) + "%");
    }
 
    @Override
    public void handleUploadCompleted(UploadCompletedEvent evt) {
        // Diese Methode wird aufgerufen wenn alle Dateien auf den Server hochgeladen wurden.
        System.out.println("Upload vollständig!");
    }
 
    @Override
    public void handleUploadInterrupted(UploadInterruptedEvent evt) {
        // Diese Methode wird aufgerufen wenn ein Fehler während des Uploads auftritt
        System.out.println("Während des Uploads ist ein Fehler aufgetreten: " + evt.getException());
    }
 
    @Override
    public void handleTransferCanceled() {
        // Diese Methode wird aufgerufen wenn der Transfer
        // mittels #cancelTransfer() abgebrochen wurde.
        System.out.println("Der Transfer wurde vom Benutzer abgebrochen.");
    }
});

 


  • No labels