2022-05-24 12:16:50 +00:00
import React from "react" ;
import { useTranslation } from "react-i18next" ;
import {
Dialog ,
DialogTitle ,
Tooltip ,
IconButton ,
TextField ,
DialogActions ,
DialogContent ,
DialogContentText ,
Button ,
Grid ,
Link ,
} from "@mui/material"
2022-05-24 13:33:55 +00:00
import { saveAsJson } from "../../utils/saveFile" ;
2022-05-24 12:16:50 +00:00
// Icons
import KeyIcon from '@mui/icons-material/Key' ;
import ContentCopy from "@mui/icons-material/ContentCopy" ;
import ForumIcon from '@mui/icons-material/Forum' ;
2022-05-24 21:36:21 +00:00
import { ExportIcon , NewTabIcon } from '../Icons' ;
2022-05-24 12:16:50 +00:00
type Props = {
open : boolean ;
onClose : ( ) = > void ;
orderId : number ;
messages : array ;
own_pub_key : string ;
own_enc_priv_key : string ;
peer_pub_key : string ;
passphrase : string ;
onClickBack : ( ) = > void ;
}
const AuditPGPDialog = ( {
open ,
onClose ,
orderId ,
messages ,
own_pub_key ,
own_enc_priv_key ,
peer_pub_key ,
passphrase ,
onClickBack ,
} : Props ) : JSX . Element = > {
const { t } = useTranslation ( ) ;
return (
< Dialog
open = { open }
onClose = { onClose }
>
< DialogTitle >
2022-05-24 21:36:21 +00:00
{ t ( "Don't trust, verify" ) }
2022-05-24 12:16:50 +00:00
< / DialogTitle >
< DialogContent >
< DialogContentText >
2022-05-24 13:33:55 +00:00
{ t ( "Your communication is end-to-end encrypted with OpenPGP. You can verify the privacy of this chat using any tool based on the OpenPGP standard." ) }
2022-05-24 12:16:50 +00:00
< / DialogContentText >
< Grid container spacing = { 1 } align = "center" >
< Grid item align = "center" xs = { 12 } >
2022-05-24 21:36:21 +00:00
< Button component = { Link } target = "_blank" href = "https://learn.robosats.com/docs/pgp-encryption" > { t ( "Learn how to verify" ) } < NewTabIcon sx = { { width :16 , height :16 } } / > < / Button >
2022-05-24 12:16:50 +00:00
< / Grid >
< Grid item align = "center" xs = { 12 } >
2022-05-24 13:33:55 +00:00
< Tooltip placement = "top" enterTouchDelay = { 0 } enterDelay = { 0 } title = { t ( "Your PGP public key. Your peer uses it to encrypt messages only you can read." ) } >
< TextField
sx = { { width : "100%" , maxWidth : "550px" } }
disabled
label = { < b > { t ( "Your public key" ) } < / b > }
value = { own_pub_key }
variant = 'filled'
size = 'small'
InputProps = { {
endAdornment :
< Tooltip disableHoverListener enterTouchDelay = { 0 } title = { t ( "Copied!" ) } >
< IconButton onClick = { ( ) = > navigator . clipboard . writeText ( own_pub_key ) } >
< ContentCopy / >
< / IconButton >
< / Tooltip > ,
} }
/ >
< / Tooltip >
2022-05-24 12:16:50 +00:00
< / Grid >
< Grid item align = "center" xs = { 12 } >
2022-05-24 13:33:55 +00:00
< Tooltip placement = "top" enterTouchDelay = { 0 } enterDelay = { 0 } title = { t ( "Your peer PGP public key. You use it to encrypt messages only he can read.and to verify your peer signed the incoming messages." ) } >
< TextField
sx = { { width : "100%" , maxWidth : "550px" } }
disabled
label = { < b > { t ( "Peer public key" ) } < / b > }
value = { peer_pub_key }
variant = 'filled'
size = 'small'
InputProps = { {
endAdornment :
< Tooltip disableHoverListener enterTouchDelay = { 0 } title = { t ( "Copied!" ) } >
< IconButton onClick = { ( ) = > navigator . clipboard . writeText ( peer_pub_key ) } >
< ContentCopy / >
< / IconButton >
< / Tooltip > ,
} }
/ >
< / Tooltip >
2022-05-24 12:16:50 +00:00
< / Grid >
< Grid item align = "center" xs = { 12 } >
2022-05-24 13:33:55 +00:00
< Tooltip placement = "top" enterTouchDelay = { 0 } enterDelay = { 0 } title = { t ( "Your encrypted private key. You use it to decrypt the messages that your peer encrypted for you. You also use it to sign the messages you send." ) } >
< TextField
sx = { { width : "100%" , maxWidth : "550px" } }
disabled
label = { < b > { t ( "Your encrypted private key" ) } < / b > }
value = { own_enc_priv_key }
variant = 'filled'
size = 'small'
InputProps = { {
endAdornment :
< Tooltip disableHoverListener enterTouchDelay = { 0 } title = { t ( "Copied!" ) } >
< IconButton onClick = { ( ) = > navigator . clipboard . writeText ( own_enc_priv_key ) } >
< ContentCopy / >
< / IconButton >
< / Tooltip > ,
} }
/ >
< / Tooltip >
2022-05-24 12:16:50 +00:00
< / Grid >
< Grid item align = "center" xs = { 12 } >
2022-05-24 13:33:55 +00:00
< Tooltip placement = "top" enterTouchDelay = { 0 } enterDelay = { 0 } title = { t ( "The passphrase to decrypt your private key. Only you know it! Do not share. It is also your robot avatar user token." ) } >
< TextField
sx = { { width : "100%" , maxWidth : "550px" } }
disabled
label = { < b > { t ( "Your private key passphrase (keep secure!)" ) } < / b > }
value = { passphrase }
variant = 'filled'
size = 'small'
InputProps = { {
endAdornment :
< Tooltip disableHoverListener enterTouchDelay = { 0 } title = { t ( "Copied!" ) } >
< IconButton onClick = { ( ) = > navigator . clipboard . writeText ( passphrase ) } >
< ContentCopy / >
< / IconButton >
< / Tooltip > ,
} }
/ >
< / Tooltip >
2022-05-24 12:16:50 +00:00
< / Grid >
< br / >
< Grid item xs = { 6 } >
2022-05-24 13:33:55 +00:00
< Tooltip placement = "top" enterTouchDelay = { 0 } enterDelay = { 1000 } enterNextDelay = { 2000 } title = { t ( "Save credentials as a JSON file" ) } >
< Button
size = "small"
color = "primary"
variant = "contained"
onClick = { ( ) = > saveAsJson (
'keys_' + orderId + '.json' ,
{ "own_public_key" : own_pub_key ,
"peer_public_key" : peer_pub_key ,
"encrypted_private_key" : own_enc_priv_key ,
"passphrase" : passphrase
} ) } >
< div style = { { width :26 , height :18 } } >
< ExportIcon sx = { { width :18 , height :18 } } / >
< / div >
{ t ( "Keys" ) }
< div style = { { width :26 , height :20 } } >
< KeyIcon sx = { { width :20 , height :20 } } / >
< / div >
< / Button >
< / Tooltip >
2022-05-24 12:16:50 +00:00
< / Grid >
< Grid item xs = { 6 } >
2022-05-24 13:33:55 +00:00
< Tooltip placement = "top" enterTouchDelay = { 0 } enterDelay = { 1000 } enterNextDelay = { 2000 } title = { t ( "Save messages as a JSON file" ) } >
2022-05-24 12:16:50 +00:00
< Button
size = "small"
color = "primary"
variant = "contained"
onClick = { ( ) = > saveAsJson (
'messages_' + orderId + '.json' ,
messages ) } >
< div style = { { width :28 , height :20 } } >
< ExportIcon sx = { { width :18 , height :18 } } / >
< / div >
2022-05-24 12:52:33 +00:00
{ t ( "Messages" ) }
2022-05-24 12:16:50 +00:00
< div style = { { width :26 , height :20 } } >
< ForumIcon sx = { { width :20 , height :20 } } / >
< / div >
< / Button >
2022-05-24 13:33:55 +00:00
< / Tooltip >
2022-05-24 12:16:50 +00:00
< / Grid >
< / Grid >
< / DialogContent >
< DialogActions >
< Button onClick = { onClickBack } autoFocus > { t ( "Go back" ) } < / Button >
< / DialogActions >
< / Dialog >
)
}
export default AuditPGPDialog ;