001package org.nuxeo.ecm.platform.oauth2.openid.auth.github;
002
003import java.util.Date;
004
005import org.nuxeo.ecm.platform.oauth2.openid.auth.OpenIDUserInfo;
006
007import com.google.api.client.json.GenericJson;
008import com.google.api.client.util.DateTime;
009import com.google.api.client.util.Key;
010
011/**
012 * Github user info
013 *
014 * @author <a href="mailto:ak@nuxeo.com">Arnaud Kervern</a>
015 * @since 5.9.5
016 */
017public class GithubUserInfo extends GenericJson implements OpenIDUserInfo {
018
019    @Key("sub")
020    protected String subject;
021
022    @Key("name")
023    protected String name;
024
025    @Key("given_name")
026    protected String givenName;
027
028    @Key("family_name")
029    protected String familyName;
030
031    @Key("middle_name")
032    protected String middleName;
033
034    @Key("nickname")
035    protected String nickname;
036
037    @Key("preferred_username")
038    protected String preferredUsername;
039
040    @Key("profile")
041    protected String profile;
042
043    @Key("picture")
044    protected String picture;
045
046    @Key("website")
047    protected String website;
048
049    @Key("email")
050    protected String email;
051
052    @Key("email_verified")
053    protected boolean emailVerified;
054
055    @Key("gender")
056    protected String gender;
057
058    @Key("birthdate")
059    protected Date birthdate;
060
061    @Key("zoneinfo")
062    protected String zoneInfo;
063
064    @Key("locale")
065    protected String locale;
066
067    @Key("phone_number")
068    protected String phoneNumber;
069
070    @Key("address")
071    protected String address;
072
073    @Key("updated_time")
074    protected String updatedTime;
075
076    @Key
077    protected String bio;
078
079    @Key
080    protected String blog;
081
082    @Key
083    protected String company;
084
085    @Override
086    public String getSubject() {
087        return getEmail();
088    }
089
090    @Override
091    public String getName() {
092        return name;
093    }
094
095    @Override
096    public String getMiddleName() {
097        return middleName;
098    }
099
100    @Override
101    public String getPreferredUsername() {
102        return preferredUsername;
103    }
104
105    @Override
106    public String getProfile() {
107        return profile;
108    }
109
110    @Override
111    public String getPicture() {
112        return picture;
113    }
114
115    @Override
116    public String getWebsite() {
117        return website;
118    }
119
120    @Override
121    public String getEmail() {
122        return email;
123    }
124
125    @Override
126    public boolean isEmailVerified() {
127        return emailVerified;
128    }
129
130    @Override
131    public String getGender() {
132        return gender;
133    }
134
135    @Override
136    public Date getBirthdate() {
137        return birthdate;
138    }
139
140    @Override
141    public String getZoneInfo() {
142        return zoneInfo;
143    }
144
145    @Override
146    public String getLocale() {
147        return locale;
148    }
149
150    @Override
151    public String getPhoneNumber() {
152        return phoneNumber;
153    }
154
155    @Override
156    public String getAddress() {
157        return address;
158    }
159
160    @Override
161    public Date getUpdatedTime() {
162        Date date;
163        try {
164            DateTime dateTime = DateTime.parseRfc3339(updatedTime);
165            date = new Date(dateTime.getValue());
166        } catch (NumberFormatException e) {
167            return null;
168        }
169        return date;
170    }
171
172    @Key(value = "login")
173    protected String login;
174
175    @Override
176    public String getGivenName() {
177        return splitNameField(0);
178    }
179
180    @Override
181    public String getFamilyName() {
182        return splitNameField(1);
183    }
184
185    @Override
186    public String getNickname() {
187        return login;
188    }
189
190    public String getBlog() {
191        return blog;
192    }
193
194    public String getBio() {
195        return bio;
196    }
197
198    public String getCompany() {
199        return company;
200    }
201
202    public String getLogin() {
203        return login;
204    }
205
206    public String splitNameField(int index) {
207        String[] strings = name.split(" ");
208        if (index >= strings.length) {
209            return name;
210        } else {
211            return strings[index];
212        }
213    }
214}