Skip to content

Commit

Permalink
Merge pull request #982 from Infomaniak/feat-ask-password
Browse files Browse the repository at this point in the history
feat: Ask password
  • Loading branch information
PhilippeWeidmann committed Sep 14, 2023
2 parents 8d1e975 + 7038f95 commit fb244c0
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 18 deletions.
60 changes: 42 additions & 18 deletions Mail/Views/Unavailable Mailbox/UpdateMailboxPasswordView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ struct UpdateMailboxPasswordView: View {
@State private var isShowingError = false
@State private var isLoading = false
@State private var isShowingDetachMailboxAlertView = false
@State private var snackBarAwareModifier = SnackBarAwareModifier(inset: 0)

private var disableButton: Bool {
return isLoading || showPasswordLengthWarning
Expand All @@ -51,13 +52,17 @@ struct UpdateMailboxPasswordView: View {
.textStyle(.bodySecondary)
Text(MailResourcesStrings.Localizable.enterPasswordDescription2(mailbox.email))
.textStyle(.bodySecondary)
MailButton(label: MailResourcesStrings.Localizable.buttonDetachMailbox) {
matomo.track(eventWithCategory: .invalidPasswordMailbox, name: "detachMailbox")
isShowingDetachMailboxAlertView = true

HStack(spacing: UIPadding.verySmall) {
Text(MailResourcesStrings.Localizable.enterPasswordOrDescription)
.textStyle(.bodySecondary)
MailButton(label: MailResourcesStrings.Localizable.buttonDetachMailbox) {
matomo.track(eventWithCategory: .invalidPasswordMailbox, name: "detachMailbox")
isShowingDetachMailboxAlertView = true
}
.mailButtonStyle(.link)
.disabled(isLoading)
}
.mailButtonStyle(.link)
.mailButtonMinimizeHeight(true)
.disabled(isLoading)
}

VStack(alignment: .leading) {
Expand Down Expand Up @@ -87,20 +92,30 @@ struct UpdateMailboxPasswordView: View {
}
.padding()
.safeAreaInset(edge: .bottom) {
MailButton(label: MailResourcesStrings.Localizable.buttonConfirm) {
matomo.track(eventWithCategory: .invalidPasswordMailbox, name: "updatePassword")
updateMailboxPassword()
}
.mailButtonFullWidth(true)
.disabled(disableButton)
.padding(value: .medium)
VStack(spacing: UIPadding.medium) {
MailButton(label: MailResourcesStrings.Localizable.buttonConfirm) {
matomo.track(eventWithCategory: .invalidPasswordMailbox, name: "updatePassword")
updateMailboxPassword()
}
.mailButtonFullWidth(true)
.disabled(disableButton)

MailButton(label: MailResourcesStrings.Localizable.buttonRequestPassword) {
// Empty for now, WIP
MailButton(label: MailResourcesStrings.Localizable.buttonRequestPassword) {
matomo.track(eventWithCategory: .invalidPasswordMailbox, name: "requestPassword")
askMailboxPassword()
}
.mailButtonStyle(.link)
.mailButtonFullWidth(true)
}
.mailButtonStyle(.link)
.mailButtonFullWidth(true)
.hidden()
.padding(.horizontal, value: .medium)
.padding(.bottom, value: .regular)
}
.modifier(snackBarAwareModifier)
.overlay {
ViewGeometry(key: BottomSafeAreaKey.self, property: \.safeAreaInsets.bottom)
}
.onPreferenceChange(BottomSafeAreaKey.self) { value in
snackBarAwareModifier.inset = value
}
.onChange(of: updatedMailboxPassword) { newValue in
if !newValue.isEmpty {
Expand Down Expand Up @@ -136,6 +151,15 @@ struct UpdateMailboxPasswordView: View {
isLoading = false
}
}

func askMailboxPassword() {
Task {
await tryOrDisplayError {
try await accountManager.askMailboxPassword(mailbox: mailbox)
snackbarPresenter.show(message: MailResourcesStrings.Localizable.snackbarMailboxPasswordRequested)
}
}
}
}

struct UpdateMailboxPasswordView_Previews: PreviewProvider {
Expand Down
4 changes: 4 additions & 0 deletions MailCore/API/Endpoint.swift
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ public extension Endpoint {
.appending(path: "/securedProxy/cache/invalidation/profile/workspace/mailbox/\(mailboxId)/update_password")
}

static func askMailboxPassword(hostingId: Int, mailboxName: String) -> Endpoint {
return .baseManager.appending(path: "/\(hostingId)/mailboxes/\(mailboxName)/ask_password")
}

static func detachMailbox(mailboxId: Int) -> Endpoint {
return addMailbox.appending(path: "/\(mailboxId)")
}
Expand Down
7 changes: 7 additions & 0 deletions MailCore/API/MailApiFetcher/MailApiFetcher+Common.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ public extension MailApiFetcher {
)).data
}

func askMailboxPassword(mailbox: Mailbox) async throws -> Bool {
try await perform(request: authenticatedRequest(
.askMailboxPassword(hostingId: mailbox.hostingId, mailboxName: mailbox.mailbox),
method: .post
)).data
}

func detachMailbox(mailbox: Mailbox) async throws -> Bool {
try await perform(request: authenticatedRequest(.detachMailbox(mailboxId: mailbox.mailboxId), method: .delete)).data
}
Expand Down
5 changes: 5 additions & 0 deletions MailCore/Cache/AccountManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,11 @@ public final class AccountManager: RefreshTokenDelegate, ObservableObject {
try await updateUser(for: currentAccount)
}

public func askMailboxPassword(mailbox: Mailbox) async throws {
guard let apiFetcher = currentApiFetcher else { return }
_ = try await apiFetcher.askMailboxPassword(mailbox: mailbox)
}

public func detachMailbox(mailbox: Mailbox) async throws {
guard let apiFetcher = currentApiFetcher else { return }
_ = try await apiFetcher.detachMailbox(mailbox: mailbox)
Expand Down

0 comments on commit fb244c0

Please sign in to comment.