forked from reacherhq/check-if-email-exists
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(core): Add check gravatar image (reacherhq#1188)
* feat(core): Add check gravatar image * Add missing changes * Fix compilation * Fix tests * Apply PR feedback * Don't panic
- Loading branch information
Showing
12 changed files
with
180 additions
and
30 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,8 +22,8 @@ use serde_json; | |
use warp::http::StatusCode; | ||
use warp::test::request; | ||
|
||
const FOO_BAR_RESPONSE: &str = r#"{"input":"foo@bar","is_reachable":"invalid","misc":{"is_disposable":false,"is_role_account":false},"mx":{"accepts_mail":false,"records":[]},"smtp":{"can_connect_smtp":false,"has_full_inbox":false,"is_catch_all":false,"is_deliverable":false,"is_disabled":false},"syntax":{"address":null,"domain":"","is_valid_syntax":false,"username":""}}"#; | ||
const FOO_BAR_BAZ_RESPONSE: &str = r#"{"input":"[email protected]","is_reachable":"invalid","misc":{"is_disposable":false,"is_role_account":false},"mx":{"accepts_mail":false,"records":[]},"smtp":{"can_connect_smtp":false,"has_full_inbox":false,"is_catch_all":false,"is_deliverable":false,"is_disabled":false},"syntax":{"address":"[email protected]","domain":"bar.baz","is_valid_syntax":true,"username":"foo"}}"#; | ||
const FOO_BAR_RESPONSE: &str = r#"{"input":"foo@bar","is_reachable":"invalid","misc":{"is_disposable":false,"is_role_account":false,"gravatar_url":null},"mx":{"accepts_mail":false,"records":[]},"smtp":{"can_connect_smtp":false,"has_full_inbox":false,"is_catch_all":false,"is_deliverable":false,"is_disabled":false},"syntax":{"address":null,"domain":"","is_valid_syntax":false,"username":""}}"#; | ||
const FOO_BAR_BAZ_RESPONSE: &str = r#"{"input":"[email protected]","is_reachable":"invalid","misc":{"is_disposable":false,"is_role_account":false,"gravatar_url":null},"mx":{"accepts_mail":false,"records":[]},"smtp":{"can_connect_smtp":false,"has_full_inbox":false,"is_catch_all":false,"is_deliverable":false,"is_disabled":false},"syntax":{"address":"[email protected]","domain":"bar.baz","is_valid_syntax":true,"username":"foo"}}"#; | ||
|
||
#[tokio::test] | ||
async fn test_input_foo_bar() { | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -25,6 +25,9 @@ ARGS: | |
<TO_EMAIL> The email to check | ||
|
||
OPTIONS: | ||
--check-gravatar <CHECK_GRAVATAR> | ||
Whether to check for an existing gravatar image [env: CHECK_GRAVATAR=] [default: false] | ||
|
||
--from-email <FROM_EMAIL> | ||
The email to use in the `MAIL FROM:` SMTP command [env: FROM_EMAIL=] [default: | ||
[email protected]] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
// check-if-email-exists | ||
// Copyright (C) 2018-2022 Reacher | ||
|
||
// This program is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU Affero General Public License as published | ||
// by the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
|
||
// This program is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU Affero General Public License for more details. | ||
|
||
// You should have received a copy of the GNU Affero General Public License | ||
// along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
|
||
use crate::util::constants::LOG_TARGET; | ||
use md5; | ||
use md5::Digest; | ||
|
||
const API_BASE_URL: &str = "https://www.gravatar.com/avatar/"; | ||
|
||
pub async fn check_gravatar(to_email: &str) -> Option<String> { | ||
let client = reqwest::Client::new(); | ||
|
||
let mail_hash: Digest = md5::compute(to_email); | ||
|
||
let url = format!("{}{:x}", API_BASE_URL, mail_hash); | ||
|
||
log::debug!( | ||
target: LOG_TARGET, | ||
"[email={}] Request Gravatar API with url: {:?}", | ||
to_email, | ||
url | ||
); | ||
|
||
let response = client | ||
.get(&url) | ||
// This option is necessary to return a NotFound exception instead of the default gravatar | ||
// image if none for the given email is found. | ||
.query(&[("d", "404")]) | ||
.send() | ||
.await; | ||
|
||
log::debug!( | ||
target: LOG_TARGET, | ||
"[email={}] Gravatar response: {:?}", | ||
to_email, | ||
response | ||
); | ||
|
||
let response = match response { | ||
Ok(response) => response, | ||
Err(_) => return None, | ||
}; | ||
|
||
match response.status() { | ||
reqwest::StatusCode::OK => Some(url), | ||
_ => None, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.