sign tool

This commit is contained in:
Zlatin Balevsky
2020-05-04 23:16:32 +01:00
parent 8b99f83db8
commit ecaec1df3b
5 changed files with 140 additions and 0 deletions

View File

@ -136,4 +136,9 @@ mvcGroups {
view = 'com.muwire.gui.WatchedDirectoryView'
controller = 'com.muwire.gui.WatchedDirectoryController'
}
'sign' {
model = 'com.muwire.gui.SignModel'
view = 'com.muwire.gui.SignView'
controller = 'com.muwire.gui.SignController'
}
}

View File

@ -0,0 +1,55 @@
package com.muwire.gui
import griffon.core.artifact.GriffonController
import griffon.core.controller.ControllerAction
import griffon.inject.MVCMember
import griffon.metadata.ArtifactProviderFor
import net.i2p.crypto.DSAEngine
import net.i2p.data.Base64
import java.awt.Toolkit
import java.awt.datatransfer.StringSelection
import javax.annotation.Nonnull
import javax.swing.JOptionPane
import com.muwire.core.Constants
import com.muwire.core.Core
import com.muwire.core.util.DataUtil
@ArtifactProviderFor(GriffonController)
class SignController {
Core core
@MVCMember @Nonnull
SignView view
@ControllerAction
void sign() {
String plain = view.plainTextArea.getText()
if (plain.length() > Constants.MAX_COMMENT_LENGTH) {
JOptionPane.showMessageDialog(null, "Text to sign is too long - ${plain.length()} bytes. The maximum size is $Constants.MAX_COMMENT_LENGTH bytes",
"Text Too Long", JOptionPane.WARNING_MESSAGE)
return
}
byte[] payload = DataUtil.encodei18nString(plain)
def sig = DSAEngine.getInstance().sign(payload, core.spk)
view.signedTextArea.setText(Base64.encode(sig.data))
}
@ControllerAction
void copy() {
String signed = view.signedTextArea.getText()
StringSelection selection = new StringSelection(signed)
def clipboard = Toolkit.getDefaultToolkit().getSystemClipboard()
clipboard.setContents(selection, null)
}
@ControllerAction
void close() {
view.dialog.setVisible(false)
mvcGroup.destroy()
}
}

View File

@ -0,0 +1,9 @@
package com.muwire.gui
import griffon.core.artifact.GriffonModel
import griffon.transform.Observable
import griffon.metadata.ArtifactProviderFor
@ArtifactProviderFor(GriffonModel)
class SignModel {
}

View File

@ -144,6 +144,11 @@ class MainFrameView {
mvcGroup.createMVCGroup("chat-monitor","chat-monitor",env)
}
})
menuItem("Sign Tool", actionPerformed : {
def env = [:]
env['core'] = model.core
mvcGroup.createMVCGroup("sign",env)
})
}
}
borderLayout()

View File

@ -0,0 +1,66 @@
package com.muwire.gui
import griffon.core.artifact.GriffonView
import griffon.inject.MVCMember
import griffon.metadata.ArtifactProviderFor
import javax.swing.JDialog
import javax.swing.SwingConstants
import java.awt.BorderLayout
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import javax.annotation.Nonnull
@ArtifactProviderFor(GriffonView)
class SignView {
@MVCMember @Nonnull
FactoryBuilderSupport builder
def mainFrame
def dialog
def p
def plainTextArea
def signedTextArea
void initUI() {
mainFrame = application.windowManager.findWindow("main-frame")
dialog = new JDialog(mainFrame, "Sign Text", true)
p = builder.panel {
borderLayout()
panel (constraints : BorderLayout.NORTH) {
label("Enter text to be signed")
}
panel (constraints : BorderLayout.CENTER) {
gridLayout(rows : 2, cols: 1)
scrollPane {
plainTextArea = textArea(rows : 10, columns : 50, editable : true, lineWrap: true, wrapStyleWord : true)
}
scrollPane {
signedTextArea = textArea(rows : 10, columns : 50, editable : false, lineWrap : true, wrapStyleWord : true)
}
}
panel (constraints : BorderLayout.SOUTH) {
button(text : "Sign", signAction)
button(text : "Copy To Clipboard", copyAction)
button(text : "Dismiss", closeAction)
}
}
}
void mvcGroupInit(Map<String,String> args) {
dialog.getContentPane().add(p)
dialog.pack()
dialog.setLocationRelativeTo(mainFrame)
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)
dialog.addWindowListener( new WindowAdapter() {
public void windowClosed(WindowEvent e) {
mvcGroup.destroy()
}
})
dialog.show()
}
}