Skip to content

Commit

Permalink
Merge pull request #14 from IBM-Swift/doErrorChecksFirst
Browse files Browse the repository at this point in the history
Rename some API params for consistency/clarity
  • Loading branch information
quanvo87 authored May 30, 2017
2 parents 60b8a89 + 397de9d commit cb5f6b4
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 30 deletions.
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import PackageDescription

#if os(Linux) && !swift(>=3.1.1)
print("Please use Swift >=3.1.1.")
fatalError("Please use Swift >=3.1.1.")
#else
let package = Package(
name: "SwiftSMTP",
Expand Down
14 changes: 7 additions & 7 deletions Sources/Login.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ typealias LoginCallback = ((SMTPSocket?, Error?) -> Void)?

class Login {
fileprivate let hostname: String
fileprivate let user: String
fileprivate let email: String
fileprivate let password: String
fileprivate let port: Port
fileprivate let ssl: SSL?
Expand All @@ -35,9 +35,9 @@ class Login {
fileprivate var callback: LoginCallback
fileprivate var socket: SMTPSocket

init(hostname: String, user: String, password: String, port: Port, ssl: SSL?, authMethods: [AuthMethod], domainName: String, accessToken: String?, timeout: Int, callback: LoginCallback) throws {
init(hostname: String, email: String, password: String, port: Port, ssl: SSL?, authMethods: [AuthMethod], domainName: String, accessToken: String?, timeout: Int, callback: LoginCallback) throws {
self.hostname = hostname
self.user = user
self.email = email
self.password = password
self.port = port
self.ssl = ssl
Expand Down Expand Up @@ -142,25 +142,25 @@ private extension Login {
private extension Login {
func loginCramMD5() throws {
let challenge = try auth(authMethod: .cramMD5, credentials: nil).message
try authPassword(try AuthEncoder.cramMD5(challenge: challenge, user: user, password: password))
try authPassword(try AuthEncoder.cramMD5(challenge: challenge, user: email, password: password))
}

func loginLogin() throws {
_ = try auth(authMethod: .login, credentials: nil)
let credentials = AuthEncoder.login(user: user, password: password)
let credentials = AuthEncoder.login(user: email, password: password)
try authUser(credentials.encodedUser)
try authPassword(credentials.encodedPassword)
}

func loginPlain() throws {
_ = try auth(authMethod: .plain, credentials: AuthEncoder.plain(user: user, password: password))
_ = try auth(authMethod: .plain, credentials: AuthEncoder.plain(user: email, password: password))
}

func loginXOAuth2() throws {
guard let accessToken = accessToken else {
throw SMTPError(.noAccessToken)
}
_ = try auth(authMethod: .xoauth2, credentials: AuthEncoder.xoauth2(user: user, accessToken: accessToken))
_ = try auth(authMethod: .xoauth2, credentials: AuthEncoder.xoauth2(user: email, accessToken: accessToken))
}
}

Expand Down
8 changes: 4 additions & 4 deletions Sources/SMTP.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public enum AuthMethod: String {
/// Represents a handle to connect to and send emails to an SMTP server.
public struct SMTP {
private let hostname: String
private let user: String
private let email: String
private let password: String
private let port: Port
private let ssl: SSL?
Expand Down Expand Up @@ -76,10 +76,10 @@ public struct SMTP {
/// Some servers like Gmail support IPv6, and if your network does not,
/// you will first attempt to connect via IPv6, then timeout, and fall
/// back to IPv4. You can avoid this by disabling IPv6 on your machine.
public init(hostname: String, user: String, password: String, port: Port = Ports.tls.rawValue, ssl: SSL? = nil, authMethods: [AuthMethod] = AuthMethod.defaultAuthMethods,
public init(hostname: String, email: String, password: String, port: Port = Ports.tls.rawValue, ssl: SSL? = nil, authMethods: [AuthMethod] = AuthMethod.defaultAuthMethods,
domainName: String = "localhost", accessToken: String? = nil, timeout: Int = 10) {
self.hostname = hostname
self.user = user
self.email = email
self.password = password
self.port = port
self.ssl = ssl
Expand Down Expand Up @@ -139,7 +139,7 @@ public struct SMTP {
public func send(_ mails: [Mail], progress: Progress = nil, completion: Completion = nil) {
do {
try Login(hostname: hostname,
user: user,
email: email,
password: password,
port: port,
ssl: ssl,
Expand Down
10 changes: 5 additions & 5 deletions Tests/SwiftSMTPTests/Constant.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import SwiftSMTP
let testDuration: Double = 20

let hostname = "smtp.gmail.com"
let user = "kiturasmtp" + Int.randomEmailNum(4) + "@gmail.com"
let user2 = "kiturasmtp@gmail.com"
let email = "kiturasmtp" + Int.randomEmailNum(4) + "@gmail.com"
let email2 = "kiturasmtp@gmail.com"
let password = "ibm12345"
let port = Ports.tls.rawValue
let secure = true
Expand All @@ -51,9 +51,9 @@ let root = #file
let ssl = SSL(withChainFilePath: cert, withPassword: certPassword)
#endif

let smtp = SMTP(hostname: hostname, user: user, password: password, ssl: ssl)
let from = User(name: "Dr. Light", email: user)
let to = User(name: "Megaman", email: user2)
let smtp = SMTP(hostname: hostname, email: email, password: password, ssl: ssl)
let from = User(name: "Dr. Light", email: email)
let to = User(name: "Megaman", email: email2)
let to2 = User(name: "Roll", email: "kiturasmtp2@gmail.com")
let text = "Humans and robots living together in harmony and equality. That was my ultimate wish."
let html = "<html><img src=\"http://vignette2.wikia.nocookie.net/megaman/images/4/40/StH250RobotMasters.jpg/revision/latest?cb=20130711161323\"/></html>"
Expand Down
6 changes: 3 additions & 3 deletions Tests/SwiftSMTPTests/TestDataSender.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class TestDataSender: XCTestCase {
var sender: Sender?

try Login(hostname: hostname,
user: user,
email: email,
password: password,
port: port,
ssl: ssl,
Expand Down Expand Up @@ -104,7 +104,7 @@ class TestDataSender: XCTestCase {
var sender: Sender?

try Login(hostname: hostname,
user: user,
email: email,
password: password,
port: port,
ssl: ssl,
Expand Down Expand Up @@ -157,7 +157,7 @@ class TestDataSender: XCTestCase {
var sender: Sender?

try Login(hostname: hostname,
user: user,
email: email,
password: password,
port: port,
ssl: ssl,
Expand Down
10 changes: 5 additions & 5 deletions Tests/SwiftSMTPTests/TestLogin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ class TestLogin: XCTestCase {

func testBadCredentials() throws {
let x = expectation(description: "Fail login with bad credentials.")
try Login(hostname: hostname, user: user, password: "", port: port, ssl: ssl, authMethods: authMethods, domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
try Login(hostname: hostname, email: email, password: "", port: port, ssl: ssl, authMethods: authMethods, domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
if let err = err as? SMTPError, case .badResponse = err {
x.fulfill()
} else {
Expand All @@ -40,7 +40,7 @@ class TestLogin: XCTestCase {

func testBadPort() throws {
let x = expectation(description: "Login timeout because bad port.")
try Login(hostname: hostname, user: user, password: password, port: 1, ssl: ssl, authMethods: authMethods, domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
try Login(hostname: hostname, email: email, password: password, port: 1, ssl: ssl, authMethods: authMethods, domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
if let err = err as? SMTPError, case .couldNotConnectToServer(_, _) = err {
x.fulfill()
} else {
Expand All @@ -52,7 +52,7 @@ class TestLogin: XCTestCase {

func testLogin() throws {
let x = expectation(description: "Login with Login auth.")
try Login(hostname: hostname, user: user, password: password, port: port, ssl: ssl, authMethods: [.login], domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
try Login(hostname: hostname, email: email, password: password, port: port, ssl: ssl, authMethods: [.login], domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
XCTAssertNil(err, String(describing: err))
x.fulfill()
}.login()
Expand All @@ -61,7 +61,7 @@ class TestLogin: XCTestCase {

func testPlain() throws {
let x = expectation(description: "Login with Plain auth.")
try Login(hostname: hostname, user: user, password: password, port: port, ssl: ssl, authMethods: [.plain], domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
try Login(hostname: hostname, email: email, password: password, port: port, ssl: ssl, authMethods: [.plain], domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
XCTAssertNil(err, String(describing: err))
x.fulfill()
}.login()
Expand All @@ -70,7 +70,7 @@ class TestLogin: XCTestCase {

func testPort0() throws {
let x = expectation(description: "Fail login because port can't be 0.")
try Login(hostname: hostname, user: user, password: password, port: 0, ssl: ssl, authMethods: authMethods, domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
try Login(hostname: hostname, email: email, password: password, port: 0, ssl: ssl, authMethods: authMethods, domainName: domainName, accessToken: nil, timeout: timeout) { (_, err) in
XCTAssertNotNil(err, "Should get error here, but error was nil.")
x.fulfill()
}.login()
Expand Down
10 changes: 5 additions & 5 deletions Tests/SwiftSMTPTests/TestSender.swift
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ class TestSender: XCTestCase {
}

func testIsValidEmail() throws {
XCTAssert(try user.isValidEmail(), "\(user) should be a valid email.")
XCTAssert(try email.isValidEmail(), "\(email) should be a valid email.")
XCTAssertFalse(try "".isValidEmail(), "Blank email should be in invalid email.")
XCTAssertFalse(try "a".isValidEmail(), "`a` should be in invalid email.")
XCTAssertFalse(try "@gmail.com".isValidEmail(), "`@gmail.com` should be in invalid email.")
XCTAssertFalse(try "user@.com".isValidEmail(), "`user@.com` should be in invalid email.")
XCTAssertFalse(try "user@user".isValidEmail(), "`user@user` should be in invalid email.")
XCTAssertFalse(try "user@user.a".isValidEmail(), "`user@user.a` should be in invalid email.")
XCTAssertFalse(try "user@user.".isValidEmail(), "`user@user.` should be in invalid email.")
XCTAssertFalse(try "email@.com".isValidEmail(), "`email@.com` should be in invalid email.")
XCTAssertFalse(try "email@email".isValidEmail(), "`email@email` should be in invalid email.")
XCTAssertFalse(try "email@email.a".isValidEmail(), "`email@email.a` should be in invalid email.")
XCTAssertFalse(try "email@email.".isValidEmail(), "`email@email.` should be in invalid email.")
}

func testSendMail() {
Expand Down

0 comments on commit cb5f6b4

Please sign in to comment.