fix
Helius
2022-03-14 4613a00123a3786a7f23fa109306a3e355c1040f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.matrix.component.ueditor;
 
import com.matrix.component.ueditor.define.ActionMap;
import com.matrix.component.ueditor.define.AppInfo;
import com.matrix.component.ueditor.define.BaseState;
import com.matrix.component.ueditor.hunter.FileManager;
import com.matrix.component.ueditor.hunter.ImageHunter;
import com.matrix.component.ueditor.upload.Uploader;
import com.matrix.component.ueditor.define.State;
 
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
 
public class ActionEnter {
    
    private HttpServletRequest request = null;
    
    private String rootPath = null;
    private String contextPath = null;
    
    private String actionType = null;
    
    private ConfigManager configManager = null;
    private UeditorProperties ueditorProperties = null;
 
    public ActionEnter (HttpServletRequest request, String rootPath , UeditorProperties ueditorProperties) {
        
        this.request = request;
        this.rootPath = rootPath;
        this.actionType = request.getParameter( "action" );
        this.contextPath = request.getContextPath();
        this.ueditorProperties=ueditorProperties;
        this.configManager = ConfigManager.getInstance( this.rootPath, this.contextPath,  request.getRequestURI() ,ueditorProperties );
        
    }
    
    public String exec () {
        
        String callbackName = this.request.getParameter("callback");
        
        if ( callbackName != null ) {
 
            if ( !validCallbackName( callbackName ) ) {
                return new BaseState( false, AppInfo.ILLEGAL ).toJSONString();
            }
            
            return callbackName+"("+this.invoke()+");";
            
        } else {
            return this.invoke();
        }
 
    }
    
    public String invoke() {
        
        if ( actionType == null || !ActionMap.mapping.containsKey( actionType ) ) {
            return new BaseState( false, AppInfo.INVALID_ACTION ).toJSONString();
        }
        
        if ( this.configManager == null || !this.configManager.valid() ) {
            return new BaseState( false, AppInfo.CONFIG_ERROR ).toJSONString();
        }
        
        State state = null;
        
        int actionCode = ActionMap.getType( this.actionType );
        
        Map<String, Object> conf = null;
        
        switch ( actionCode ) {
        
            case ActionMap.CONFIG:
                return this.configManager.getAllConfig().toString();
                
            case ActionMap.UPLOAD_IMAGE:
            case ActionMap.UPLOAD_SCRAWL:
            case ActionMap.UPLOAD_VIDEO:
            case ActionMap.UPLOAD_FILE:
                conf = this.configManager.getConfig( actionCode );
                state = new Uploader( request, conf ).doExec();
                break;
                
            case ActionMap.CATCH_IMAGE:
                conf = configManager.getConfig( actionCode );
                String[] list = this.request.getParameterValues( (String)conf.get( "fieldName" ) );
                state = new ImageHunter( conf ).capture( list );
                break;
                
            case ActionMap.LIST_IMAGE:
            case ActionMap.LIST_FILE:
                conf = configManager.getConfig( actionCode );
                int start = this.getStartIndex();
                state = new FileManager( conf ).listFile( start );
                break;
                
        }
        
        return state.toJSONString();
        
    }
    
    public int getStartIndex () {
        
        String start = this.request.getParameter( "start" );
        
        try {
            return Integer.parseInt( start );
        } catch ( Exception e ) {
            return 0;
        }
        
    }
    
    /**
     * callback参数验证
     */
    public boolean validCallbackName ( String name ) {
        
        if ( name.matches( "^[a-zA-Z_]+[\\w0-9_]*$" ) ) {
            return true;
        }
        
        return false;
        
    }
    
}