Added unsiq.ac.id

This commit is contained in:
febiarifin 2024-04-15 16:01:49 +07:00
parent 63ddf889be
commit 32fdeca2c7
3 changed files with 0 additions and 143 deletions

View File

@ -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<String>) {
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"))
}

View File

@ -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<String> {
return findSchoolNames(domainParts(emailOrDomain))
}
fun isUnderTLD(parts: List<String>): Boolean {
return checkSet(Resources.tlds, parts)
}
fun isStoplisted(parts: List<String>): 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<String>? {
return File("lib/domains/$resource").takeIf { it.exists() }?.bufferedReader()?.lineSequence()?.toHashSet()
}
}
private fun findSchoolNames(parts: List<String>): List<String> {
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<String> {
return emailOrDomain.trim().toLowerCase().substringAfter('@').substringAfter("://").substringBefore(':').split('.').reversed()
}
internal fun checkSet(set: Set<String>, parts: List<String>): Boolean {
val subj = StringBuilder()
for (part in parts) {
subj.insert(0, part)
if (set.contains(subj.toString())) return true
subj.insert(0 ,'.')
}
return false
}

View File

@ -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)
}
}