]> source.dussan.org Git - archiva.git/blob
f1c49c644265d5f68d422f9831777d1d0c6f0962
[archiva.git] /
1 package org.apache.archiva.redback.keys.cached;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import java.util.List;
23
24 import javax.inject.Inject;
25 import javax.inject.Named;
26
27 import org.apache.archiva.redback.components.cache.Cache;
28 import org.apache.archiva.redback.keys.AbstractKeyManager;
29 import org.apache.archiva.redback.keys.AuthenticationKey;
30 import org.apache.archiva.redback.keys.KeyManager;
31 import org.apache.archiva.redback.keys.KeyManagerException;
32 import org.apache.archiva.redback.keys.KeyNotFoundException;
33 import org.springframework.stereotype.Service;
34
35 /**
36  * CachedKeyManager 
37  *
38  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
39  *
40  */
41 @Service("keyManager#cached")
42 public class CachedKeyManager
43     extends AbstractKeyManager
44     implements KeyManager
45 {
46     @Inject @Named(value="keyManager#jdo")
47     private KeyManager keyImpl;
48
49     @Inject @Named(value="cache#keys")
50     private Cache keysCache;
51
52     public AuthenticationKey addKey( AuthenticationKey key )
53     {
54         if ( key != null )
55         {
56             keysCache.remove( key.getKey() );
57         }
58         return this.keyImpl.addKey( key );
59     }
60
61     public AuthenticationKey createKey( String principal, String purpose, int expirationMinutes )
62         throws KeyManagerException
63     {
64         AuthenticationKey authkey = this.keyImpl.createKey( principal, purpose, expirationMinutes );
65         keysCache.remove( authkey.getKey() );
66         return authkey;
67     }
68
69     public void deleteKey( AuthenticationKey key )
70         throws KeyManagerException
71     {
72         keysCache.remove( key.getKey() );
73         this.keyImpl.deleteKey( key );
74     }
75
76     public void deleteKey( String key )
77         throws KeyManagerException
78     {
79         keysCache.remove( key );
80         this.keyImpl.deleteKey( key );
81     }
82
83     public void eraseDatabase()
84     {
85         try
86         {
87             this.keyImpl.eraseDatabase();
88         }
89         finally
90         {
91             this.keysCache.clear();
92         }
93     }
94
95     public AuthenticationKey findKey( String key )
96         throws KeyNotFoundException, KeyManagerException
97     {
98         try
99         {
100             AuthenticationKey authkey = (AuthenticationKey) keysCache.get( key );
101             if ( authkey != null )
102             {
103                 assertNotExpired( authkey );
104                 return authkey;
105             }
106             else
107             {
108                 authkey = this.keyImpl.findKey( key );
109                 keysCache.put( key,authkey );
110                 return authkey;
111             }
112         }
113         catch ( KeyNotFoundException knfe )
114         {
115             // this is done to remove keys that have been expired.
116             // TODO: need to make a listener for the key manager.
117             keysCache.remove( key );
118             throw knfe;
119         }
120     }
121
122     public List<AuthenticationKey> getAllKeys()
123     {
124         log.debug( "NOT CACHED - .getAllKeys()" );
125         return this.keyImpl.getAllKeys();
126     }
127
128     public String getId()
129     {
130         return "Cached Key Manager [" + this.keyImpl.getId() + "]";
131     }
132
133     public KeyManager getKeyImpl()
134     {
135         return keyImpl;
136     }
137
138     public void setKeyImpl( KeyManager keyImpl )
139     {
140         this.keyImpl = keyImpl;
141     }
142
143     public Cache getKeysCache()
144     {
145         return keysCache;
146     }
147
148     public void setKeysCache( Cache keysCache )
149     {
150         this.keysCache = keysCache;
151     }
152 }