sign tool
This commit is contained in:
@ -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'
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
9
gui/griffon-app/models/com/muwire/gui/SignModel.groovy
Normal file
9
gui/griffon-app/models/com/muwire/gui/SignModel.groovy
Normal 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 {
|
||||
}
|
@ -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()
|
||||
|
66
gui/griffon-app/views/com/muwire/gui/SignView.groovy
Normal file
66
gui/griffon-app/views/com/muwire/gui/SignView.groovy
Normal 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()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user