001/* 002 * ==================================================================== 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 * ==================================================================== 020 * 021 * This software consists of voluntary contributions made by many 022 * individuals on behalf of the Apache Software Foundation. For more 023 * information on the Apache Software Foundation, please see 024 * <http://www.apache.org/>. 025 * 026 */ 027package org.apache.http.impl.cookie; 028 029import java.util.Date; 030import java.util.regex.Matcher; 031import java.util.regex.Pattern; 032 033import org.apache.http.annotation.Contract; 034import org.apache.http.annotation.ThreadingBehavior; 035import org.apache.http.cookie.ClientCookie; 036import org.apache.http.cookie.CommonCookieAttributeHandler; 037import org.apache.http.cookie.MalformedCookieException; 038import org.apache.http.cookie.SetCookie; 039import org.apache.http.util.Args; 040import org.apache.http.util.TextUtils; 041 042/** 043 * 044 * @since 4.4 045 */ 046@Contract(threading = ThreadingBehavior.IMMUTABLE) 047public class LaxMaxAgeHandler extends AbstractCookieAttributeHandler implements CommonCookieAttributeHandler { 048 049 private final static Pattern MAX_AGE_PATTERN = Pattern.compile("^\\-?[0-9]+$"); 050 051 public LaxMaxAgeHandler() { 052 super(); 053 } 054 055 @Override 056 public void parse(final SetCookie cookie, final String value) throws MalformedCookieException { 057 Args.notNull(cookie, "Cookie"); 058 if (TextUtils.isBlank(value)) { 059 return; 060 } 061 final Matcher matcher = MAX_AGE_PATTERN.matcher(value); 062 if (matcher.matches()) { 063 final int age; 064 try { 065 age = Integer.parseInt(value); 066 } catch (final NumberFormatException e) { 067 return; 068 } 069 final Date expiryDate = age >= 0 ? new Date(System.currentTimeMillis() + age * 1000L) : 070 new Date(Long.MIN_VALUE); 071 cookie.setExpiryDate(expiryDate); 072 } 073 } 074 075 @Override 076 public String getAttributeName() { 077 return ClientCookie.MAX_AGE_ATTR; 078 } 079 080}