Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
github
hub
提交
a85616ad
H
hub
项目概览
github
/
hub
大约 1 年 前同步成功
通知
3
Star
22523
Fork
2406
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hub
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a85616ad
编写于
5月 30, 2013
作者:
J
Jingwen Owen Ou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix bug that can't authenticate user
上级
ea3f6c14
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
51 addition
and
77 deletion
+51
-77
config/config.go
config/config.go
+36
-42
config/config_test.go
config/config_test.go
+6
-11
github/github.go
github/github.go
+5
-11
github/http.go
github/http.go
+4
-13
未找到文件。
config/config.go
浏览文件 @
a85616ad
...
...
@@ -4,64 +4,73 @@ import (
"bufio"
"encoding/json"
"errors"
"fmt"
"github.com/howeyc/gopass"
"github.com/jingweno/gh/utils"
"os"
"path/filepath"
)
const
GitHubHost
string
=
"github.com"
type
Config
struct
{
User
string
`json:"user"`
Token
string
`json:"token"`
}
var
DefaultFile
string
func
(
c
*
Config
)
UserName
()
string
{
if
c
.
User
==
""
{
var
user
string
msg
:=
fmt
.
Sprintf
(
"%s username: "
,
GitHubHost
)
fmt
.
Print
(
msg
)
fmt
.
Scanln
(
&
user
)
c
.
User
=
user
}
func
init
()
{
DefaultFile
=
filepath
.
Join
(
os
.
Getenv
(
"HOME"
),
".config"
,
"gh"
)
return
c
.
User
}
func
LoadAll
()
([]
*
Config
,
error
)
{
configs
,
err
:=
loadFrom
(
DefaultFile
)
if
err
!=
nil
{
return
nil
,
err
func
(
c
*
Config
)
Password
()
string
{
msg
:=
fmt
.
Sprintf
(
"%s password for %s (never stored): "
,
GitHubHost
,
c
.
User
)
fmt
.
Print
(
msg
)
pass
:=
gopass
.
GetPasswd
()
if
len
(
pass
)
==
0
{
utils
.
Check
(
errors
.
New
(
"Password cannot be empty"
))
}
return
configs
,
nil
return
string
(
pass
)
}
func
Load
(
user
string
)
(
*
Config
,
error
)
{
configs
,
err
:=
LoadAll
()
if
err
!=
nil
{
return
nil
,
err
}
var
DefaultFile
string
for
_
,
c
:=
range
configs
{
if
c
.
User
==
user
{
return
c
,
nil
}
}
func
init
()
{
DefaultFile
=
filepath
.
Join
(
os
.
Getenv
(
"HOME"
),
".config"
,
"gh"
)
}
return
nil
,
errors
.
New
(
"There's no matching config for user: "
+
user
)
func
Load
()
(
Config
,
error
)
{
return
loadFrom
(
DefaultFile
)
}
func
loadFrom
(
filename
string
)
(
[]
*
Config
,
error
)
{
func
loadFrom
(
filename
string
)
(
Config
,
error
)
{
f
,
err
:=
os
.
Open
(
filename
)
if
err
!=
nil
{
return
nil
,
err
return
Config
{}
,
err
}
return
doLoadFrom
(
f
)
}
func
doLoadFrom
(
f
*
os
.
File
)
(
[]
*
Config
,
error
)
{
func
doLoadFrom
(
f
*
os
.
File
)
(
Config
,
error
)
{
defer
f
.
Close
()
reader
:=
bufio
.
NewReader
(
f
)
dec
:=
json
.
NewDecoder
(
reader
)
var
c
[]
*
Config
var
c
Config
err
:=
dec
.
Decode
(
&
c
)
if
err
!=
nil
{
return
nil
,
err
return
Config
{}
,
err
}
return
c
,
nil
...
...
@@ -72,8 +81,6 @@ func Save(config *Config) error {
}
func
saveTo
(
filename
string
,
config
*
Config
)
error
{
configs
,
_
:=
loadFrom
(
filename
)
err
:=
os
.
MkdirAll
(
filepath
.
Dir
(
filename
),
0771
)
if
err
!=
nil
{
return
err
...
...
@@ -84,25 +91,12 @@ func saveTo(filename string, config *Config) error {
return
err
}
var
foundConfig
*
Config
for
_
,
c
:=
range
configs
{
if
c
.
User
==
config
.
User
{
foundConfig
=
c
break
}
}
if
foundConfig
==
nil
{
configs
=
append
(
configs
,
config
)
}
else
{
foundConfig
.
Token
=
config
.
Token
}
return
doSaveTo
(
f
,
configs
)
return
doSaveTo
(
f
,
config
)
}
func
doSaveTo
(
f
*
os
.
File
,
config
s
[]
*
Config
)
error
{
func
doSaveTo
(
f
*
os
.
File
,
config
*
Config
)
error
{
defer
f
.
Close
()
enc
:=
json
.
NewEncoder
(
f
)
return
enc
.
Encode
(
config
s
)
return
enc
.
Encode
(
config
)
}
config/config_test.go
浏览文件 @
a85616ad
...
...
@@ -15,21 +15,16 @@ func TestSave(t *testing.T) {
err
:=
saveTo
(
file
,
&
config
)
assert
.
Equal
(
t
,
nil
,
err
)
config
s
,
err
:
=
loadFrom
(
file
)
config
,
err
=
loadFrom
(
file
)
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
1
,
len
(
configs
))
assert
.
Equal
(
t
,
"jingweno"
,
configs
[
0
]
.
User
)
assert
.
Equal
(
t
,
"123"
,
configs
[
0
]
.
Token
)
assert
.
Equal
(
t
,
"jingweno"
,
config
.
User
)
assert
.
Equal
(
t
,
"123"
,
config
.
Token
)
newConfig
:=
Config
{
"foo"
,
"456"
}
err
=
saveTo
(
file
,
&
newConfig
)
assert
.
Equal
(
t
,
nil
,
err
)
configs
,
err
=
loadFrom
(
file
)
assert
.
Equal
(
t
,
nil
,
err
)
assert
.
Equal
(
t
,
2
,
len
(
configs
))
assert
.
Equal
(
t
,
"jingweno"
,
configs
[
0
]
.
User
)
assert
.
Equal
(
t
,
"123"
,
configs
[
0
]
.
Token
)
assert
.
Equal
(
t
,
"foo"
,
configs
[
1
]
.
User
)
assert
.
Equal
(
t
,
"456"
,
configs
[
1
]
.
Token
)
config
,
err
=
loadFrom
(
file
)
assert
.
Equal
(
t
,
"foo"
,
config
.
User
)
assert
.
Equal
(
t
,
"456"
,
config
.
Token
)
}
github/github.go
浏览文件 @
a85616ad
...
...
@@ -9,9 +9,9 @@ import (
)
const
(
GitHub
Url
string
=
"https://"
+
GitHub
Host
GitHub
Host
string
=
"api.github.com"
OAuthAppUrl
string
=
"http://owenou.com/gh"
GitHub
ApiUrl
string
=
"https://"
+
GitHubApi
Host
GitHub
ApiHost
string
=
"api.github.com"
OAuthAppUrl
string
=
"http://owenou.com/gh"
)
type
GitHub
struct
{
...
...
@@ -57,15 +57,9 @@ func hashAuth(u, p string) string {
func
New
()
*
GitHub
{
project
:=
CurrentProject
()
configs
,
err
:=
config
.
LoadAll
()
var
c
*
config
.
Config
if
err
==
nil
{
c
=
configs
[
0
]
}
else
{
c
=
&
config
.
Config
{
User
:
project
.
Owner
}
}
c
,
_
:=
config
.
Load
()
gh
:=
GitHub
{
&
http
.
Client
{},
""
,
project
,
c
}
gh
:=
GitHub
{
&
http
.
Client
{},
""
,
project
,
&
c
}
if
c
.
Token
!=
""
{
gh
.
updateTokenAuth
(
c
.
Token
)
}
...
...
github/http.go
浏览文件 @
a85616ad
...
...
@@ -5,7 +5,6 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/howeyc/gopass"
"io/ioutil"
"net/http"
)
...
...
@@ -24,16 +23,8 @@ type GitHubErrors struct {
}
func
performBasicAuth
(
gh
*
GitHub
)
error
{
user
:=
gh
.
project
.
Owner
msg
:=
fmt
.
Sprintf
(
"%s password for %s (never stored): "
,
GitHubHost
,
user
)
fmt
.
Print
(
msg
)
pass
:=
gopass
.
GetPasswd
()
if
len
(
pass
)
==
0
{
return
errors
.
New
(
"Password cannot be empty"
)
}
password
:=
string
(
pass
)
user
:=
gh
.
config
.
UserName
()
password
:=
gh
.
config
.
Password
()
gh
.
updateBasicAuth
(
user
,
password
)
return
obtainOAuthTokenWithBasicAuth
(
gh
)
...
...
@@ -73,7 +64,7 @@ func obtainOAuthTokenWithBasicAuth(gh *GitHub) error {
}
func
httpGet
(
gh
*
GitHub
,
uri
string
,
extraHeaders
map
[
string
]
string
)
(
*
http
.
Response
,
error
)
{
url
:=
fmt
.
Sprintf
(
"%s%s"
,
GitHubUrl
,
uri
)
url
:=
fmt
.
Sprintf
(
"%s%s"
,
GitHub
Api
Url
,
uri
)
request
,
err
:=
http
.
NewRequest
(
"GET"
,
url
,
nil
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -89,7 +80,7 @@ func httpGet(gh *GitHub, uri string, extraHeaders map[string]string) (*http.Resp
}
func
httpPost
(
gh
*
GitHub
,
uri
string
,
extraHeaders
map
[
string
]
string
,
content
*
bytes
.
Buffer
)
(
*
http
.
Response
,
error
)
{
url
:=
fmt
.
Sprintf
(
"%s%s"
,
GitHubUrl
,
uri
)
url
:=
fmt
.
Sprintf
(
"%s%s"
,
GitHub
Api
Url
,
uri
)
request
,
err
:=
http
.
NewRequest
(
"POST"
,
url
,
content
)
if
err
!=
nil
{
return
nil
,
err
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录