Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 37 additions & 12 deletions LoopFollow/ViewControllers/SettingsViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import EventKit
import EventKitUI

class SettingsViewController: FormViewController {

var appStateController: AppStateController?
var tokenRow: TextRow?
var appStateController: AppStateController?
var statusLabelRow: LabelRow!

func showHideNSDetails() {
Expand All @@ -38,7 +38,6 @@ class SettingsViewController: FormViewController {

guard let nightscoutTab = self.tabBarController?.tabBar.items![3] else { return }
nightscoutTab.isEnabled = isEnabled

}

// Determine if the build is from TestFlight
Expand Down Expand Up @@ -131,18 +130,43 @@ class SettingsViewController: FormViewController {
return
}

// Normalize input: remove unwanted characters and lowercase
let filtered = value.replacingOccurrences(of: "[^A-Za-z0-9:/._-]", with: "", options: .regularExpression).lowercased()
var useTokenUrl = false

// Further clean-up: Remove trailing slashes
var cleanURL = filtered
while cleanURL.last == "/" {
cleanURL = String(cleanURL.dropLast())
// Attempt to handle special case: pasted URL including token
if let urlComponents = URLComponents(string: value), let queryItems = urlComponents.queryItems {
if let tokenItem = queryItems.first(where: { $0.name.lowercased() == "token" }) {
let tokenPattern = "^[^-\\s]+-[0-9a-fA-F]{16}$"
if let token = tokenItem.value, let _ = token.range(of: tokenPattern, options: .regularExpression) {
var baseComponents = urlComponents
baseComponents.queryItems = nil
if let baseURL = baseComponents.string {
UserDefaultsRepository.token.value = token
self.tokenRow?.value = token
self.tokenRow?.updateCell()

UserDefaultsRepository.url.value = baseURL
row.value = baseURL
row.updateCell()
useTokenUrl = true
}
}
}
}

// Set the cleaned URL
UserDefaultsRepository.url.value = cleanURL
row.value = cleanURL
if !useTokenUrl {
// Normalize input: remove unwanted characters and lowercase
let filtered = value.replacingOccurrences(of: "[^A-Za-z0-9:/._-]", with: "", options: .regularExpression).lowercased()

// Further clean-up: Remove trailing slashes
var cleanURL = filtered
while cleanURL.last == "/" {
cleanURL = String(cleanURL.dropLast())
}

UserDefaultsRepository.url.value = cleanURL
row.value = cleanURL
row.updateCell()
}

self.showHideNSDetails()
globalVariables.nsVerifiedAlert = 0
Expand All @@ -156,6 +180,7 @@ class SettingsViewController: FormViewController {
row.placeholder = "Leave blank if not using tokens"
row.value = UserDefaultsRepository.token.value
row.hidden = "$showNS == false"
self.tokenRow = row
}.cellSetup { (cell, row) in
cell.textField.autocorrectionType = .no
cell.textField.autocapitalizationType = .none
Expand Down