Skip to content

Commit dbe8f77

Browse files
committed
Validate package name and project name
1 parent 15087bb commit dbe8f77

File tree

1 file changed

+36
-3
lines changed

1 file changed

+36
-3
lines changed

lib/services/project-service.ts

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,20 +182,53 @@ $injector.register("projectService", ProjectService);
182182

183183
class AndroidProjectService implements IAndroidProjectService {
184184
constructor(private $fs: IFileSystem,
185-
private $childProcess: IChildProcess) { }
185+
private $childProcess: IChildProcess,
186+
private $errors: IErrors,
187+
private $logger: ILogger) { }
186188

187189
public createProject(projectData: IProjectData): IFuture<void> {
188190
return (() => {
189191
var safeActivityName = projectData.projectName.replace(/\W/g, '');
190-
var packageAsPath = projectData.projectId.replace(/\./g, path.sep);
192+
var packageName = projectData.projectId;
193+
var packageAsPath = packageName.replace(/\./g, path.sep);
191194

192195
var targetApi = this.getTargetApi();
193196
var manifestFile = path.join(this.frameworkDir, "AndroidManifest.xml");
194-
console.log(projectData);
197+
198+
this.validatePackageName(packageName);
199+
this.validateProjectName(projectData.projectName);
195200

196201
}).future<any>()();
197202
}
198203

204+
private validatePackageName(packageName: string): boolean {
205+
//Make the package conform to Java package types
206+
//Enforce underscore limitation
207+
if (!/^[a-zA-Z]+(\.[a-zA-Z0-9][a-zA-Z0-9_]*)+$/.test(packageName)) {
208+
this.$errors.fail("Package name must look like: com.company.Name");
209+
}
210+
211+
//Class is a reserved word
212+
if(/\b[Cc]lass\b/.test(packageName)) {
213+
this.$errors.fail("class is a reserved word");
214+
}
215+
216+
return true;
217+
}
218+
219+
private validateProjectName(projectName: string): boolean {
220+
if (projectName === '') {
221+
this.$errors.fail("Project name cannot be empty");
222+
}
223+
224+
//Classes in Java don't begin with numbers
225+
if (/^[0-9]/.test(projectName)) {
226+
this.$errors.fail("Project name must not begin with a number");
227+
}
228+
229+
return true;
230+
}
231+
199232
private get frameworkDir(): string {
200233
// This should be downloaded as npm package
201234
return path.join(__dirname, "../../framework", "android");

0 commit comments

Comments
 (0)