Autopsy  4.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
CreditCards.java
Go to the documentation of this file.
1 package org.sleuthkit.autopsy.datamodel;
2 
3 import com.google.common.collect.Range;
4 import com.google.common.collect.RangeMap;
5 import com.google.common.collect.TreeRangeMap;
6 import java.io.IOException;
7 import java.io.InputStreamReader;
8 import java.util.Optional;
9 import java.util.logging.Level;
10 import java.util.logging.Logger;
11 import javax.annotation.concurrent.GuardedBy;
12 import org.apache.commons.csv.CSVFormat;
13 import org.apache.commons.csv.CSVParser;
14 import org.apache.commons.csv.CSVRecord;
15 import org.apache.commons.lang3.StringUtils;
18 
19 public class CreditCards {
20 
21  //Interface for objects that provide details about one or more BINs.
22  static public interface BankIdentificationNumber {
23 
29  Optional<String> getBankCity();
30 
36  Optional<String> getBankName();
37 
43  Optional<String> getBankPhoneNumber();
44 
50  Optional<String> getBankURL();
51 
57  Optional<String> getBrand();
58 
64  Optional<String> getCardType();
65 
71  Optional<String> getCountry();
72 
83  Optional<Integer> getNumberLength();
84 
90  Optional<String> getScheme();
91  }
92 
93  private static final Logger LOGGER = Logger.getLogger(CreditCards.class.getName());
98  @GuardedBy("CreditCards.class")
99  private final static RangeMap<Integer, BINRange> binRanges = TreeRangeMap.create();
100 
104  @GuardedBy("CreditCards.class")
105  private static boolean binsLoaded = false;
106 
111  synchronized private static void loadBINRanges() {
112  if (binsLoaded == false) {
113  try {
114  InputStreamReader in = new InputStreamReader(CreditCards.class.getResourceAsStream("ranges.csv")); //NON-NLS
115  CSVParser rangesParser = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
116 
117  //parse each row and add to range map
118  for (CSVRecord record : rangesParser) {
119 
125  String start = StringUtils.rightPad(record.get("iin_start"), 8, "0"); //pad start with 0's //NON-NLS
126 
127  //if there is no end listed, use start, since ranges will be closed.
128  String end = StringUtils.defaultIfBlank(record.get("iin_end"), start); //NON-NLS
129  end = StringUtils.rightPad(end, 8, "99"); //pad end with 9's //NON-NLS
130 
131  final String numberLength = record.get("number_length"); //NON-NLS
132 
133  try {
134  BINRange binRange = new BINRange(Integer.parseInt(start),
135  Integer.parseInt(end),
136  StringUtils.isBlank(numberLength) ? null : Integer.valueOf(numberLength),
137  record.get("scheme"), //NON-NLS
138  record.get("brand"), //NON-NLS
139  record.get("type"), //NON-NLS
140  record.get("country"), //NON-NLS
141  record.get("bank_name"), //NON-NLS
142  record.get("bank_url"), //NON-NLS
143  record.get("bank_phone"), //NON-NLS
144  record.get("bank_city")); //NON-NLS
145 
146  binRanges.put(Range.closed(binRange.getBINstart(), binRange.getBINend()), binRange);
147 
148  } catch (NumberFormatException numberFormatException) {
149  LOGGER.log(Level.WARNING, "Failed to parse BIN range: " + record.toString(), numberFormatException); //NON-NLS
150  }
151  binsLoaded = true;
152  }
153  } catch (IOException ex) {
154  LOGGER.log(Level.WARNING, "Failed to load BIN ranges form ranges.csv", ex); //NON-NLS
155  MessageNotifyUtil.Notify.warn("Credit Card Number Discovery", "There was an error loading Bank Identification Number information. Accounts will not have their BINs identified.");
156  }
157  }
158  }
159 
167  synchronized static public BankIdentificationNumber getBINInfo(int bin) {
168  loadBINRanges();
169  return binRanges.get(bin);
170  }
171 }
synchronized static void loadBINRanges()
static synchronized BankIdentificationNumber getBINInfo(int bin)
static final RangeMap< Integer, BINRange > binRanges
synchronized static Logger getLogger(String name)
Definition: Logger.java:161
static void warn(String title, String message)

Copyright © 2012-2016 Basis Technology. Generated on: Mon Jan 2 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.