1 /* 2 * Make.org Core API 3 * Copyright (C) 2021 Make.org 4 * 5 * This program is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU Affero General Public License as 7 * published by the Free Software Foundation, either version 3 of the 8 * License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU Affero General Public License for more details. 14 * 15 * You should have received a copy of the GNU Affero General Public License 16 * along with this program. If not, see <https://www.gnu.org/licenses/>. 17 * 18 */ 19 20 package org.make.api.technical 21 22 import scala.util.chaining.scalaUtilChainingOps 23 24 final case class IpAndHash(ip: String, hash: String) 25 26 object IpAndHash { 27 private val IPv6SafeSegments = 3 28 private val IPv6SegmentsCount = 8 29 30 private def obfuscateIpV4(ip: String): String = 31 s"${ip.take(ip.lastIndexOf("."))}.x" 32 33 @SuppressWarnings(Array("org.wartremover.warts.Throw")) 34 private val obfuscateIpV6: String => String = 35 _.split("::") 36 .map(_.split(':').filterNot(_.isEmpty)) 37 .pipe({ 38 case Array() => Array[String]() 39 case Array(elem) => elem 40 case Array(left, right) => 41 val numberOfSegments = left.length + right.length 42 val numberOfCompressedSegments = IPv6SegmentsCount - numberOfSegments 43 left ++ Array.fill(numberOfCompressedSegments)("0") ++ right 44 case _ => throw new Error("Invalid IPv6 format") 45 }) 46 .take(IPv6SafeSegments) 47 .mkString(":") 48 .concat("::") 49 50 def obfuscateIp(ip: String): String = ip match { 51 case ip if ip.contains(":") => obfuscateIpV6(ip) 52 case _ => obfuscateIpV4(ip) 53 } 54 }
| Line | Stmt Id | Pos | Tree | Symbol | Tests | Code |
|---|---|---|---|---|---|---|
| 27 | 128 | 932 - 933 | Literal | <nosymbol> | org.make.api.technical.security.securityhelpertest,org.make.api.user.userapitest,org.make.api.userhistory.userhistorytest,org.make.api.technical.crm.crmservicecomponenttest | 3 |
| 28 | 19 | 968 - 969 | Literal | <nosymbol> | org.make.api.technical.security.securityhelpertest,org.make.api.user.userapitest,org.make.api.userhistory.userhistorytest,org.make.api.technical.crm.crmservicecomponenttest | 8 |
| 48 | 216 | 1173 - 1706 | Apply | java.lang.String.concat | org.make.api.technical.security.securityhelpertest | scala.Predef.wrapRefArray[String](scala.Predef.refArrayOps[String](scala.util.`package`.chaining.scalaUtilChainingOps[Array[Array[String]]](scala.Predef.refArrayOps[String](x$1.split("::")).map[Array[String]](((x$2: String) => scala.Predef.refArrayOps[String](scala.Predef.augmentString(x$2).split(':')).filterNot(((x$3: String) => x$3.isEmpty()))))((ClassTag.apply[Array[String]](scala.runtime.ScalaRunTime.arrayClass(classOf[java.lang.String])): scala.reflect.ClassTag[Array[String]]))).pipe[Array[String]](((x0$1: Array[Array[String]]) => x0$1 match { case scala.Array.unapplySeq[Array[String]](<unapply-selector>) <unapply> () => scala.Array.apply[String]()((ClassTag.apply[String](classOf[java.lang.String]): scala.reflect.ClassTag[String])) case scala.Array.unapplySeq[Array[String]](<unapply-selector>) <unapply> ((elem @ _)) => elem case scala.Array.unapplySeq[Array[String]](<unapply-selector>) <unapply> ((left @ _), (right @ _)) => { val numberOfSegments: Int = left.length.+(right.length); val numberOfCompressedSegments: Int = IpAndHash.this.IPv6SegmentsCount.-(numberOfSegments); scala.Predef.refArrayOps[String](scala.Predef.refArrayOps[String](left).++[String](scala.Array.fill[String](numberOfCompressedSegments)("0")((ClassTag.apply[String](classOf[java.lang.String]): scala.reflect.ClassTag[String])))((ClassTag.apply[String](classOf[java.lang.String]): scala.reflect.ClassTag[String]))).++[String](right)((ClassTag.apply[String](classOf[java.lang.String]): scala.reflect.ClassTag[String])) } case _ => throw new scala.`package`.Error("Invalid IPv6 format") }))).take(IpAndHash.this.IPv6SafeSegments)).mkString(":").concat("::") |
| 51 | 151 | 1774 - 1790 | Apply | java.lang.String.contains | org.make.api.technical.security.securityhelpertest,org.make.api.user.userapitest,org.make.api.userhistory.userhistorytest,org.make.api.technical.crm.crmservicecomponenttest | ip.contains(":") |
| 51 | 24 | 1794 - 1811 | Apply | scala.Function1.apply | org.make.api.technical.security.securityhelpertest | IpAndHash.this.obfuscateIpV6.apply(ip) |
| 52 | 237 | 1847 - 1864 | Apply | org.make.api.technical.IpAndHash.obfuscateIpV4 | org.make.api.technical.security.securityhelpertest,org.make.api.user.userapitest,org.make.api.userhistory.userhistorytest,org.make.api.technical.crm.crmservicecomponenttest | IpAndHash.this.obfuscateIpV4(ip) |