Git Product home page Git Product logo

ipmail's People

Contributors

daa2101 avatar geo25rey avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

daa2101 bitcard

ipmail's Issues

Sending a Message causes crash in GUI

Problem

When sending a message from the message composer GUI, the program crashes with the following stacktrace.

  goroutine 51106 [running]:
   ipmail/libipmail/crypto.(identityList).GetAny(0xc00012df70, 0xc000b92750)
       /Users/runner/work/ipmail/ipmail/libipmail/crypto/identity_list.go:64 +0x2e
   ipmail/gui/fyne_views.MakeMessageComposer.func1()
       /Users/runner/work/ipmail/ipmail/gui/fyne_views/message_composer.go:42 +0x292
   fyne.io/fyne/widget.(Button).Tapped(0xc001cc8210, 0xc005fd1660)
       /Users/runner/go/pkg/mod/fyne.io/[email protected]/widget/button.go:192 +0xa7
   fyne.io/fyne/internal/driver/glfw.(window).mouseClicked.func5()
       /Users/runner/go/pkg/mod/fyne.io/[email protected]/internal/driver/glfw/window.go:734 +0x38
   fyne.io/fyne/internal/driver/glfw.(window).runEventQueue(0xc0044056c0)
       /Users/runner/go/pkg/mod/fyne.io/[email protected]/internal/driver/glfw/window.go:1152 +0x7a
   created by fyne.io/fyne/internal/driver/glfw.(*gLDriver).createWindow.func1
       /Users/runner/go/pkg/mod/fyne.io/[email protected]/internal/driver/glfw/window.go:1176 +0x10d

Crash when sending to invalid recipient

Error message output:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x18 pc=0x110c3f5]

goroutine 33147 [running]:
ipmail/libipmail/crypto.(*identityList).GetAny(0xc005894168, 0xc0054896c0)
        D:/Random/ipmail/libipmail/crypto/identity_list.go:64 +0x35
ipmail/gui/fyne_views.MakeMessageComposer.func1()
        D:/Random/ipmail/gui/fyne_views/message_composer.go:42 +0x2a2
fyne.io/fyne/widget.(*Button).Tapped(0xc001ac16b0, 0xc0035d5420)
        C:/Users/David/go/pkg/mod/fyne.io/[email protected]/widget/button.go:192 +0xaa
fyne.io/fyne/internal/driver/glfw.(*window).mouseClicked.func5()
        C:/Users/David/go/pkg/mod/fyne.io/[email protected]/internal/driver/glfw/window.go:734 +0x3f
fyne.io/fyne/internal/driver/glfw.(*window).runEventQueue(0xc001cde1a0)
        C:/Users/David/go/pkg/mod/fyne.io/[email protected]/internal/driver/glfw/window.go:1152 +0x83
created by fyne.io/fyne/internal/driver/glfw.(*gLDriver).createWindow.func1
        C:/Users/David/go/pkg/mod/fyne.io/[email protected]/internal/driver/glfw/window.go:1176 +0x10d

Add an easy method of transferring user data to another device

Problem

It is unlikely that users have only one device these days, so making a secure method of sharing user data to a new device would be wise. Currently, user data can be manually imported by copying the user data directory from one device to another, but that can be hard for non-technical users and can be impossible on mobile phones.

Potential Solutions

  • Have QR code sign-in (like Discord)
  • Use Multicast DNS to help share data over a local network

Crash after First Run (Windows 10)

Problem

After running for the first time on Windows 10 and closing the main window before the settings window, opening IPMail doesn't do anything. There isn't even output in the command line.

Add forwarding service to ensure messages get delivered when users go offline

Problem

When users aren't subscribed to the IPFS pubsub topic "Mail" and aren't processing each message that is published on the topic, users will never receive those messages that could have been for them.

Potential Solution

  1. User A encrypts a message meant for User B
  2. User A encrypts the already encrypted message for a forwarding server
  3. User A sends the message for the forwarding server
  4. The forwarding server periodically sends the message meant for User B
  5. User B receives the message successfully
  6. User B encrypts the signer (User A) and ID of the received message for the forwarding server and sends it
  7. The forwarding server receives the request and stops sending User A's message to User B on the basis of only User B can figure out User A sent the message using the specific ID given by the forwarding server
  8. The forwarding server signs and encrypts the encrypted message meant for User B and sends that to User A periodically
  9. User A gets confirmation that User B successfully received the message
  10. User A signs and encrypts the encrypted message meant for User B and the ID from the confirmation message and sends it to the forwarding server
  11. The forwarding server stops sending the confirmation message to User A

Pros

  • No intervention from User A after the message is sent
  • User B will always eventually get the message
  • The forwarding server does not know the content of the message
  • The forwarding server does not know who the message is being sent to (unless User B signs the request to stop the forwarding server to stop sending the message)
  • The forwarding server doesn't need to store a lot of data if only the hash for the message from User A to User B is transferred

Cons

  • The forwarding server knows User A is sending a message at a specific time
  • Contributes a lot of network traffic when scaled up
  • CPU intensive when scaled up

General Notes

  • Network bandwidth intensive (depending on forwarding interval)
  • Light storage use
  • Can be compatible with Filecoin storage network

Further Research to be Done

  • Decentralized hashmap (IPLD spec) for mapping users (like User A) to a (IPLD) list of unreceived and unconfirmed messages
  • Decentralized database (orbitdb) instead of hashmap?
  • Does Pubsub inherently cause high network traffic/congestion

Add Read Receipts for Sent Messages

Problem

When messages are sent, there is no way to tell if the message has gotten to its destination.

Potential Solution

See #2 Potential Solution part 6

Add timeout for adding a contact that doesn't exist/can't be found

Problem

In cases where the content isn'ton the IPFS network, a contact request shouldn't make the user interface hang.

Potential Solution(s)

  1. Add a timeout for finding the contact information then cancel it afterwards
  2. Make the search for the contact information asynchonous

Consider other more mature encryption libraries

Problem

The current OpenPGP implementation is basically the development branch of the Go built-in crypto package. On top of that I've had to switch over to my own branch of that, since they haven't consider my patch to fix encryption using a deserialized Entity making it not ideal from a security stand point.

Potential Alternatives

  • OpenSSL
  • opengpg

Add system tray support

Problem

Most email clients have some kind of system tray icon to help with user interaction. It would be nice to add such a feature to IPMail, too.

Potential Solutions

I found this go library that might be useful.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.