From 4b92a6c2df28054ad766bc262f308db9f6066596 Mon Sep 17 00:00:00 2001
From: Unknown <joe2010xtmf@163.com>
Date: Wed, 19 Feb 2014 13:04:31 -0500
Subject: [PATCH] Add code of delete user

---
 bee.json         |  4 +++-
 conf/app.ini     |  1 +
 gogs.go          | 21 ++++++---------------
 models/models.go | 20 +++++++++++++++-----
 models/repo.go   |  2 +-
 models/user.go   | 12 +++++++++---
 6 files changed, 35 insertions(+), 25 deletions(-)

diff --git a/bee.json b/bee.json
index ce39670600..40050dd581 100644
--- a/bee.json
+++ b/bee.json
@@ -14,6 +14,8 @@
 			"utils"
 		]
 	},
-	"cmd_args": [],
+	"cmd_args": [
+		"web"
+	],
 	"envs": []
 }
\ No newline at end of file
diff --git a/conf/app.ini b/conf/app.ini
index c8fba31d7c..c8953cc5f2 100644
--- a/conf/app.ini
+++ b/conf/app.ini
@@ -10,3 +10,4 @@ HOST =
 NAME = gogs
 USER = root
 PASSWD = 
+PASSWD_jiahua = root
diff --git a/gogs.go b/gogs.go
index a0ed460d90..63ad3318c7 100644
--- a/gogs.go
+++ b/gogs.go
@@ -1,16 +1,6 @@
-// Copyright 2013-2014 gogs authors.
-//
-// Licensed under the Apache License, Version 2.0 (the "License"): you may
-// not use this file except in compliance with the License. You may obtain
-// a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations
-// under the License.
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
 
 // gogs(Go Git Service) is a Go clone of Github.
 package main
@@ -27,7 +17,7 @@ import (
 // Test that go1.1 tag above is included in builds. main.go refers to this definition.
 const go11tag = true
 
-const APP_VER = "0.0.0.0218"
+const APP_VER = "0.0.0.0219"
 
 func init() {
 	runtime.GOMAXPROCS(runtime.NumCPU())
@@ -35,7 +25,7 @@ func init() {
 
 func main() {
 	app := cli.NewApp()
-	app.Name = "gogs"
+	app.Name = "Gogs"
 	app.Usage = "Go Git Service"
 	app.Version = APP_VER
 	app.Commands = []cli.Command{
@@ -46,4 +36,5 @@ func main() {
 		cli.BoolFlag{"noterm", "disable color output"},
 	}...)
 	app.Run(os.Args)
+	println("wo cao???")
 }
diff --git a/models/models.go b/models/models.go
index 55e441c530..8341f99616 100644
--- a/models/models.go
+++ b/models/models.go
@@ -7,6 +7,7 @@ package models
 import (
 	"fmt"
 	"os"
+	"os/user"
 
 	_ "github.com/go-sql-driver/mysql"
 	"github.com/lunny/xorm"
@@ -47,18 +48,27 @@ func setEngine() {
 	dbUser := utils.Cfg.MustValue("database", "USER")
 	dbPwd := utils.Cfg.MustValue("database", "PASSWD")
 
-	var err error
+	uname, err := user.Current()
+	if err != nil {
+		fmt.Printf("models.init -> fail to get user: %s\n", err)
+		os.Exit(2)
+	}
+
+	if uname.Username == "jiahuachen" {
+		dbPwd = utils.Cfg.MustValue("database", "PASSWD_jiahua")
+	}
+
 	switch dbType {
 	case "mysql":
 		orm, err = xorm.NewEngine("mysql", fmt.Sprintf("%v:%v@%v/%v?charset=utf8",
 			dbUser, dbPwd, dbHost, dbName))
 	default:
-		log.Critical("Unknown database type: %s", dbType)
+		fmt.Printf("Unknown database type: %s\n", dbType)
 		os.Exit(2)
 	}
 
 	if err != nil {
-		log.Critical("models.init -> Conntect database: %s", dbType)
+		fmt.Printf("models.init -> fail to conntect database: %s\n", dbType)
 		os.Exit(2)
 	}
 
@@ -73,7 +83,7 @@ func init() {
 	setEngine()
 	err := orm.Sync(new(User), new(PublicKey), new(Repo), new(Access))
 	if err != nil {
-		log.Error("sync database struct error: %s", err)
-		os.Exit(1)
+		fmt.Printf("sync database struct error: %s\n", err)
+		os.Exit(2)
 	}
 }
diff --git a/models/repo.go b/models/repo.go
index 1eeeaa63ff..d48c9a9787 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -77,7 +77,7 @@ func CreateRepository(user *User, reposName string) (*Repo, error) {
 	return &repo, nil
 }
 
-// list one user's repository
+// GetRepositories returns the list of repositories of given user.
 func GetRepositories(user *User) ([]Repo, error) {
 	repos := make([]Repo, 0)
 	err := orm.Find(&repos, &Repo{OwnerId: user.Id})
diff --git a/models/user.go b/models/user.go
index 6cf7f67464..2527a19774 100644
--- a/models/user.go
+++ b/models/user.go
@@ -74,6 +74,7 @@ type Action struct {
 }
 
 var (
+	ErrUserOwnRepos     = errors.New("User still have ownership of repositories")
 	ErrUserAlreadyExist = errors.New("User already exist")
 	ErrUserNotExist     = errors.New("User does not exist")
 )
@@ -95,7 +96,6 @@ func RegisterUser(user *User) (err error) {
 
 	user.LowerName = strings.ToLower(user.Name)
 	user.Avatar = utils.EncodeMd5(user.Email)
-	user.Created = time.Now()
 	user.Updated = time.Now()
 	user.EncodePasswd()
 	_, err = orm.Insert(user)
@@ -110,8 +110,14 @@ func UpdateUser(user *User) (err error) {
 
 // DeleteUser completely deletes everything of the user.
 func DeleteUser(user *User) error {
-	// TODO: check if has ownership of any repository.
-	_, err := orm.Delete(user)
+	repos, err := GetRepositories(user)
+	if err != nil {
+		return errors.New("modesl.GetRepositories: " + err.Error())
+	} else if len(repos) > 0 {
+		return ErrUserOwnRepos
+	}
+
+	_, err = orm.Delete(user)
 	// TODO: delete and update follower information.
 	return err
 }