123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- //
- // DSignatureCreateInfoViewController.swift
- // PDF Reader Pro Edition
- //
- // Created by Niehaoyu on 2023/9/28.
- //
- import Cocoa
- class DSignatureCreateInfoViewController: NSViewController, NSTextFieldDelegate {
- @IBOutlet weak var contendView: NSView!
-
- @IBOutlet weak var titleLabel: NSTextField!
- @IBOutlet weak var nameLabel: NSTextField!
- @IBOutlet weak var organizationLabel: NSTextField!
- @IBOutlet weak var organizationUnitLabel: NSTextField!
- @IBOutlet weak var emailLabel: NSTextField!
- @IBOutlet weak var countryLabel: NSTextField!
- @IBOutlet weak var purposeLabel: NSTextField!
-
- @IBOutlet weak var nameTextFiled: NSTextField!
- @IBOutlet weak var organizationTextFiled: NSTextField!
- @IBOutlet weak var organizationUnitTextFiled: NSTextField!
- @IBOutlet weak var emailTextFiled: NSTextField!
- @IBOutlet weak var countryButton: NSPopUpButton!
- @IBOutlet weak var purposeButton: NSPopUpButton!
- @IBOutlet weak var errorLabel: NSTextField!
-
- @IBOutlet weak var promptBox: NSBox!
- @IBOutlet var promptTextView: NSTextView!
-
- @IBOutlet weak var previousStepButton: NSButton!
- @IBOutlet weak var continueButton: NSButton!
- @IBOutlet weak var textFieldLeftConst: NSLayoutConstraint!
- @IBOutlet weak var countryBtnTopConst: NSLayoutConstraint!
-
-
- // @property(nonatomic) IBOutlet NSLayoutConstraint *bottomOffset;
- //
- // @property(nonatomic) IBOutlet NSLayoutConstraint *leftBottomOffset;
-
- var codes: [String] = []
- var actionBlock: ((_ createVC:DSignatureCreateInfoViewController, _ action:DSignatureActionType, _ cer:NSDictionary, _ certUsage:Int)->Void)?
-
-
- override func viewWillAppear() {
- super.viewWillAppear()
-
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- // Do view setup here.
-
- self.updateButtonState()
- self.errorLabel.isHidden = true
-
- self.nameTextFiled.delegate = self
- self.emailTextFiled.delegate = self
- self.organizationTextFiled.delegate = self
- self.organizationUnitTextFiled.delegate = self
-
- self.purposeButton.addItems(withTitles: [NSLocalizedString("Digital Signature", comment: ""),
- NSLocalizedString("Data Encryption", comment: ""),
- NSLocalizedString("Digital Signatures and Data Encryption", comment: "")])
-
- self.reloadData()
-
- self.nameTextFiled.wantsLayer = true
- self.organizationTextFiled.wantsLayer = true
- self.organizationUnitTextFiled.wantsLayer = true
- self.emailTextFiled.wantsLayer = true
-
- self.nameTextFiled.layer?.borderWidth = 1.0
- self.organizationTextFiled.layer?.borderWidth = 1.0
- self.organizationUnitTextFiled.layer?.borderWidth = 1.0
- self.emailTextFiled.layer?.borderWidth = 1.0
-
- self.nameTextFiled.layer?.cornerRadius = 5.0
- self.organizationTextFiled.layer?.cornerRadius = 5.0
- self.organizationUnitTextFiled.layer?.cornerRadius = 5.0
- self.emailTextFiled.layer?.cornerRadius = 5.0
-
- self.organizationTextFiled.layer?.borderColor = NSColor(red: 2.0/255.0, green: 8.0/255.0, blue: 38.0/255.0, alpha: 0.15).cgColor
- self.organizationUnitTextFiled.layer?.borderColor = NSColor(red: 2.0/255.0, green: 8.0/255.0, blue: 38.0/255.0, alpha: 0.15).cgColor
-
- self.localizedLanguage()
-
- self.nameTextFiled.layer?.borderColor = NSColor.clear.cgColor
- self.emailTextFiled.layer?.borderColor = NSColor.clear.cgColor
- }
-
- func reloadData() {
-
- var countryCodes = NSLocale.isoCountryCodes
- self.codes = countryCodes
-
- var codes: [String] = []
- let localeID = NSLocale.current.identifier
- let components = NSLocale.components(fromLocaleIdentifier: localeID)
- let countryCode = components[NSLocale.Key.countryCode.rawValue]
-
- for countryCode in countryCodes {
- let identifier = NSLocale.localeIdentifier(fromComponents: [NSLocale.Key.countryCode.rawValue: countryCode])
- let local = NSLocale(localeIdentifier: localeID)
-
- let country = local.displayName(forKey: NSLocale.Key.identifier, value: identifier)
- codes.append(String(format: "%@ - %@", countryCode, (country ?? "")))
- }
-
- self.countryButton.addItems(withTitles: codes)
-
- for index in 0...countryCodes.count-1 {
- let cCode = countryCodes[index]
- if countryCode == cCode {
- self.countryButton.selectItem(at: index)
- }
- }
-
- let sud = UserDefaults.standard
- let loginName = NSFullUserName()
- if loginName.isEmpty == false {
- self.nameTextFiled.stringValue = loginName
- }
-
- self.organizationTextFiled.stringValue = sud.string(forKey: CAuthenticationDepartmentKey) ?? ""
- self.organizationUnitTextFiled.stringValue = sud.string(forKey: CAuthenticationCompanyNameKey) ?? ""
- self.emailTextFiled.stringValue = sud.string(forKey: CAuthenticationEmailAddressKey) ?? ""
-
- }
-
- func localizedLanguage() {
- self.titleLabel.stringValue = NSLocalizedString("Create a Self-signed Digital ID", comment: "")
-
- self.nameLabel.stringValue = NSLocalizedString("Name", comment: "")
- self.organizationLabel.stringValue = NSLocalizedString("Organization Name", comment: "")
- self.organizationUnitLabel.stringValue = NSLocalizedString("Organization Unit", comment: "")
- self.emailLabel.stringValue = NSLocalizedString("Email Address", comment: "")
- self.countryLabel.stringValue = NSLocalizedString("Country/Region", comment: "")
- self.purposeLabel.stringValue = NSLocalizedString("Purpose", comment: "")
-
- var maxLabelWidth = self.nameLabel.sizeThatFits(CGSize(width: 1000, height: self.nameLabel.frame.size.height)).width
- if self.organizationLabel.sizeThatFits(CGSize(width: 1000, height: self.organizationLabel.frame.size.height)).width > maxLabelWidth {
- maxLabelWidth = self.organizationLabel.sizeThatFits(CGSize(width: 1000, height: self.organizationLabel.frame.size.height)).width
- }
- if self.organizationUnitLabel.sizeThatFits(CGSize(width: 1000, height: self.organizationUnitLabel.frame.size.height)).width > maxLabelWidth {
- maxLabelWidth = self.organizationUnitLabel.sizeThatFits(CGSize(width: 1000, height: self.organizationUnitLabel.frame.size.height)).width
- }
- if self.emailLabel.sizeThatFits(CGSize(width: 1000, height: self.emailLabel.frame.size.height)).width > maxLabelWidth {
- maxLabelWidth = self.emailLabel.sizeThatFits(CGSize(width: 1000, height: self.emailLabel.frame.size.height)).width
- }
- if self.countryLabel.sizeThatFits(CGSize(width: 1000, height: self.countryLabel.frame.size.height)).width > maxLabelWidth {
- maxLabelWidth = self.countryLabel.sizeThatFits(CGSize(width: 1000, height: self.countryLabel.frame.size.height)).width
- }
- if self.purposeLabel.sizeThatFits(CGSize(width: 1000, height: self.purposeLabel.frame.size.height)).width > maxLabelWidth {
- maxLabelWidth = self.purposeLabel.sizeThatFits(CGSize(width: 1000, height: self.purposeLabel.frame.size.height)).width
- }
- if maxLabelWidth < 90 {
- maxLabelWidth = 90
- }
- self.textFieldLeftConst.constant = maxLabelWidth + 10
- self.promptTextView.string = String(format: "%@\n\n%@",NSLocalizedString("Enter the identity information to be used for creating the self-signed digital ID.", comment: ""), NSLocalizedString("Digital IDs that are self-signed by individuals do not provide the assurance that the identity information is valid. For this reason they may not be accepted in some use cases.", comment: ""))
- self.nameTextFiled.placeholderString = NSLocalizedString("Enter name...", comment: "");
- self.errorLabel.stringValue = NSLocalizedString("Email address is not valid", comment: "");
- self.organizationTextFiled.placeholderString = NSLocalizedString("Enter organization name...", comment: "");
- self.organizationUnitTextFiled.placeholderString = NSLocalizedString("Enter organization unit...", comment: "");
- self.emailTextFiled.placeholderString = NSLocalizedString("Enter Email", comment: "");
- self.previousStepButton.title = NSLocalizedString("Previous Step", comment: "");
- self.continueButton.title = NSLocalizedString("Continue", comment: "");
- }
-
- func validateEmail(_ strEmail: String) -> Bool {
- let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
- let emailTest: NSPredicate = NSPredicate(format: "SELF MATCHES %@", emailRegex)
- return emailTest.evaluate(with: strEmail)
- }
-
- func updateButtonState() {
- if self.nameTextFiled.stringValue.isEmpty == false && self.validateEmail(self.emailTextFiled.stringValue) {
- self.continueButton.isEnabled = true
- } else {
- self.continueButton.isEnabled = false
- }
- }
-
- func updateTextFiedState() {
- if self.nameTextFiled.stringValue.isEmpty == false {
- self.nameTextFiled.updateState(false)
- } else {
- self.nameTextFiled.updateState(true)
- }
-
- if self.emailTextFiled.stringValue.isEmpty == false {
- self.emailTextFiled.updateState(false)
- } else {
- self.emailTextFiled.updateState(true)
- }
- }
-
-
- //MARK: IBAction
-
- @IBAction func closeAction(_ sender: Any) {
- guard let callBack = self.actionBlock else {
- return
- }
- callBack(self, .cancel, NSDictionary(), 0)
- }
-
- @IBAction func previousAction(_ sender: Any) {
- guard let callBack = self.actionBlock else {
- return
- }
- callBack(self, .previousStep, NSDictionary(), 0)
- }
-
- @IBAction func continueAction(_ sender: Any) {
- self.view.window?.makeFirstResponder(nil)
-
- if self.validateEmail(self.emailTextFiled.stringValue) == false {
- return
- }
-
- let cer = NSMutableDictionary.init()
-
- cer.setValue(self.nameTextFiled.stringValue, forKey: "CN")
- cer.setObject(self.emailTextFiled.stringValue, forKey: "emailAddress" as NSCopying)
- if self.codes.count > self.countryButton.indexOfSelectedItem {
- let string = self.codes[self.countryButton.indexOfSelectedItem]
- cer.setValue(string, forKey: "C")
- }
- if self.organizationTextFiled.stringValue.isEmpty == false {
- cer.setValue(self.organizationTextFiled.stringValue, forKey: "O")
- }
- if self.organizationUnitTextFiled.stringValue.isEmpty == false {
- cer.setValue(self.organizationUnitTextFiled.stringValue, forKey: "OU")
- }
-
- let dex = self.purposeButton.index(of: self.purposeButton.selectedItem!)
-
- guard let callBack = self.actionBlock else {
- return
- }
- callBack(self, .confirm, cer, dex)
- }
-
- //MARK: NSTextFieldDelegate
- func controlTextDidChange(_ obj: Notification) {
- self.updateButtonState()
-
- if obj.object == nil {
- return
- }
-
- let textField = obj.object as! NSTextField
- if self.emailTextFiled.isEqual(textField) ||
- self.nameTextFiled.isEqual(textField) {
- if (textField.stringValue.isEmpty == false) {
- textField.updateState(false)
- } else {
- textField.updateState(true)
- }
- }
-
- if self.emailTextFiled.isEqual(textField) {
- self.errorLabel.isHidden = true
-
- self.countryBtnTopConst.constant = 16.0;
- }
- }
- func controlTextDidEndEditing(_ obj: Notification) {
- let fied: NSTextField = obj.object as! NSTextField;
- if fied.isEqual(self.emailTextFiled) {
- if self.validateEmail(self.emailTextFiled.stringValue) == true {
- self.errorLabel.isHidden = true
- self.countryBtnTopConst.constant = 16.0;
- } else {
- self.errorLabel.isHidden = false;
- self.countryBtnTopConst.constant = self.errorLabel.frame.size.height + 12;
- }
- }
- }
- }
|