From 32fdeca2c7b040a9be31d6d57be4d4366e311ec3 Mon Sep 17 00:00:00 2001 From: febiarifin Date: Mon, 15 Apr 2024 16:01:49 +0700 Subject: [PATCH] Added unsiq.ac.id --- bin/main/swot/Compiler.kt | 28 ------------------- bin/main/swot/Swot.kt | 56 ------------------------------------- bin/test/swot/SwotTest.kt | 59 --------------------------------------- 3 files changed, 143 deletions(-) delete mode 100644 bin/main/swot/Compiler.kt delete mode 100644 bin/main/swot/Swot.kt delete mode 100644 bin/test/swot/SwotTest.kt diff --git a/bin/main/swot/Compiler.kt b/bin/main/swot/Compiler.kt deleted file mode 100644 index eb97b4669e..0000000000 --- a/bin/main/swot/Compiler.kt +++ /dev/null @@ -1,28 +0,0 @@ -package swot - -import java.io.File - -/** - * @author max - */ - -object CompilationState { - val stoplist = File("lib/domains/stoplist.txt").readLines().toHashSet() - val domains = File("lib/domains/tlds.txt").readLines().toHashSet() -} - -fun main(args: Array) { - val root = File("lib/domains") - root.walkTopDown().forEach { - if (it.isFile) { - val parts = it.toRelativeString(root).replace('\\', '/').removeSuffix(".txt").split('/').toList() - if (!checkSet(CompilationState.stoplist, parts) && !checkSet(CompilationState.domains, parts)) { - CompilationState.domains.add(parts.reversed().joinToString(".")) - } - } - } - - val stoplist = CompilationState.stoplist.map { "-$it" }.sorted().joinToString("\n") - File("out/artifacts").mkdirs() - File("out/artifacts/swot.txt").writeText(stoplist + "\n" + CompilationState.domains.sorted().joinToString("\n")) -} diff --git a/bin/main/swot/Swot.kt b/bin/main/swot/Swot.kt deleted file mode 100644 index f34ecb36fb..0000000000 --- a/bin/main/swot/Swot.kt +++ /dev/null @@ -1,56 +0,0 @@ -package swot - -import java.io.File - -fun isAcademic(email: String): Boolean { - val parts = domainParts(email) - return !isStoplisted(parts) && (isUnderTLD(parts) || findSchoolNames(parts).isNotEmpty()) -} - -fun findSchoolNames(emailOrDomain: String): List { - return findSchoolNames(domainParts(emailOrDomain)) -} - -fun isUnderTLD(parts: List): Boolean { - return checkSet(Resources.tlds, parts) -} - -fun isStoplisted(parts: List): Boolean { - return checkSet(Resources.stoplist, parts) -} - -private object Resources { - val tlds = readList("/tlds.txt") ?: error("Cannot find /tlds.txt") - val stoplist = readList("/stoplist.txt") ?: error("Cannot find /stoplist.txt") - - fun readList(resource: String) : Set? { - return File("lib/domains/$resource").takeIf { it.exists() }?.bufferedReader()?.lineSequence()?.toHashSet() - } -} - -private fun findSchoolNames(parts: List): List { - val resourcePath = StringBuilder("") - for (part in parts) { - resourcePath.append('/').append(part) - val school = Resources.readList("${resourcePath}.txt") - if (school != null) { - return school.toList() - } - } - - return arrayListOf() -} - -private fun domainParts(emailOrDomain: String): List { - return emailOrDomain.trim().toLowerCase().substringAfter('@').substringAfter("://").substringBefore(':').split('.').reversed() -} - -internal fun checkSet(set: Set, parts: List): Boolean { - val subj = StringBuilder() - for (part in parts) { - subj.insert(0, part) - if (set.contains(subj.toString())) return true - subj.insert(0 ,'.') - } - return false -} diff --git a/bin/test/swot/SwotTest.kt b/bin/test/swot/SwotTest.kt deleted file mode 100644 index 1b321cf345..0000000000 --- a/bin/test/swot/SwotTest.kt +++ /dev/null @@ -1,59 +0,0 @@ -package swot - -import junit.framework.TestCase - -class SwotTest : TestCase() { - fun testSwot() { - assertEquals (true , isAcademic("lreilly@stanford.edu")) - assertEquals (true , isAcademic("LREILLY@STANFORD.EDU")) - assertEquals (true , isAcademic("Lreilly@Stanford.Edu")) - assertEquals (true , isAcademic("lreilly@slac.stanford.edu")) - assertEquals (true , isAcademic("lreilly@strath.ac.uk")) - assertEquals (true , isAcademic("lreilly@soft-eng.strath.ac.uk")) - assertEquals (true , isAcademic("lee@ugr.es")) - assertEquals (true , isAcademic("lee@uottawa.ca")) - assertEquals (true , isAcademic("lee@ucy.ac.cy")) - assertEquals (false , isAcademic("lee@mother.edu.ru")) - assertEquals (false, isAcademic("lee@leerilly.net")) - assertEquals (false, isAcademic("lee@gmail.com")) - assertEquals (false, isAcademic("lee@stanford.edu.com")) - assertEquals (false, isAcademic("lee@strath.ac.uk.com")) - assertEquals (true , isAcademic("stanford.edu")) - assertEquals (true , isAcademic("slac.stanford.edu")) - assertEquals (true , isAcademic("www.stanford.edu")) - assertEquals (true , isAcademic("http://www.stanford.edu")) - assertEquals (true , isAcademic("http://www.stanford.edu:9393")) - assertEquals (true , isAcademic("strath.ac.uk")) - assertEquals (true , isAcademic("soft-eng.strath.ac.uk")) - assertEquals (true , isAcademic("ugr.es")) - assertEquals (true , isAcademic("uottawa.ca")) - assertEquals (true , isAcademic("ucy.ac.cy")) - assertEquals (false , isAcademic("mother.edu.ru")) - assertEquals (false, isAcademic("leerilly.net")) - assertEquals (false, isAcademic("gmail.com")) - assertEquals (false, isAcademic("stanford.edu.com")) - assertEquals (false, isAcademic("strath.ac.uk.com")) - assertEquals (false, isAcademic("")) - assertEquals (false, isAcademic("the")) - assertEquals (true , isAcademic(" stanford.edu")) - assertEquals (true , isAcademic("lee@strath.ac.uk ")) - assertEquals (false, isAcademic(" gmail.com ")) - assertEquals (true , isAcademic("lee@stud.uni-corvinus.hu")) - assertEquals (true , isAcademic("lee@harvard.edu")) - assertEquals (true , isAcademic("lee@mail.harvard.edu")) - - assertEquals(false, isAcademic("imposter@si.edu")) - assertEquals(false, isAcademic("lee@mdu.edu.rs")) - - // Iran sanctions are lifted - assertEquals(true, isAcademic("lee@acmt.ac.ir")) - } - - fun testSchoolNames() { - assertTrue(findSchoolNames("lreilly@cs.strath.ac.uk").contains("University of Strathclyde")) - assertTrue(findSchoolNames("lreilly@cs.strath.ac.uk").contains("uka tarsadia university,bardoli")) - assertEquals("BRG Fadingerstraße Linz, Austria", findSchoolNames("lreilly@fadi.at").single()) - assertEquals("St. Petersburg State University", findSchoolNames("max@spbu.ru ").single()) - assertEquals(0, findSchoolNames("foo@shop.com").size) - } -}