Merge pull request 'revert DeletePeer having a return value; match other app apis with message returns; full app client/service support' (#368) from dan/cwtch:delete_profile into delete_profile
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details

Reviewed-on: #368
This commit is contained in:
Sarah Jamie Lewis 2021-06-14 16:55:51 -07:00
commit f3f5dc6e9a
4 changed files with 33 additions and 18 deletions

View File

@ -44,7 +44,7 @@ type Application interface {
LoadProfiles(password string) LoadProfiles(password string)
CreatePeer(name string, password string) CreatePeer(name string, password string)
CreateTaggedPeer(name string, password string, tag string) CreateTaggedPeer(name string, password string, tag string)
DeletePeer(onion string, currentPassword string) bool DeletePeer(onion string, currentPassword string)
AddPeerPlugin(onion string, pluginID plugins.PluginID) AddPeerPlugin(onion string, pluginID plugins.PluginID)
ChangePeerPassword(onion, oldpass, newpass string) ChangePeerPassword(onion, oldpass, newpass string)
LaunchPeers() LaunchPeers()
@ -142,7 +142,7 @@ func (app *application) CreatePeer(name string, password string) {
app.CreateTaggedPeer(name, password, "") app.CreateTaggedPeer(name, password, "")
} }
func (app *application) DeletePeer(onion string, password string) bool { func (app *application) DeletePeer(onion string, password string) {
log.Infof("DeletePeer called on %v\n", onion) log.Infof("DeletePeer called on %v\n", onion)
app.appmutex.Lock() app.appmutex.Lock()
defer app.appmutex.Unlock() defer app.appmutex.Unlock()
@ -165,9 +165,10 @@ func (app *application) DeletePeer(onion string, password string) bool {
app.applicationCore.DeletePeer(onion) app.applicationCore.DeletePeer(onion)
log.Debugf("Delete peer for %v Done\n", onion) log.Debugf("Delete peer for %v Done\n", onion)
return true app.appBus.Publish(event.NewEventList(event.PeerDeleted, event.Identity, onion))
return
} }
return false app.appBus.Publish(event.NewEventList(event.AppError, event.Error, event.PasswordMatchError, event.Identity, onion))
} }
func (app *application) ChangePeerPassword(onion, oldpass, newpass string) { func (app *application) ChangePeerPassword(onion, oldpass, newpass string) {

View File

@ -47,7 +47,7 @@ func (ac *applicationClient) handleEvent(ev *event.Event) {
reload := ev.Data[event.Status] == event.StorageRunning reload := ev.Data[event.Status] == event.StorageRunning
created := ev.Data[event.Created] created := ev.Data[event.Created]
ac.newPeer(localID, key, salt, reload, created) ac.newPeer(localID, key, salt, reload, created)
case event.DeletePeer: case event.PeerDeleted:
onion := ev.Data[event.Identity] onion := ev.Data[event.Identity]
ac.handleDeletedPeer(onion) ac.handleDeletedPeer(onion)
case event.PeerError: case event.PeerError:
@ -113,11 +113,9 @@ func (ac *applicationClient) CreateTaggedPeer(name, password, tag string) {
} }
// DeletePeer messages the service to delete a peer // DeletePeer messages the service to delete a peer
func (ac *applicationClient) DeletePeer(onion string, password string) bool { func (ac *applicationClient) DeletePeer(onion string, password string) {
message := event.IPCMessage{Dest: DestApp, Message: event.NewEvent(event.DeletePeer, map[event.Field]string{event.Identity: onion, event.Password: password})} message := event.IPCMessage{Dest: DestApp, Message: event.NewEvent(event.DeletePeer, map[event.Field]string{event.Identity: onion, event.Password: password})}
ac.bridge.Write(&message) ac.bridge.Write(&message)
// This return value is a lie...
return true
} }
func (ac *applicationClient) ChangePeerPassword(onion, oldpass, newpass string) { func (ac *applicationClient) ChangePeerPassword(onion, oldpass, newpass string) {
@ -133,6 +131,7 @@ func (ac *applicationClient) handleDeletedPeer(onion string) {
ac.eventBuses[onion].Publish(event.NewEventList(event.ShutdownPeer, event.Identity, onion)) ac.eventBuses[onion].Publish(event.NewEventList(event.ShutdownPeer, event.Identity, onion))
ac.applicationCore.DeletePeer(onion) ac.applicationCore.DeletePeer(onion)
ac.appBus.Publish(event.NewEventList(event.PeerDeleted, event.Identity, onion))
} }
func (ac *applicationClient) AddPeerPlugin(onion string, pluginID plugins.PluginID) { func (ac *applicationClient) AddPeerPlugin(onion string, pluginID plugins.PluginID) {

View File

@ -52,7 +52,8 @@ func (as *applicationService) handleEvent(ev *event.Event) {
as.createPeer(profileName, password, tag) as.createPeer(profileName, password, tag)
case event.DeletePeer: case event.DeletePeer:
onion := ev.Data[event.Identity] onion := ev.Data[event.Identity]
as.deletePeer(onion) password := ev.Data[event.Password]
as.deletePeer(onion, password)
message := event.IPCMessage{Dest: DestApp, Message: *ev} message := event.IPCMessage{Dest: DestApp, Message: *ev}
as.bridge.Write(&message) as.bridge.Write(&message)
@ -164,21 +165,32 @@ func (as *applicationService) getACNStatusHandler() func(int, string) {
} }
} }
func (as *applicationService) deletePeer(onion string) { func (as *applicationService) deletePeer(onion, password string) {
as.asmutex.Lock() as.asmutex.Lock()
defer as.asmutex.Unlock() defer as.asmutex.Unlock()
as.appletPlugins.ShutdownPeer(onion) if as.storage[onion].CheckPassword(password) {
as.plugins.Delete(onion) as.appletPlugins.ShutdownPeer(onion)
as.plugins.Delete(onion)
as.engines[onion].Shutdown() as.engines[onion].Shutdown()
delete(as.engines, onion) delete(as.engines, onion)
as.storage[onion].Shutdown() as.storage[onion].Shutdown()
as.storage[onion].Delete() as.storage[onion].Delete()
delete(as.storage, onion) delete(as.storage, onion)
as.applicationCore.DeletePeer(onion) as.eventBuses[onion].Publish(event.NewEventList(event.ShutdownPeer, event.Identity, onion))
as.applicationCore.DeletePeer(onion)
log.Debugf("Delete peer for %v Done\n", onion)
message := event.IPCMessage{Dest: DestApp, Message: event.NewEventList(event.PeerDeleted, event.Identity, onion)}
as.bridge.Write(&message)
return
}
message := event.IPCMessage{Dest: DestApp, Message: event.NewEventList(event.AppError, event.Error, event.PasswordMatchError, event.Identity, onion)}
as.bridge.Write(&message)
} }
func (as *applicationService) ShutdownPeer(onion string) { func (as *applicationService) ShutdownPeer(onion string) {

View File

@ -194,6 +194,8 @@ const (
// Identity(onion) // Identity(onion)
DeletePeer = Type("DeletePeer") DeletePeer = Type("DeletePeer")
// Identity(onion)
PeerDeleted = Type("PeerDeleted")
// Identity(onion), Data(pluginID) // Identity(onion), Data(pluginID)
AddPeerPlugin = Type("AddPeerPlugin") AddPeerPlugin = Type("AddPeerPlugin")
@ -312,6 +314,7 @@ const (
// Defining Common errors // Defining Common errors
const ( const (
AppErrLoaded0 = "Loaded 0 profiles" AppErrLoaded0 = "Loaded 0 profiles"
PasswordMatchError = "Password did not match"
) )
// Values to be suplied in event.NewPeer for Status // Values to be suplied in event.NewPeer for Status