Merge remote-tracking branch 'origin/master' into zmiguel

This commit is contained in:
José Valdiviesso 2019-04-09 14:53:44 +01:00
commit 1b5bcc62a3
644 changed files with 27866 additions and 2244 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -102,8 +102,8 @@ android {
applicationId "pt.enei"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 3
versionName "3"
versionCode 5
versionName "5"
ndk {
abiFilters "armeabi-v7a", "x86"
}

View File

@ -45,6 +45,9 @@ import teamDetail from './screens/teamDetail';
import event from './screens/event';
import map from './screens/map'
const navigationOptions = ({navigation}) => ({
headerLeft: <HeaderBackButton onPress={() => navigation.goBack(null)}/>,
headerStyle: {backgroundColor: 'transparent', zIndex: 100 },
@ -64,6 +67,15 @@ const AppStack = createBottomTabNavigator(
)
},
},
Mapa:{
screen: map,
navigationOptions: {
tabBarIcon: ({tintColor}) => (
<IconF name="map" color={tintColor} size={25}/>
)
},
},
'Jogo': {
screen: Jogo,
@ -88,7 +100,7 @@ const AppStack = createBottomTabNavigator(
},
Eventos: {
Atividades: {
screen: Eventos,
navigationOptions: {
@ -98,7 +110,7 @@ const AppStack = createBottomTabNavigator(
)
},
},
Home: {
screen: Home,
navigationOptions: {
@ -150,10 +162,16 @@ const Stack = createStackNavigator({
if (navigation.state.routes[index].routeName == 'Jogo') {
return {
header: (<View style={{backgroundColor:'#CC1A17', padding:15}}>
<Text style={{textAlign:'center', alignSelf:'center', color:'white', fontSize:20, fontWeight:'bold'}}>Jogo do ENEI'19</Text>
</View>)
headerTitle: (<Text style={{
textAlign:'center',
color:'#CC1A17',
width:'100%',
fontWeight:'bold',
fontSize:25,
}}>Jogo do ENEI'19</Text>)
}
@ -195,9 +213,15 @@ const Stack = createStackNavigator({
)
}
}
else if (navigation.state.routes[index].routeName == 'Eventos') {
else if (navigation.state.routes[index].routeName == 'Atividades') {
return {
headerTitle: 'Eventos',
headerTitle: 'Atividade',
}
}
else if (navigation.state.routes[index].routeName == 'Mapa') {
return {
headerTitle: 'Mapa do Evento',
}
}

Binary file not shown.

View File

@ -72,7 +72,7 @@ class Calendar extends React.Component {
</View>
<View>
<Text style={styles.description}>{item.description}</Text>
<Text style={styles.description} numberOfLines={8}>{item.description}</Text>
</View>
</View>
</TouchableOpacity>
@ -313,7 +313,7 @@ class Calendar extends React.Component {
}}
style={{ backgroundColor: "#F2F2F2" }}
indicatorStyle={{ backgroundColor: "pink"}}
/><View style={{ alignContent:'center', alignItems:'center', backgroundColor:'transparent',position: 'absolute',marginTop:SCREEN_HEIGHT*0.75,marginLeft:10}}><Button onPress={this._refresh} title="Refresh" color="#CC1A17"
/><View style={{ alignContent:'center', alignItems:'center', backgroundColor:'transparent',position: 'absolute',marginTop:SCREEN_HEIGHT*0.72,marginLeft:10}}><Button onPress={this._refresh} title="Refresh" color="#CC1A17"
/></View>
</View>
@ -355,7 +355,8 @@ const styles = StyleSheet.create({
description: {
padding: 10,
paddingLeft: 0,
paddingTop: 0
paddingTop: 0,
textAlign:"justify"
},
title: {
color: "#212121",

View File

@ -132,9 +132,8 @@ const styles = StyleSheet.create({
cardHours: {
textAlign: "center",
color: "white",
margin: 10
// width:'20%'
margin: 10,
width:'45%'
},
cardDesc: {

View File

@ -85,11 +85,11 @@ class Home extends Component {
//enei.pt/api/Users/getProfileImage/ZV4ZWJXTVV
https: axios
.get(`https://enei.pt/api/Users/getProfileImage/${qr}`)
.then(function(response) {
.then(function (response) {
// handle success
return response.data;
})
.catch(function(error) {
.catch(function (error) {
// handle error
console.log(error);
});
@ -103,7 +103,7 @@ class Home extends Component {
this.props.getEvents(this.props.user, this.props.token);
this._getImage();
}
componentWillUnmount() {}
componentWillUnmount() { }
bClick() {
//this.props.logoutUser();
@ -163,7 +163,10 @@ class Home extends Component {
};
_creatTeam = () => {
var tipo;
if (this.state.switch) tipo = 1;
if (this.state.switch==true) {
tipo = 1;
}
else {
tipo = 3;
}
@ -238,20 +241,20 @@ class Home extends Component {
>
<View style={styles.homeHeader}>
<View style={styles.userImageContainer}>
{this.props.user.Avatar != null && <Image
{this.props.user.Avatar != null && <Image
style={styles.userImage}
source={{
uri: this.props.user.Avatar
}}
/>
}{ this.props.user.Avatar==null &&
<Image
style={styles.userImage}
source={require('../assets/logo_black.jpg')}
/>}
}{this.props.user.Avatar == null &&
<Image
style={styles.userImage}
source={require('../assets/logo_black.jpg')}
/>}
</View>
{this.props.user != undefined && (
<Text style={styles.userText}>{this.props.user.Name}</Text>
<Text style={styles.userText} numberOfLines={1}>{this.props.user.Name}</Text>
)}
{this.props.user != undefined && (
<Text style={styles.userTextSub}>
@ -266,11 +269,11 @@ class Home extends Component {
flexDirection: "row",
alignItems: "center",
alignContent: "center",
alignSelf:'center'
alignSelf: 'center'
}}
>
<Text
style={{ textAlign: "right", fontSize: 12, paddingTop:10 , marginRight:5}}
style={{ textAlign: "right", fontSize: 12, paddingTop: 10, marginRight: 5 }}
>
Arrasta o ecrã para atualizar
</Text>
@ -349,12 +352,12 @@ class Home extends Component {
</Text>
</View>
<View style={{ margin: 10 }}>
<Text style={{ fontSize: 12, textAlign: "center" }}>
<Text style={{ fontSize: 13, textAlign: "center" }}>
Para participares no ENEI caching ou no Rally Tascas deves
formar uma equipa (4 a 6) elementos.
</Text>
<Text
style={{ fontSize: 12, textAlign: "center", margin: 5 }}
style={{ fontSize: 13, textAlign: "center", margin: 5 }}
>
Ao criares a equipa, ficas como capitão. Podes adicionar e
remover outros elementos.
@ -428,9 +431,9 @@ class Home extends Component {
</View>
</View>
<Text
style={{ fontSize: 12, textAlign: "center", margin: 5 }}
style={{ fontSize: 13, textAlign: "center", margin: 5 }}
>
A incrição no Rally tem custo de 5 por elemento. A equipa
A inscrição no Rally tem custo de 5 por elemento. A equipa
apenas fica ativa quando efectuar o pagamento na banca no
ENEI
</Text>
@ -471,6 +474,7 @@ class Home extends Component {
fontWeight: "bold",
marginBottom: 0
}}
numberOfLines={1}
>
{this.props.team.nome}
</Text>
@ -563,7 +567,7 @@ class Home extends Component {
<IconFA name="user" size={40} />
</View>
<View style={styles.userT}>
<Text style={styles.userName}>
<Text style={styles.userName} numberOfLines={1}>
{item.fullName}
</Text>
<Text>{item.qRcode}</Text>
@ -571,15 +575,15 @@ class Home extends Component {
{this.props.user.Code ==
this.props.team.cap.qRcode && (
<TouchableOpacity
style={styles.userRemove}
onPress={() => this._rm(item.qRcode)}
>
<Text style={{ fontWeight: "bold" }}>
remover
<TouchableOpacity
style={styles.userRemove}
onPress={() => this._rm(item.qRcode)}
>
<Text style={{ fontWeight: "bold" }}>
remover
</Text>
</TouchableOpacity>
)}
</TouchableOpacity>
)}
</View>
)}
<Divider style={{ backgroundColor: "black" }} />
@ -588,9 +592,11 @@ class Home extends Component {
/>
</View>
</View>
<TouchableOpacity onPress={() => navigate("teamDetail")} style={{backgroundColor:'orange'}}><Text style={{color:'white', fontSize:17, fontWeight:'bold', margin:10, textAlign:'center'}}>Ver o progresso da equipa </Text></TouchableOpacity>
</View>
{(this.props.team.ativa || this.props.team.eventId==3 ) && <TouchableOpacity onPress={() => navigate("teamDetail")} style={{ backgroundColor: 'green' }}><Text style={{ color: 'white', fontSize: 17, fontWeight: 'bold', margin: 10, textAlign: 'center' }}>Ver o progresso da equipa </Text></TouchableOpacity>
}
{!this.props.team.ativa && this.props.team.eventId==1 &&<TouchableOpacity onPress={() => navigate("teamDetail")} style={{ backgroundColor: 'orange' }}><Text style={{ color: 'white', fontSize: 17, fontWeight: 'bold', margin: 10, textAlign: 'center' }}>Deves efectuar o pagamento</Text></TouchableOpacity>
}</View>
</View>
)}
</View>

View File

@ -146,7 +146,7 @@ class Jogo extends React.Component {
</Text>
</View>
<View style={{ width: "100%", marginTop: 10 }}>
<TouchableOpacity onPress={()=>this.handleClick(this.state.cromo.websitecromo)} >
<TouchableOpacity onPress={()=>this.handleClick(this.state.cromo.websiteCromo)} >
<Text
style={{
textAlign: "center",
@ -270,10 +270,10 @@ class Jogo extends React.Component {
{this.props.cromos!= undefined &&
<ProgressBarAnimated
width={barWidth * 0.7}
value={this.props.cromos.pontuacao*100/256}
value={this.props.cromos.pontuacao*100/1024}
backgroundColorOnComplete="#CC2A17"
/>}
<Text style={{ fontWeight: "bold" }}>256</Text>
<Text style={{ fontWeight: "bold" }}>1024</Text>
</View>
</View>
</View>
@ -316,7 +316,7 @@ class Jogo extends React.Component {
</View>
</TouchableOpacity>
)}
numColumns={4} // Número de colunas
numColumns={5} // Número de colunas
/>}
</View>
</ScrollView>
@ -333,7 +333,8 @@ const styles = StyleSheet.create({
marginTop: -25,
marginLeft: 10,
fontWeight: "bold",
color: "#CC1A17"
color: "#CC1A17",
// backgroundColor:"#cc1a17",
},
cromosContainer: {
@ -418,9 +419,11 @@ const styles = StyleSheet.create({
marginTop: 156
},
number: {
marginTop: -18,
marginLeft: 103,
textAlign: "center"
marginTop: -13,
marginLeft: 100,
textAlign: "center",
color:'#cc1a17'
}
});

View File

@ -35,8 +35,13 @@ import {RkButton,
this.setState({code:e.data});
this.props.scanQrCode({UserQR:this.props.user.Code, ScanQR: e.data},this.props.internalToken);
setTimeout(()=> {
if(this.scanner!=null)
this.scanner.reactivate()
},
2000
)
};
state = {
@ -79,7 +84,7 @@ import {RkButton,
showMarker={true}
cameraStyle={{ height: SCREEN_HEIGHT }}
fadeIn={true}

View File

@ -168,7 +168,7 @@ class calendarDetail extends React.Component {
<FitImage
source={{
uri:
"https://tickets.enei.pt/adminpoint/Content/Images/Uploads/Speakers/ffb043cb-3073-421c-a070-5d273b50fc23.jpeg"
`https://tickets.enei.pt/adminpoint/Content/Images/Uploads/Speakers/${item.Photo}`
}}
style={{ padding: 5 }}
/>
@ -183,7 +183,7 @@ class calendarDetail extends React.Component {
>
{item.Name}
</Text>
<Text style={{ marginLeft: 10 }}>
<Text style={{ marginLeft: 10 , textAlign:'justify'}}>
{item.MoreInfo}
</Text>
<TouchableOpacity>
@ -207,7 +207,7 @@ class calendarDetail extends React.Component {
>
Descrição do orador:
</Text>
<Text style={{ margin: 10 }}>{item.Description}</Text>
<Text style={{ margin: 10, textAlign:"justify" }}>{item.Description}</Text>
</View>
</View>
)}
@ -223,7 +223,7 @@ class calendarDetail extends React.Component {
</Text>
<Divider style={{ backgroundColor: "#000" }} />
<View style={{ marginTop: 10 }}>
<Text>{this.props.sessionDetail.Description}</Text>
<Text style={{textAlign:'justify'}}>{this.props.sessionDetail.Description}</Text>
</View>
</View>
</View>

View File

@ -311,7 +311,7 @@ class choosePath extends React.Component {
<ScrollView style={styles.page}>
{this._findPath("IA") && (
<LinearGradient
colors={["#D95856", "#CC1A17"]}
colors={["#F54B10", "#F54B10"]}
style={styles.linearGradient}
>
<Text
@ -341,7 +341,7 @@ class choosePath extends React.Component {
)}
{this._findPath("NET") && (
<LinearGradient
colors={["#4D76B3", "#055CA0"]}
colors={["#214198", "#214198"]}
style={styles.linearGradient}
>
<Text
@ -370,7 +370,7 @@ class choosePath extends React.Component {
)}
{this._findPath("WEB") && (
<LinearGradient
colors={["#FDC657", "#FBB81B"]}
colors={["#3A1484", "#3A1484"]}
style={styles.linearGradient}
>
<Text
@ -399,7 +399,7 @@ class choosePath extends React.Component {
)}
{this._findPath("IOT") && (
<LinearGradient
colors={["#69447F", "#4B266A"]}
colors={["#EC174A", "#EC174A"]}
style={styles.linearGradient}
>
<Text
@ -432,7 +432,7 @@ class choosePath extends React.Component {
)}
{this._findPath("DS") && (
<LinearGradient
colors={["#F28C59", "#ED6B33"]}
colors={["#DC160D", "#DC160D"]}
style={styles.linearGradient}
>
<Text
@ -474,7 +474,7 @@ class choosePath extends React.Component {
)}
{this._findPath("MOB") && (
<LinearGradient
colors={["#559159", "#0B7D3C"]}
colors={["#971384", "#971384"]}
style={styles.linearGradient}
>
<Text
@ -531,11 +531,11 @@ class choosePath extends React.Component {
}}
>
<Picker.Item label="Artificial Intelligence" value="9" />
<Picker.Item label="Networking and Securiy" value="10" />
<Picker.Item label="Networking and Security" value="10" />
<Picker.Item label="Data Science" value="15" />
<Picker.Item label="Web development" value="14" />
<Picker.Item label="Mobile development" value="11" />
<Picker.Item label="Internet of things" value="12" />
<Picker.Item label="Web Development" value="14" />
<Picker.Item label="Mobile Development" value="11" />
<Picker.Item label="Internet of Things" value="12" />
</Picker>
</View>
<View style={{ width: SCREEN_WIDTH }}>
@ -825,8 +825,10 @@ class choosePath extends React.Component {
<Text
style={{
fontSize: 15,
fontWeight: "bold"
fontWeight: "bold",
maxWidth:150
}}
>
{item[index].Name}
</Text>
@ -881,7 +883,8 @@ class choosePath extends React.Component {
style={{
fontSize: 15,
fontWeight: "bold",
marginLeft: 5
marginLeft: 5,
maxWidth:150
}}
>
{item[index].Name}
@ -890,7 +893,8 @@ class choosePath extends React.Component {
<Text
style={{
marginTop: 10,
marginBottom: 5
marginBottom: 5,
marginLeft:25
}}
>
{item[index].MaxAttendees -
@ -908,6 +912,7 @@ class choosePath extends React.Component {
}
unfilledColor={"white"}
width={150}
style={{marginLeft:25}}
/>
)}
</View>

View File

@ -147,6 +147,7 @@ class event extends React.Component {
marginBottom: 10,
fontSize: 20,
color: "#CC1A17"
}}
>
{info.nome}

View File

@ -81,14 +81,16 @@ class eventDetail extends React.Component {
alignSelf: "center"
}}
>
<View style={styles.leftRow}>
<View>
<Text
style={{
margin: 10,
marginTop: 0,
marginBottom: 10,
fontSize: 20,
color: "#CC1A17"
color: "#CC1A17",
width:'100%'
}}
>
{info.location.nome}
@ -110,7 +112,7 @@ class eventDetail extends React.Component {
</Text>
<Divider style={{ backgroundColor: "#000" }} />
<View style={{ marginTop: 10 }}>
<Text>{info.location.desc}</Text>
<Text style={{textAlign:'justify'}}>{info.location.desc}</Text>
</View>
<Text
style={{
@ -124,7 +126,7 @@ class eventDetail extends React.Component {
</Text>
<Divider style={{ backgroundColor: "#000" }} />
<View style={{ marginTop: 10 }}>
<Text>{info.location.desafio}</Text>
<Text style={{textAlign:"justify"}}>{info.location.desafio}</Text>
</View>
</View>
</View>
@ -171,7 +173,7 @@ class eventDetail extends React.Component {
</Text>
<Divider style={{ backgroundColor: "#000" }} />
<View style={{ marginTop: 10 }}>
<Text>{info.desc}</Text>
<Text style={{textAlign:'justify'}}>{info.desc}</Text>
</View>
<Text
style={{

89
App/app/screens/map.js Normal file
View File

@ -0,0 +1,89 @@
import * as React from "react";
import {
View,
StyleSheet,
Dimensions,
Text,
Button,
ScrollView,
Image,
TouchableOpacity,
FlatList,
ActivityIndicator,
Modal
} from "react-native";
import IconFA from "react-native-vector-icons/FontAwesome5";
import { TabView, TabBar, SceneMap } from "react-native-tab-view";
import rallyImg from "../assets/rallyTascas.jpg";
import { connect } from "react-redux";
import { bindActionCreators } from "redux";
import * as Actions from "../store/actions"; //Import your actionss
const SCREEN_HEIGHT = Dimensions.get("window").height;
const SCREEN_WIDTH = Dimensions.get("window").width;
import ImageViewer from 'react-native-image-zoom-viewer';
import PTRView from "react-native-pull-to-refresh";
const images = [{
url: 'https://enei.pt/imgs/mapa.png'
},]
class map extends React.Component {
_update = () => {
this.props.getAllEvents(this.props.internalToken);
this.props.getEventLocsVisited(
this.props.team.id,
this.props.internalToken
);
};
componentDidMount() {
}
render() {
const { navigate } = this.props.navigation;
return (
<ImageViewer imageUrls={images}/>
)
}
}
const styles = StyleSheet.create({
});
function mapStateToProps(state, props) {
return {
token: state.apiReducer.token,
user: state.apiReducer.user,
logged: state.apiReducer.logged,
userDetails: state.apiReducer.userDetails,
onHold: state.apiReducer.onHold,
bilhete: state.apiReducer.bilhete,
alimentacao: state.apiReducer.alimentacao,
alojamento: state.apiReducer.alojamento,
acesso: state.apiReducer.acesso,
team: state.apiReducer.team,
internalToken: state.apiReducer.internalToken,
eventsInternal: state.apiReducer.eventsInternal
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators(Actions, dispatch);
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(map);

View File

@ -210,7 +210,7 @@ class teamDetail extends React.Component {
>
{item.location.nome}
</Text>
<Text style={{ fontSize: 12, padding: 15 }}>
<Text style={{ fontSize: 12, padding: 15 }} numberOfLines={5}>
{item.location.desc}
</Text>
</View>

View File

@ -68,7 +68,7 @@ export function scanQrCode(data, tokenInternal) {
})
.catch(err => {
console.log(err);
Alert.alert("ERRO!", "Existiu um no scan do QRCode");
Alert.alert("ERRO!", "Existiu um erro no scan do QRCode\nOu esse QR code não existe ou já tens o cromo conquistado.");
});
};
}
@ -160,7 +160,7 @@ export function getCromos(user, tokenInternal) {
})
.catch(p => {
console.log(p);
Alert.alert("ERRO!", "erro a obter os eventos");
Alert.alert("ERRO!", "Erro a obter os cromos.");
});
dispatch({
@ -864,32 +864,32 @@ function getCareerPath(sessions) {
for (let key in sessions) {
if (sessions[key].Name == "IA") {
careerPath = "Artificial Intelligence";
careerColor = "#CC1A17";
careerColor = "#F54B10";
code = "IA";
}
if (sessions[key].Name == "IOT") {
careerPath = "Internet of things";
careerColor = "#4B266A";
careerPath = "Internet of Things";
careerColor = "#EC174A";
code = "IOT";
}
if (sessions[key].Name == "WEB") {
careerPath = "Web development";
careerColor = "#FBB81B";
careerPath = "Web Development";
careerColor = "#3A1484";
code = "WEB";
}
if (sessions[key].Name == "NET") {
careerPath = "Networking and Security";
careerColor = "#055CA0";
careerColor = "#214198";
code = "NET";
}
if (sessions[key].Name == "MOB") {
careerPath = "Mobile Development";
careerColor = "#0B7D3C";
careerColor = "#971384";
code = "MOB";
}
if (sessions[key].Name == "DS") {
careerPath = "Data Science";
careerColor = "#ED6B33";
careerColor = "#DC160D";
code = "DS";
}
}
@ -1401,7 +1401,8 @@ function getE(user, careerPath, token) {
name: user.Sessions[key].Name,
Enrolled: user.Sessions[key].Enrolled,
MaxAttendees: user.Sessions[key].MaxAttendees,
day: moment(user.Sessions[key].SessionStart).format("DD")
day: moment(user.Sessions[key].SessionStart).format("DD"),
LocalRoom: user.Sessions[key].LocalRoom
});
}
}
@ -1412,163 +1413,63 @@ function getE(user, careerPath, token) {
c = [],
d = [];
//MEU DEUS QUE É ISTO???
if (careerPath != undefined && careerPath.code == "IA" || careerPath.code == "WEB") {
b.push({
Id: 22,
time: "13:30",
description: "Almoço para os career path's de IA e WEB",
day: "13",
name: "Almoço",
place: "Cantina do ISEC"
})
c.push({
Id: 22,
time: "13:30",
description: "Almoço para os career path's de IA e WEB",
day: "14",
name: "Almoço",
place: "Cantina do ISEC"
})
d.push({
Id: 22,
time: "13:30",
description: "Almoço para os career path's de IA e WEB",
day: "15",
name: "Almoço",
place: "Cantina do ISEC"
})
a.push({
Id: 22,
time: "19:00",
description: "Jantar para os career path's de IA e WEB",
day: "12",
name: "Jantar",
place: "Cantina do ISEC"
});
b.push({
Id: 22,
time: "19:00",
description: "Jantar para os career path's de IA e WEB",
day: "13",
name: "Jantar",
place: "Cantina do ISEC"
});
c.push({
Id: 22,
time: "19:00",
description: "Jantar para os career path's de IA e WEB",
day: "14",
name: "Jantar",
place: "Cantina do ISEC"
});
}
if (careerPath != undefined && careerPath.code == "IOT" || careerPath.code == "NET") {
b.push({
Id: 22,
time: "12:15",
description: "Almoço para os career path's de IOT e NET",
day: "13",
name: "Almoço",
place: "Cantina do ISEC"
})
c.push({
Id: 22,
time: "12:15",
description: "Almoço para os career path's de IOT e NET",
day: "14",
name: "Almoço",
place: "Cantina do ISEC"
})
d.push({
Id: 22,
time: "12:15",
description: "Almoço para os career path's de IOT e NET",
day: "15",
name: "Almoço",
place: "Cantina do ISEC"
})
a.push({
Id: 22,
time: "19:30",
description: "Jantar para os career path's de IOT e NET ",
day: "12",
name: "Jantar",
place: "Cantina do ISEC"
});
b.push({
Id: 22,
time: "19:30",
description: "Jantar para os career path's de IOT e NET",
day: "13",
name: "Jantar",
place: "Cantina do ISEC"
});
c.push({
Id: 22,
time: "19:30",
description: "Jantar para os career path de IOT e NET",
day: "14",
name: "Jantar",
place: "Cantina do ISEC"
});
}
if (careerPath != undefined && careerPath.code == "DS" || careerPath.code == "MOB") {
b.push({
Id: 22,
time: "12:45",
description: "Almoço para os career paths de DS e MOB ",
day: "13",
name: "Jantar",
place: "Cantina do ISEC"
});
c.push({
Id: 22,
time: "12:45",
description: "Almoço para os career paths de DS e MOB ",
day: "13",
name: "Jantar",
place: "Cantina do ISEC"
});
d.push({
Id: 22,
time: "12:45",
description: "Almoço para os career paths de DS e MOB ",
day: "13",
name: "Jantar",
place: "Cantina do ISEC"
});
a.push({
Id: 22,
time: "20:00",
description: "Jantar para os career paths de DS e MOB ",
day: "12",
name: "Jantar",
place: "Cantina do ISEC"
});
b.push({
Id: 22,
time: "20:00",
description: "Jantar para os career paths de DS e MOB ",
day: "13",
name: "Jantar",
place: "Cantina do ISEC"
});
c.push({
Id: 22,
time: "20:00",
description: "Jantar para os career paths de DS e MOB ",
day: "14",
name: "Jantar",
place: "Cantina do ISEC"
});
}
b.push({
Id: 22,
time: "12:15",
description: "Poderás escolher entre carne, peixe ou prato vegetariano e ainda tens uma sopa e sobremesa",
day: "13",
name: "Almoço.",
place: "Cantina do ISEC"
})
c.push({
Id: 23,
time: "12:15",
description: "Poderás escolher entre carne, peixe ou prato vegetariano e ainda tens uma sopa e sobremesa.",
day: "14",
name: "Almoço",
place: "Cantina do ISEC"
})
d.push({
Id: 24,
time: "12:15",
description: "Poderás escolher entre carne, peixe ou prato vegetariano e ainda tens uma sopa e sobremesa.",
day: "15",
name: "Almoço",
place: "Cantina do ISEC"
})
a.push({
Id: 35,
time: "19:00",
description: "Foi um longo dia e estás cheio de fome, dirigi-te à nossa cantina para usufruires do jantar. Poderás escolher entre carne, peixe ou prato vegetariano e ainda tens uma sopa e sobremesa. ",
day: "12",
name: "Jantar",
place: "Cantina do ISEC"
});
b.push({
Id: 36,
time: "19:00",
description: "Foi um longo dia e estás cheio de fome, dirigi-te à nossa cantina para usufruires do jantar. Poderás escolher entre carne, peixe ou prato vegetariano e ainda tens uma sopa e sobremesa.",
day: "13",
name: "Jantar",
place: "Cantina do ISEC"
});
c.push({
Id: 37,
time: "19:00",
description: "Foi um longo dia e estás cheio de fome, dirigi-te à nossa cantina para usufruires do jantar. Poderás escolher entre carne, peixe ou prato vegetariano e ainda tens uma sopa e sobremesa. ",
day: "14",
name: "Jantar",
place: "Cantina do ISEC"
});
a.push({
Id: 48,
time: "21:00",
description:
"Festarola do evento",
"Para começar o primeiro dia em grande, temos reservado para ti a maior festa",
name: "Festarola",
Enrolled: 700,
MaxAttendees: 300,
@ -1653,7 +1554,7 @@ function getE(user, careerPath, token) {
Enrolled: result["12"][key].Enrolled,
MaxAttendees: result["12"][key].MaxAttendees,
day: result["12"][key].day,
place: ""
place: result["12"][key].LocalRoom
});
}
@ -1668,7 +1569,7 @@ function getE(user, careerPath, token) {
Enrolled: result["13"][key].Enrolled,
MaxAttendees: result["13"][key].MaxAttendees,
day: result["13"][key].day,
place: ""
place: result["13"][key].LocalRoom
});
}
for (let key in result["14"]) {
@ -1682,7 +1583,7 @@ function getE(user, careerPath, token) {
Enrolled: result["14"][key].Enrolled,
MaxAttendees: result["14"][key].MaxAttendees,
day: result["14"][key].day,
place: ""
place: result["14"][key].LocalRoom
});
}
@ -1697,7 +1598,7 @@ function getE(user, careerPath, token) {
Enrolled: result["15"][key].Enrolled,
MaxAttendees: result["15"][key].MaxAttendees,
day: result["15"][key].day,
place: ""
place: result["15"][key].LocalRoom
});
}
a = _.sortBy(a, function (o) {
@ -1938,7 +1839,7 @@ export function getUserInfo(token) {
axios.defaults.baseURL = "https://api.enei.pt";
axios
.get(`api / EventLocsVisited / t / ${v.data.id}`)
.get(`/api/EventLocsVisited/t/${v.data.id}`)
.then(c => {
console.log("sucesso!");

View File

@ -15,13 +15,13 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.1</string>
<string>1.3</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>12</string>
<string>15</string>
<key>LSApplicationCategoryType</key>
<string></string>
<string>public.app-category.utilities</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
@ -50,7 +50,7 @@
<key>NSLocationWhenInUseUsageDescription</key>
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
<key>NSMicrophoneUsageDescription</key>
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
<string>Not really used, but the module asks for it when openning the camera.</string>
<key>NSMotionUsageDescription</key>
<string>Not used, just added this key because i used react-native and needed this keys for approval.</string>
<key>NSPhotoLibraryAddUsageDescription</key>

15
App/package-lock.json generated
View File

@ -7961,7 +7961,6 @@
}
}
},
"react-native-image-overlay": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/react-native-image-overlay/-/react-native-image-overlay-0.1.2.tgz",
@ -7970,7 +7969,19 @@
"prop-types": "^15.6.1"
}
},
"react-native-image-pan-zoom": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/react-native-image-pan-zoom/-/react-native-image-pan-zoom-2.1.11.tgz",
"integrity": "sha512-ZCisGUFpPchHXsjT7ZI0anlSLPgcTmjRKXqpVnPu3RDWFXfKjuL4zpY57DX4Y8YgGZCpbf9fApN7KjVYody2Mw=="
},
"react-native-image-zoom-viewer": {
"version": "2.2.25",
"resolved": "https://registry.npmjs.org/react-native-image-zoom-viewer/-/react-native-image-zoom-viewer-2.2.25.tgz",
"integrity": "sha512-/w3GsUD9F5c6ZE+3GC1UmE0I9yCAfTf/5Jjz5bDCvIQFp2MoMod3BQzRnZ1PjZbCq6a90eZ5rnB2Zvm1rFOgeQ==",
"requires": {
"react-native-image-pan-zoom": "^2.1.9"
}
},
"react-native-ionicons": {
"version": "4.5.5",
"resolved": "https://registry.npmjs.org/react-native-ionicons/-/react-native-ionicons-4.5.5.tgz",

View File

@ -27,9 +27,8 @@
"react-native-elements": "^1.0.0",
"react-native-fit-image": "^1.5.4",
"react-native-gesture-handler": "^1.0.15",
"react-native-image-overlay": "^0.1.2",
"react-native-image-zoom-viewer": "^2.2.25",
"react-native-ionicons": "^4.5.5",
"react-native-linear-gradient": "^2.5.3",
"react-native-loader": "^1.2.1",

BIN
api/.DS_Store vendored Normal file → Executable file

Binary file not shown.

View File

@ -25,7 +25,7 @@ namespace api.Controllers
public class AuthController : ControllerBase
{
private readonly DataContext context;
private readonly DataContext context;
private readonly IConfiguration config;
public UserManager<User> _userManager { get; }
public SignInManager<User> _signInManager { get; }
@ -34,19 +34,19 @@ namespace api.Controllers
private readonly RoleManager<Role> _roleManager;
private readonly System.Net.Http.IHttpClientFactory clientFactory;
public AuthController(DataContext context,IConfiguration config, UserManager<User> UserManager, SignInManager<User> SignInManager, IMapper mapper, RoleManager<Role> roleManager, IUsersRepository repo, System.Net.Http.IHttpClientFactory clientFactory)
public AuthController(DataContext context, IConfiguration config, UserManager<User> UserManager, SignInManager<User> SignInManager, IMapper mapper, RoleManager<Role> roleManager, IUsersRepository repo, System.Net.Http.IHttpClientFactory clientFactory)
{
_mapper = mapper;
_mapper = mapper;
_roleManager = roleManager;
_repo = repo;
this.clientFactory = clientFactory;
this.config = config;
_userManager = UserManager;
_signInManager = SignInManager;
this.context = context;
this.context = context;
}
[HttpPost("register")]
public async Task<IActionResult> Register(UserForRegisterDto userToRegister)
@ -54,7 +54,7 @@ namespace api.Controllers
var userToCreate = _mapper.Map<User>(userToRegister);
var result = await _userManager.CreateAsync(userToCreate, userToRegister.password);
if (result.Succeeded)
{
return StatusCode(201);
@ -62,6 +62,9 @@ namespace api.Controllers
return BadRequest(result.Errors);
}
[HttpPost("login")]
public async Task<IActionResult> Login(UserForLoginDto UserForLoginDto)
{
@ -87,44 +90,48 @@ namespace api.Controllers
}
[HttpPost("loginQR")]
public async Task<IActionResult> loginQr(loginQr a){
var u = await _userManager.FindByNameAsync(a.QRcode);
using (var client = new HttpClient())
{
try{
var url = "https://tickets.enei.pt/internal/api/Attendee/Detail";
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + a.token);
public async Task<IActionResult> loginQr(loginQr a)
{
var response = await client.GetStringAsync(url);
var u = await _userManager.FindByNameAsync(a.QRcode);
// Console.WriteLine(response);
//var resource = JObject.Parse(response);
var appUser = await _userManager.Users.FirstOrDefaultAsync(SU => SU.NormalizedUserName == a.QRcode.ToUpper());
return Ok(new
using (var client = new HttpClient())
{
try
{
token = GenerateJwtToken(appUser).Result
});
var url = "https://tickets.enei.pt/internal/api/Attendee/Detail";
}catch(Exception e){
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + a.token);
Console.WriteLine(e);
return Unauthorized();
var response = await client.GetStringAsync(url);
}
// Console.WriteLine(response);
//var resource = JObject.Parse(response);
var appUser = await _userManager.Users.FirstOrDefaultAsync(SU => SU.NormalizedUserName == a.QRcode.ToUpper());
return Ok(new
{
token = GenerateJwtToken(appUser).Result
});
}
return Unauthorized();
catch (Exception e)
{
Console.WriteLine(e);
return Unauthorized();
}
}
return Unauthorized();
}
@ -138,8 +145,9 @@ namespace api.Controllers
var roles = await _userManager.GetRolesAsync(user);
foreach(var role in roles) {
claims.Add(new Claim(ClaimTypes.Role,role));
foreach (var role in roles)
{
claims.Add(new Claim(ClaimTypes.Role, role));
}
//obtem a key na app settings
@ -151,7 +159,7 @@ namespace api.Controllers
//criamos um token
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Subject = new ClaimsIdentity(claims),
//data de expiração (atual + 24 horas)
Expires = DateTime.Now.AddDays(30),

View File

@ -49,10 +49,20 @@ namespace api.Controllers
if (Int32.Parse(usrCromos[i]) == c.Id)
{
soma += c.pontos;
Cromos toAdd = new Cromos { Id = c.Id, Nome = c.Nome, DescMostrar = c.DescUnlocked, QRCode = c.QRCode, img = c.img, unlocked = true, websiteCromo = c.websiteCromo, pontos = c.pontos, logo = c.logo };
rList.Add(toAdd);
found = true;
var d = rList.Find(x => x.Id == c.Id);
if (d != null)
continue;
else
{
soma += c.pontos;
rList.Add(toAdd);
found = true;
}
}

View File

@ -26,57 +26,70 @@ namespace api.Controllers
this.context = context;
_mapper = mapper;
}
// PSOT api/scan
// POST scan de QR code
[HttpPost]
public async Task<IActionResult> doScan(QRToScan ScanData)
{
Boolean crExist = false;
User usr = await context.Users.FirstOrDefaultAsync(b=>b.QRcode == ScanData.UserQR);
User usr = await context.Users.FirstOrDefaultAsync(b => b.QRcode == ScanData.UserQR);
var allUsers = await context.Users.ToListAsync();
var allCromos = await context.Cromos.ToListAsync();
var userAProcurar = await context.Users.FirstOrDefaultAsync(c=>c.QRcode == ScanData.ScanQR);
var userAProcurar = await context.Users.FirstOrDefaultAsync(c => c.QRcode == ScanData.ScanQR);
ScanReturn toReturn = new ScanReturn{tipo = -1};
ScanReturn toReturn = new ScanReturn { tipo = -1 };
if (userAProcurar != null)
{
if(userAProcurar != null){
UserForListDto ru = new UserForListDto();
_mapper.Map(userAProcurar,ru);
_mapper.Map(userAProcurar, ru);
toReturn.user = ru;
toReturn.tipo=1;
toReturn.tipo = 1;
return Ok(toReturn);
}else{
allCromos.ForEach(delegate(Cromos c){
if(c.QRCode == ScanData.ScanQR){
string[] cromosArr = usr.cromos.Split(",").ToArray();
int[] cromosIntArr = Array.ConvertAll(cromosArr,Int32.Parse);
for(var i =0;i<cromosIntArr.Length;i++){
if(cromosIntArr[i] == c.Id){ //cromos ja existe no user
crExist = true;
}
else
{
bool repetido = false;
allCromos.ForEach(delegate (Cromos c)
{
if (c.QRCode == ScanData.ScanQR)
{
toReturn.tipo = 0;
string[] usrCromos = usr.cromos.Substring(1).Split(",");
foreach (string cromo in usrCromos)
{
Console.WriteLine("cromo: "+cromo);
if (c.Id == Int32.Parse(cromo))
{
repetido = true;
Console.WriteLine("cromo repetido");
}
}
if(crExist){
toReturn.tipo=-1; //tipo erro
toReturn.resp = "Cromo já existente!";
}else{
toReturn.tipo=0;
if (!repetido)
{
usr.cromos = usr.cromos + "," + c.Id;
context.Users.Update(usr);
context.SaveChanges();
toReturn.resp = "Cromo Adicionado!";
}
}
});
if (repetido)
{
return Unauthorized();
}
return Ok(toReturn);
}
//return toReturn;
}
}

View File

@ -104,12 +104,12 @@ namespace api.Controllers
if (allTeams[i].Id == rUsr.team.Id)
{
rTeam.ativa= allTeams[i].pagamento;
rTeam.ativa = allTeams[i].pagamento;
_mapper.Map(allTeams[i], rTeam);
var usr = await context.Users.FirstOrDefaultAsync(a => a.QRcode == allTeams[i].CapQR);
var users = await context.Users.ToListAsync();
List<UserForListDto> usersToReturn = new List<UserForListDto>();
@ -133,12 +133,17 @@ namespace api.Controllers
_mapper.Map(usr, uT);
rTeam.Membros = usersToReturn;
rTeam.Cap = uT;
}
}
if(rTeam.Id==0 && rTeam.NMembros==0){
return NotFound();
}
return Ok(rTeam);
}
// POST api/teams/add
@ -184,7 +189,7 @@ namespace api.Controllers
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == MemberToAdd.id);
if (newMember.team == null)
if (newMember.team == null && tEdit.NMembros<6)
{
tEdit.NMembros++;
@ -215,6 +220,11 @@ namespace api.Controllers
User cap = await context.Users.FirstOrDefaultAsync(u => u.QRcode == NameChange.UserQR);
Team findTeam = await context.Teams.FirstOrDefaultAsync(n=>n.Nome == NameChange.nome);
if(findTeam!= null){
return Unauthorized();
}
if (cap.QRcode == tEdit.CapQR)
{
tEdit.Nome = NameChange.nome;
@ -238,7 +248,7 @@ namespace api.Controllers
User cap = await context.Users.FirstOrDefaultAsync(u => u.QRcode == DeleteData.UserQR);
if (tEdit != null && cap.QRcode == tEdit.CapQR)
{
context.Teams.Remove(tEdit);
@ -251,7 +261,7 @@ namespace api.Controllers
{
return StatusCode(403);
}
}
// POST api/teams/remove/member
@ -268,12 +278,12 @@ namespace api.Controllers
User rmMember = await context.Users.FirstOrDefaultAsync(u => u.QRcode == MemberToRemove.UserToRemoveQR);
Console.WriteLine(rmMember.QRcode);
//encontra a equipa de onde quer remover o user
Team tEdit = await context.Teams.FirstOrDefaultAsync(t => t.Id == MemberToRemove.TeamID);
Console.WriteLine(tEdit.Nome);
var id = 0;
if (rmMember.QRcode == tEdit.CapQR)

View File

@ -87,25 +87,62 @@ namespace api.Controllers
}
[Authorize(Policy = "RequireAdminRole")]
//[Authorize(Policy = "RequireAdminRole")]
[AllowAnonymous]
[HttpPost("updateAll")]
public async Task<IActionResult> UpdateUsers(updateUsersDTO[] req)
public async Task<IActionResult> UpdateUsers([FromBody] updateUsersDTO[] req)
{
try
foreach (updateUsersDTO u in req)
{
foreach (var user in req)
User a = await _repo.GetUser(u.barcode);
if (a != null)
{
Console.Write(a.QRcode + "existe \n");
}
return Ok(req);
}
catch (Exception e)
{
else
{
UserForRegisterDto b = new UserForRegisterDto();
b.fullname = u.name;
b.qrcode = u.barcode;
b.email= u.email;
b.username= u.barcode;
b.password = "ENEI$2019MEgAPASSWORD" ;
var userToCreate = _mapper.Map<User>(b);
var result = await _userManager.CreateAsync(userToCreate, b.password);
if (result.Succeeded)
{
Console.WriteLine("adicionado com sucesso");
//return StatusCode(201);
}
//return BadRequest(result.Errors);
}
// Console.Write( _repo.GetUser(u.barcode));
//Console.Write(u.name);
//findUserByQR
//se tiver sido encontrado, atualiza
//senão adiciona
//
}
return Ok();
// var userFromRepo = await _repo.GetUser(id);
return Ok(req);
}
[HttpPut("{id}")]

View File

@ -7,6 +7,7 @@ using Microsoft.EntityFrameworkCore;
using api.Dtos;
using Microsoft.AspNetCore.Identity;
using api.Models;
using System.Net.Http;
namespace api.Controllers
{
@ -19,22 +20,90 @@ namespace api.Controllers
public mvcController(DataContext context, UserManager<User> userManager)
{
_context = context;
_context = context;
_userManager = userManager;
}
[HttpGet("")]
[HttpGet("/jogoenei")]
[AllowAnonymous]
public IActionResult landingPage() {
public IActionResult jogoENEI()
{
return View("Views/Landing/jogo.cshtml");
}
[HttpGet("/level1ctf")]
[AllowAnonymous]
public IActionResult level1()
{
return View("Views/Landing/1stpage.cshtml");
}
[AllowAnonymous]
[HttpGet("")]
public IActionResult landingPage()
{
return View("Views/Landing/index.cshtml");
}
[AllowAnonymous]
[HttpGet("/reset/{user}")]
public async Task<IActionResult> resetPassword(string user)
{
using (var client = new HttpClient())
{
try
{
var url = "https://tickets.enei.pt/internal/api/User/ResetPassword?code=" + user;
// client.DefaultRequestHeaders.Add("Authorization", "Bearer " + a.token);
var response = await client.GetStringAsync(url);
return View("Views/Landing/resetPage.cshtml");
}
catch (HttpRequestException a)
{
return View("Views/Landing/resetError.cshtml");
// return NotFound(a);
}
}
}
[HttpGet("/app")]
[AllowAnonymous]
public IActionResult appPage()
{
return View("Views/Landing/app.cshtml");
}
[HttpGet("/ctf")]
[AllowAnonymous]
public IActionResult ctfPage()
{
return View("Views/Landing/ctf.cshtml");
}
[AllowAnonymous]
[Route("{*url}", Order = 999)]
public IActionResult CatchAll()
{
Response.StatusCode = 404;
return View("Views/Landing/notFound.cshtml");
}
}
}

View File

@ -4,6 +4,7 @@ using api.Models;
using api.Data;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
namespace api.Data
{
@ -25,9 +26,11 @@ namespace api.Data
public async Task<List<EventLocVisited>> GetEventLocsVisitedTeam(int id)
{
List<EventLoc> allPlaces = await _context.EventLocs.ToListAsync();
Team t= await _context.Teams.FirstOrDefaultAsync(team=>team.Id== id);
List<EventLocVisited> allLocs = await _context.EventLocsVisited.Include(e => e.Team).Include(e => e.Location).ToListAsync();
List<EventLoc> allPlaces = await _context.EventLocs.Where(a=>a.EventId== t.EventId ).ToListAsync();
List<EventLocVisited> allLocs = await _context.EventLocsVisited.Where(Team=>Team.Id== id).Include(e => e.Team).Include(e => e.Location).ToListAsync();
List<EventLocVisited> rList = new List<EventLocVisited>();

View File

@ -8,13 +8,13 @@ namespace api.Data
public interface IUsersRepository
{
void Add<T>(T enity) where T: class;
void Delete<T>(T entity) where T: class;
void Add<T>(T enity) where T : class;
void Delete<T>(T entity) where T : class;
Task<bool> SaveAll();
Task<IEnumerable<User>> GetUsers();
Task<User> GetUser(int id);
Task<User> changeProfileImage(profileImage a);
Task<User> GetUser(string QR);
Task<string> getProfileImageAsync(string qrCode);
}

View File

@ -65,6 +65,11 @@ namespace api.Data
return user;
}
public async Task<User> GetUser(string QR){
var user = await _context.Users.FirstOrDefaultAsync(u=>u.QRcode == QR);
return user;
}
public async Task<IEnumerable<User>> GetUsers()
{

0
api/Dtos/getProfileImage.cs Normal file → Executable file
View File

0
api/Dtos/profileImage.cs Normal file → Executable file
View File

0
api/Dtos/profileImageToReturn.cs Normal file → Executable file
View File

7
api/Dtos/reset.cs Normal file
View File

@ -0,0 +1,7 @@
namespace api.Dtos
{
public class reset
{
public string email { get; set; }
}
}

View File

@ -4,6 +4,6 @@ namespace api.Dtos
{
public class updateJSONdto
{
public List<updateUsersDTO> users{get;set;}
public updateUsersDTO[] users{get;set;}
}
}

0
api/Migrations/20190323222043_uo.Designer.cs generated Normal file → Executable file
View File

0
api/Migrations/20190323222043_uo.cs Normal file → Executable file
View File

0
api/Migrations/DataContextModelSnapshot.cs Normal file → Executable file
View File

BIN
api/Views/.DS_Store vendored

Binary file not shown.

BIN
api/Views/Landing/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,177 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt" xml:lang="pt">
<head>
Password = "CTF_SacaFácil"
</head>
<body>
<header id="main-menu">
</header>
<header class="bg-gradient">
<div class="container-app">
<div class="header-app">
<h1>Aplicação ENEI 2019</h1>
<h3>Esta aplicação vai-te acompanhar durante todo o evento, melhorando drásticamente a interação com as
empresas e atividades.</h3>
</div>
<div class="image-holder-app">
<img src="imgs/header.png" alt="phone" class="img-fluid">
</div>
</div>
</header>
<div class="container features-app ">
<h3 class="subtitle">descobre as </h3>
<h1>Páginas da aplicação</h1>
<button class="tablink" onclick="openPage('Home', this, 'white')" id="defaultOpen">Home</button>
<button class="tablink" onclick="openPage('teams', this, 'white')">Equipas</button>
<button class="tablink" onclick="openPage('events', this, 'white')">Eventos</button>
<button class="tablink" onclick="openPage('game', this, 'white')">Jogo do ENEI</button>
<button class="tablink" onclick="openPage('calendar', this, 'white')">Calendário</button>
<button class="tablink" onclick="openPage('sign', this, 'white')">Inscrições </button>
</div>
<div class="download-app">
<div class="left">
<h1>Faz já o download da aplicação</h1>
<h3>Aplicação disponível nas típicas lojas de aplicações.</h3>
<div class="buttons">
<a href="https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1457702417&mt=8">
<div class="button-app">
<div class="button-logo">
<i class="fab fa-apple"></i>
</div>
<div class="button-text">
<h3>Available on the</h3>
<h2>App Store</h2>
</div>
</div>
</a>
<a href="https://play.google.com/store/apps/details?id=pt.enei">
<div class="button-app">
<div class="button-logo">
<i class="fab fa-google-play"></i>
</div>
<div class="button-text">
<h3>Available on the</h3>
<h2>Play Store</h2>
</div>
</div>
</a>
</div>
</div>
</div>
if (checkpass.substring(split*5, split*6) == 'zhpu') {
if (checkpass.substring(split*4, split*5) == 'guvf_') {
if (checkpass.substring(split*3, split*4) == 'pnzr_') {
if (checkpass.substring(split*2, split*3) == 'h_') {
if (checkpass.substring(split, split*2) == 'Shaal_') {
alert("You got the 2º flag upside-down!")
<!-- faqs section -->
<section id="faqs">
<div class="container">
<div class="row">
<div class="col-lg-5">
<div class="pre-h1">Perguntas Frequentes</div>
<h1>Faq</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<ul id="accordion">
<li>
<a href="#" title="O que é o ENEI?" rel="nofollow" class="toggle">O que é o ENEI?</a>
<div class="content-accordion">
<p>O Encontro Nacional de Estudantes de Informática (ENEI) é um evento que pretende
oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca
de
ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.
</p>
<p>Esta versão do evento também incluirá os tradicionais momentos de diversão noturnos
que
muito apelam a todos os participantes das antigas edições e são uma excelente via de
networking e transferência de conhecimento!</p>
</div>
</li>
<li>
<a href="#" title="Onde me posso inscrever?" rel="nofollow" class="toggle">Onde me posso
inscrever?</a>
<div class="content-accordion">
<p>Podes adquirir o teu bilhete <a href="https://tickets.enei.pt" title="Aqui">AQUI</a>.
</p>
</div>
</li>
<li>
<a href="#" title="Quando é que o programa vai estar disponível?" rel="nofollow"
class="toggle">Quando é que o programa vai estar disponível?</a>
<div class="content-accordion">
<p>O programa vai sendo lançado nas próximas semanas de forma iterativa.</p>
</div>
</li>
<li>
<a href="#" title="Quem pode participar no evento?" rel="nofollow" class="toggle">Quem pode
participar no evento?</a>
<div class="content-accordion">
<p>Podem participar no ENEI'19 todos os estudantes do Ensino Superior ou Secundário.</p>
</div>
</li>
<li>
<a href="#" title="Tenho acesso a todas as sessões?" rel="nofollow" class="toggle">Tenho
acesso a todas as sessões?</a>
<div class="content-accordion">
<p>Não, as palestras e workshops necessitam de inscrições visto que têm lugares
limitados.</p>
<p>Brevemente poderás te inscrever na aplicação móvel do ENEI'19!</p>
</div>
</li>
</ul>
</div>
</div>
</section>
<!-- footer -->
<footer>
<div class="container">
<div class="row">
<div class="col-lg-4 col-xs-6">
<p>© 2019 ENEI . Todos os direitos reservados</p>
</div>
<div class="col-lg-8 col-xs-6">
<ul id="social-network">
<li><a href="https://www.facebook.com/ENEIConf/" title="Facebook" target="_blank"
class="icon-facebook"></a></li>
<li><a href="https://www.instagram.com/eneiconf/" title="Instagram" target="_blank"
class="icon-instagram"></a></li>
<li><a href="https://www.linkedin.com/company/enei/" title="Linkedin" target="_blank"
class="icon-linkedin"></a></li>
<li><a href="mailto:geral@enei.pt" title="Email" target="_blank" class="icon-email"></a>
</li>
</ul>
</div>
</div>
</div>
</footer>
</body>
</html>

0
api/Views/Landing/android-chrome-256x256.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,386 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt" xml:lang="pt">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, user-scalable=0" name="viewport">
<meta content="width" name="MobileOptimized">
<meta content="true" name="HandheldFriendly">
<!-- Place favicon.ico in the root directory -->
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
<link rel="manifest" href="site.webmanifest">
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<title>ENEI'19</title>
<meta name="description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.">
<meta property="og:locale" content="pt_PT" />
<meta property="og:title" content="ENEI'19" />
<meta property="og:description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial." />
<meta property="og:site_name" content="ENEI'19" />
<meta property="og:url" content="http://www.enei.pt/" />
<meta property="og:image" content="http://www.enei.pt/imgs/share-image.jpg" />
<meta property="og:type" content="Website" />
<link rel="canonical" href="http://www.enei.pt/" />
<link href="bootstrap-grid.css" rel="stylesheet" type="text/css" />
<link href="main.css" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Bai+Jamjuree:400,600,700" rel="stylesheet">
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
</head>
<body>
<div id="overlay"></div>
<header id="main-menu">
<nav>
<a href="#" title="Abrir menu" rel="nofollow" id="open-menu-mobile">Menu</a>
<ul>
<li><a href="https://enei.pt/#enei" title="Enei">Enei</a></li>
<li><a href="https://enei.pt/#calendar">Programa</a></li>
<li><a href="https://enei.pt/#precos" title="Preços">Preços</a></li>
<li><a href="https://enei.pt/app" title="Preços">App</a></li>
<li><a href="https://enei.pt/ctf" title="CTF">CTF</li>
<li><a href="https://enei.pt/#sponsors" title="Sponsors">Sponsors</a></li>
<li><a href="https://enei.pt/#faqs" title="Faq's">Faq's</a></li>
</ul>
</nav>
</header>
<header class="bg-gradient">
<div class="container-app">
<div class="header-app">
<h1>Aplicação ENEI 2019</h1>
<h3>Esta aplicação vai-te acompanhar durante todo o evento, melhorando drásticamente a interação com as
empresas e atividades.</h3>
</div>
<div class="image-holder-app">
<img src="imgs/header.png" alt="phone" class="img-fluid">
</div>
</div>
</header>
<div class="section darker-bg">
<div class="section-title">
<h3>conhece as</h3>
<h2>principais funcionalidades</h2>
</div>
<div class="card-features">
<div class="card-body">
<h3 class="card-title">
Página Inicial e de Perfil
</h3>
<p class="card-text">Acede às tuas informações pessoais! Verifica também o que inclui o teu bilhete: o dias de acesso, alimentação e alojamento.</p>
</div>
<div class="card-body">
<h3 class="card-title">
Inscrições em palestras
</h3>
<p class="card-text">Através da aplicação é ainda possível fazer inscrições nas palestras e workshops
</p>
<p class="card-text">À medida que vão saindo confirmações, as inscrições ficarão disponíveis na APP</p>
</div>
<div class="card-body">
<h3 class="card-title">
Calendário
</h3>
<p class="card-text">Acompanha todas as palestras e os seus detalhes através da app.</p>
<p class="card-text">Possui ainda a localização da palestra no campus.</p>
</div>
<div class="card-body">
<h3 class="card-title">
Criar equipas
</h3>
<p class="card-text">Faz um simples scan e adiciona os teus amigos à tua equipa!!</p>
<p class="card-text">Caso sejas o capitão da equipa, podes ainda alterar o nome e remover elementos.</p>
</div>
</div>
</div>
<div class="login-app">
<img src="imgs/p.png" alt="phone" class="img-fluid">
<div class="container-login">
<h1>Como usar a APP?</h1>
<div class="text-login">
<p>Para utilizares a app deves possuir um bilhete.</p>
<p>No momento de compra do bilhete recebeste um email com o bilhete, esse bilhete possuí um QR code.
</p>
<p>O login na app é feito usando esse QR code</p>
<p>Para obteres a password, deves efectuar reset através da APP, ou preenchendo o campo a baixo.</p>
<input id="email-input" type="email" name="email" placeholder="Introduz o teu email">
<button class="button-default" onclick="resetPassword()">Reset Password</button>
</div>
</div>
</div>
<div class="container features-app ">
<h3 class="subtitle">descobre as </h3>
<h1>Páginas da aplicação</h1>
<button class="tablink" onclick="openPage('Home', this, 'white')" id="defaultOpen">Home</button>
<button class="tablink" onclick="openPage('teams', this, 'white')">Equipas</button>
<button class="tablink" onclick="openPage('events', this, 'white')">Eventos</button>
<button class="tablink" onclick="openPage('game', this, 'white')">Jogo do ENEI</button>
<button class="tablink" onclick="openPage('calendar', this, 'white')">Calendário</button>
<button class="tablink" onclick="openPage('sign', this, 'white')">Inscrições </button>
<div id="Home" class="tabcontent">
<div class="tabDetails">
<div class="tabText">
<h2>Home</h2>
<p>Nesta página podes encontrar as tua informações pessoais. </p>
<p>
</p>
</div>
</div>
</div>
<div id="teams" class="tabcontent">
<div class="tabText">
<h2>Equipas</h2>
<p>Encontra todos os detalhes da tua equipa. Podes criar, editar e eliminar equipas para o ENEI Caching e Rally Tascas.</p>
<p>
</p>
</div>
</div>
<div id="events" class="tabcontent">
<div class="tabText">
<h2>Eventos</h2>
<p>Nesta página podes encontrar todas as informações sobre as atividades que ocorrem no evento!</p>
<p>
</p>
</div>
</div>
<div id="game" class="tabcontent">
<div class="tabText">
<h2>Jogo do ENEI</h2>
<p>Colecciona todos cromos do evento! Participa em todas as atividades de forma a aumentar a tua probabilidade de ganhar um prémio.</p>
<p>
</p>
</div>
</div>
<div id="calendar" class="tabcontent">
<div class="tabText">
<h2>Calendário</h2>
<p>Nesta página podes encontrar as tua informações relativas ao calendário </p>
<p>
</p>
</div>
</div>
<div id="sign" class="tabcontent">
<div class="tabText">
<h2>Inscrições</h2>
<p>Nesta página podes efectuar as incrições em palestras </p>
<p>Neste momento existe um bug no IOS, deves esperar pela aprovação da Apple para obter a nova versão.</p>
<p>
</p>
</div>
</div>
</div>
<div class="download-app">
<div class="left">
<h1>Faz já o download da aplicação</h1>
<h3>A versão de IOS possuí alguns bugs que já foram corrigidos, estamos a aguardar a revisão por parte da Apple</h3>
<h3>Existe uma versão mais antiga disponível para download. Deves atualizar assim que possível</h3>
<div class="buttons">
<a href="https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1457702417&mt=8">
<div class="button-app">
<div class="button-logo">
<i class="fab fa-apple"></i>
</div>
<div class="button-text">
<h3>Available on the</h3>
<h2>App Store</h2>
</div>
</div>
</a>
<a href="https://play.google.com/store/apps/details?id=pt.enei">
<div class="button-app">
<div class="button-logo">
<i class="fab fa-google-play"></i>
</div>
<div class="button-text">
<h3>Available on the</h3>
<h2>Play Store</h2>
</div>
</div>
</a>
</div>
</div>
</div>
<!-- faqs section -->
<section id="faqs">
<div class="container">
<div class="row">
<div class="col-lg-5">
<div class="pre-h1">Perguntas Frequentes</div>
<h1>Faq</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<ul id="accordion">
<h3>Fica atento</h3>
</ul>
</div>
</div>
</section>
<!-- footer -->
<footer>
<div class="container">
<div class="row">
<div class="col-lg-4 col-xs-6">
<p>© 2019 ENEI . Todos os direitos reservados</p>
</div>
<div class="col-lg-8 col-xs-6">
<ul id="social-network">
<li><a href="https://www.facebook.com/ENEIConf/" title="Facebook" target="_blank" class="icon-facebook"></a></li>
<li><a href="https://www.instagram.com/eneiconf/" title="Instagram" target="_blank" class="icon-instagram"></a></li>
<li><a href="https://www.linkedin.com/company/enei/" title="Linkedin" target="_blank" class="icon-linkedin"></a></li>
<li><a href="mailto:geral@enei.pt" title="Email" target="_blank" class="icon-email"></a>
</li>
</ul>
</div>
</div>
</div>
</footer>
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="js/scripts.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
resetPassword = () => {
var input = document.getElementById("email-input");
if (input != " ") {
console.log(input.value);
axios({
url: `https://tickets.enei.pt/internal/api/User/RecoverPassword?input=${input.value}&type=0`,
method: 'get',
}).then(a => {
console.log(a);
Swal.fire(
'Sucesso!',
'Foi enviado para o teu email um pedido de recuperação. Pode demorar demorar alguns minutos...',
'success'
)
}).catch(err => {
if (err.response.status === 500) {
Swal.fire(
'Utilizador não existe!',
'Verifica se o email é válido, caso o erro continue contacta a comissão organizadora',
'error'
)
}
else {
Swal.fire(
'Erro!',
'Aconteceu algum erro com o teu pedido...',
'error'
)
}
})
} else {
Swal.fire(
'Erro!',
'Deves preencher o campo de email.',
'warning'
)
}
}
</script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@8"></script>
<script src="https://cdn.jsdelivr.net/npm/promise-polyfill"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-130588243-1');
</script>
<script>
AOS.init();
</script>
</body>
</html>

398
api/Views/Landing/app.html Normal file
View File

@ -0,0 +1,398 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt" xml:lang="pt">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, user-scalable=0" name="viewport">
<meta content="width" name="MobileOptimized">
<meta content="true" name="HandheldFriendly">
<!-- Place favicon.ico in the root directory -->
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
<link rel="manifest" href="site.webmanifest">
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<title>ENEI'19</title>
<meta name="description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.">
<meta property="og:locale" content="pt_PT" />
<meta property="og:title" content="ENEI'19" />
<meta property="og:description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial." />
<meta property="og:site_name" content="ENEI'19" />
<meta property="og:url" content="http://www.enei.pt/" />
<meta property="og:image" content="http://www.enei.pt/imgs/share-image.jpg" />
<meta property="og:type" content="Website" />
<link rel="canonical" href="http://www.enei.pt/" />
<link href="bootstrap-grid.css" rel="stylesheet" type="text/css" />
<link href="main.css" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Bai+Jamjuree:400,600,700" rel="stylesheet">
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
</head>
<body>
<header id="main-menu">
<nav>
<a href="#" title="Abrir menu" rel="nofollow" id="open-menu-mobile">Menu</a>
<ul>
<li><a href="#enei" title="Enei">Enei</a></li>
<li class="unavailable">Oradores</li>
<li class="unavailable">Programa</li>
<li><a href="#precos" title="Preços">Preços</a></li>
<li class="unavailable">App</li>
<!-- <li><a href="#ctf" title="Faq's">CTF</li> -->
<li><a href="#sponsors" title="Sponsors">Sponsors</a></li>
<li><a href="#faqs" title="Faq's">Faq's</a></li>
</ul>
</nav>
</header>
<header class="bg-gradient">
<div class="container-app">
<div class="header-app">
<h1>Aplicação ENEI 2019</h1>
<h3>Esta aplicação vai-te acompanhar durante todo o evento, melhorando drásticamente a interação com as
empresas e atividades.</h3>
</div>
<div class="image-holder-app">
<img src="imgs/header.png" alt="phone" class="img-fluid">
</div>
</div>
</header>
<div class="section darker-bg">
<div class="section-title">
<h3>conhece as</h3>
<h2>principais funcionalidades</h2>
</div>
<div class="card-features">
<div class="card-body">
<h3 class="card-title">
Jogo do ENEI
</h3>
<p class="card-text">Nesta página podes encontrar as tuas informações pessoais, o que tens direito com o
teu bilhete, e ainda as tuas equipas</p>
</div>
<div class="card-body">
<h3 class="card-title">
Inscrições em palestras
</h3>
<p class="card-text">Através da aplicação é ainda possível fazer inscrições nas palestras e workshops
</p>
</div>
<div class="card-body">
<h3 class="card-title">
Calendário
</h3>
<p class="card-text">Acompanha todas as palestras e os seus detalhes através da app.</p>
<p class="card-text">Possui ainda a localização da palestra no campus.</p>
</div>
<div class="card-body">
<h3 class="card-title">
Criar equipas
</h3>
<p class="card-text">Faz um simples scan e adiciona os teus amigos à tua equipa!!</p>
<p class="card-text">Caso sejas o capitão da equipa, podes ainda alterar o nome e remover elementos.</p>
</div>
</div>
</div>
<div class="login-app">
<img src="imgs/p.png" alt="phone" class="img-fluid">
<div class="container-login">
<h1>Como usar a APP?</h1>
<div class="text-login">
<p>Para utilizares a app deves possuir um bilhete.</p>
<p>No momento de compra do bilhete recebeste um email com o bilhete, esse bilhete possuí um QR code.
</p>
<p>O login na app é feito usando esse QR code</p>
<p>Para obteres a password, deves efectuar reset através da APP, ou preenchendo o campo a baixo.</p>
<form>
<input type="email" placeholder="Introduz o teu email">
<input type="button" data-bind="click: buy" value="RESET PASSWORD">
</form>
</div>
</div>
</div>
<div class="container features-app ">
<h3 class="subtitle">descobre as </h3>
<h1>Páginas da aplicação</h1>
<button class="tablink" onclick="openPage('Home', this, 'white')" id="defaultOpen">Home</button>
<button class="tablink" onclick="openPage('teams', this, 'white')">Equipas</button>
<button class="tablink" onclick="openPage('events', this, 'white')">Eventos</button>
<button class="tablink" onclick="openPage('game', this, 'white')">Jogo do ENEI</button>
<button class="tablink" onclick="openPage('calendar', this, 'white')">Calendário</button>
<button class="tablink" onclick="openPage('sign', this, 'white')">Inscrições </button>
<div id="Home" class="tabcontent">
<div class="tabDetails">
<img src="imgs/home.png" alt="phone">
<div class="tabText">
<h2>Home</h2>
<h3>Página inicial e de perfil.</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rutrum, urna eu pellentesque
pretium, nisi nisi fermentum enim, et sagittis dolor nulla vel sapien. Vestibulum sit amet
mattis ante. Ut placerat dui eu nulla congue tincidunt ac a nibh. Mauris accumsan pulvinar lorem
placerat volutpat. Praesent quis facilisis elit. Sed condimentum neque quis ex porttitor.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer rutrum, urna eu pellentesque
pretium, nisi nisi fermentum enim, et sagittis dolor nulla vel sapien. Vestibulum sit amet
mattis ante. Ut placerat dui eu nulla congue tincidunt ac a nibh. Mauris accumsan pulvinar lorem
placerat volutpat. Praesent quis facilisis elit. Sed condimentum neque quis ex porttitor,</p>
</div>
</div>
</div>
<div id="teams" class="tabcontent">
<h3>Equipas</h3>
<p>equipas!</p>
</div>
<div id="events" class="tabcontent">
<h3>Eventos</h3>
<p>Eventos.</p>
</div>
<div id="game" class="tabcontent">
<h3>Jogo do enei</h3>
<p>Jogo.</p>
</div>
<div id="calendar" class="tabcontent">
<h3>Calendário</h3>
<p>calendar.</p>
</div>
<div id="sign" class="tabcontent">
<h3>Inscrições</h3>
<p>Inscrições</p>
</div>
</div>
<div class="download-app">
<div class="left">
<h1>Faz já o download da aplicação</h1>
<h3>Aplicação disponível nas típicas lojas de aplicações.</h3>
<div class="buttons">
<a href="#">
<div class="button-app">
<div class="button-logo">
<i class="fab fa-apple"></i>
</div>
<div class="button-text">
<h3>Available on the</h3>
<h2>App Store</h2>
</div>
</div>
</a>
<a href="#">
<div class="button-app">
<div class="button-logo">
<i class="fab fa-google-play"></i>
</div>
<div class="button-text">
<h3>Available on the</h3>
<h2>Play Store</h2>
</div>
</div>
</a>
</div>
</div>
</div>
<!-- faqs section -->
<section id="faqs">
<div class="container">
<div class="row">
<div class="col-lg-5">
<div class="pre-h1">Perguntas Frequentes</div>
<h1>Faq</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<ul id="accordion">
<li>
<a href="#" title="O que é o ENEI?" rel="nofollow" class="toggle">O que é o ENEI?</a>
<div class="content-accordion">
<p>O Encontro Nacional de Estudantes de Informática (ENEI) é um evento que pretende
oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca
de
ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.
</p>
<p>Esta versão do evento também incluirá os tradicionais momentos de diversão noturnos
que
muito apelam a todos os participantes das antigas edições e são uma excelente via de
networking e transferência de conhecimento!</p>
</div>
</li>
<li>
<a href="#" title="Onde me posso inscrever?" rel="nofollow" class="toggle">Onde me posso
inscrever?</a>
<div class="content-accordion">
<p>Podes adquirir o teu bilhete <a href="https://tickets.enei.pt" title="Aqui">AQUI</a>.
</p>
</div>
</li>
<li>
<a href="#" title="Quando é que o programa vai estar disponível?" rel="nofollow"
class="toggle">Quando é que o programa vai estar disponível?</a>
<div class="content-accordion">
<p>O programa vai sendo lançado nas próximas semanas de forma iterativa.</p>
</div>
</li>
<li>
<a href="#" title="Quem pode participar no evento?" rel="nofollow" class="toggle">Quem pode
participar no evento?</a>
<div class="content-accordion">
<p>Podem participar no ENEI'19 todos os estudantes do Ensino Superior ou Secundário.</p>
</div>
</li>
<li>
<a href="#" title="Tenho acesso a todas as sessões?" rel="nofollow" class="toggle">Tenho
acesso a todas as sessões?</a>
<div class="content-accordion">
<p>Não, as palestras e workshops necessitam de inscrições visto que têm lugares
limitados.</p>
<p>Brevemente poderás te inscrever na aplicação móvel do ENEI'19!</p>
</div>
</li>
</ul>
</div>
<div class="col-lg-6">
<ul id="accordion">
<li>
<a href="#" title="O que é o ENEI?" rel="nofollow" class="toggle">O que é o ENEI?</a>
<div class="content-accordion">
<p>O Encontro Nacional de Estudantes de Informática (ENEI) é um evento que pretende
oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca
de
ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.
</p>
<p>Esta versão do evento também incluirá os tradicionais momentos de diversão noturnos
que
muito apelam a todos os participantes das antigas edições e são uma excelente via de
networking e transferência de conhecimento!</p>
</div>
</li>
<li>
<a href="#" title="Onde me posso inscrever?" rel="nofollow" class="toggle">Onde me posso
inscrever?</a>
<div class="content-accordion">
<p>Podes adquirir o teu bilhete <a href="https://tickets.enei.pt" title="Aqui">AQUI</a>.
</p>
</div>
</li>
<li>
<a href="#" title="Quando é que o programa vai estar disponível?" rel="nofollow"
class="toggle">Quando é que o programa vai estar disponível?</a>
<div class="content-accordion">
<p>O programa vai sendo lançado nas próximas semanas de forma iterativa.</p>
</div>
</li>
<li>
<a href="#" title="Quem pode participar no evento?" rel="nofollow" class="toggle">Quem pode
participar no evento?</a>
<div class="content-accordion">
<p>Podem participar no ENEI'19 todos os estudantes do Ensino Superior ou Secundário.</p>
</div>
</li>
<li>
<a href="#" title="Tenho acesso a todas as sessões?" rel="nofollow" class="toggle">Tenho
acesso a todas as sessões?</a>
<div class="content-accordion">
<p>Não, as palestras e workshops necessitam de inscrições visto que têm lugares
limitados.</p>
<p>Brevemente poderás te inscrever na aplicação móvel do ENEI'19!</p>
</div>
</li>
</ul>
</div>
</div>
</div>
</section>
<!-- social network section -->
<aside id="social-network">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<h2>Segue-nos</h2>
<ul>
<li><a href="https://www.facebook.com/ENEIConf/" title="Facebook" target="_blank"
class="icon-facebook"></a></li>
<li><a href="https://www.instagram.com/eneiconf/" title="Instagram" target="_blank"
class="icon-instagram"></a></li>
<li><a href="https://www.linkedin.com/company/enei/" title="Linkedin" target="_blank"
class="icon-linkedin"></a></li>
<li><a href="mailto:geral@enei.pt" title="Email" target="_blank" class="icon-email"></a></li>
</ul>
</div>
</div>
</div>
</aside>
<!-- footer -->
<footer>
<div class="container">
<div class="row">
<div class="col-lg-12">
<p>© 2019 ENEI . Todos os direitos reservados</p>
</div>
</div>
</div>
</footer>
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="js/scripts.js"></script>
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-130588243-1');
</script>
<script>
AOS.init();
</script>
</body>
</html>

View File

@ -0,0 +1,606 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt" xml:lang="pt">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, user-scalable=0" name="viewport">
<meta content="width" name="MobileOptimized">
<meta content="true" name="HandheldFriendly">
<!-- Place favicon.ico in the root directory -->
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
<link rel="manifest" href="site.webmanifest">
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<title>Career Path - Inteligência Artificial</title>
<meta name="description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.">
<meta property="og:locale" content="pt_PT" />
<meta property="og:title" content="Career Path - Inteligência Artificial" />
<meta property="og:description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial." />
<meta property="og:site_name" content="Career Path - Inteligência Artificial" />
<meta property="og:url" content="http://www.enei.pt/cp-inteligencia-artificial.html" />
<meta property="og:image" content="http://www.enei.pt/imgs/share-image.jpg" />
<meta property="og:type" content="Website" />
<link rel="canonical" href="http://www.enei.pt/cp-inteligencia-artificial.html" />
<link href="bootstrap-grid.css" rel="stylesheet" type="text/css" />
<link href="main.css" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Bai+Jamjuree:400,600,700" rel="stylesheet">
</head>
<body class="career-path ai-color">
<header id="main-menu">
<nav>
<a href="#" title="Abrir menu" rel="nofollow" id="open-menu-mobile">Menu</a>
<ul>
<li><a href="#enei" title="Enei">Sobre</a></li>
<li><a href="#calendar" title="Calendário">Calendário</a></li>
<li><a href="#speakers" title="Speakers">Speakers</a></li>
</ul>
</nav>
</header>
<!-- apresentation section -->
<div id="apresentation">
<div class="career-apresentation">
<div class="career-name">Inteligência Artificial <span>Powered by:</span></div>
<img src="imgs/blip-sponsor.png" alt="Blip Image">
</div>
</div>
<!-- enei section -->
<section id="enei">
<div class="container">
<div class="row">
<div class="col-lg-7 col-sm-7">
<div class="pre-h1">Career Path</div>
<h1>Inteligência Artificial</h1>
<hr>
<p>O Encontro Nacional de Estudantes de Informática é um dos maiores eventos na área da tecnologia
em
Portugal
reunindo estudantes de informática de todas as faculdades do país.</p>
<p>Reconhecido pela sua qualidade e variedade de temas e atividades, tem como prioridade o contacto
entre
participantes e empresas, bem como a socialização, o convívio e a troca de experiências e
conhecimentos
entre os presentes.</p>
</div>
</div>
</div>
</section>
<!-- calendario section -->
<section id="calendar" class="grey">
<div class="container">
<div class="row">
<div class="col-lg-6 col-lg-offset-3">
<h1>Calendário</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div id="calendar-container">
<div id="event-days-list">
<button class="selected" data-eventDay="12">12 <span>Abril</span> </button>
<button data-eventDay="13">13 <span>Abril</span></button>
<button data-eventDay="14">14 <span>Abril</span></button>
<button data-eventDay="15">15 <span>Abril</span></button>
</div>
<div class="day-night-filter">
<div class="row">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-6">
<div class="half-day">Diurno</div>
</div>
<div class="col-lg-6">
<div class="half-day">Noturno</div>
</div>
</div>
</div>
</div>
</div>
<div id="content-container">
<section class="content visible" data-eventContent="12">
<div class="row">
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>8:00 - 10:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div>
<button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>8:00 - 10:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>18:00 - 19:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
</div>
</section>
<div class="content" data-eventContent="13">
<div class="row">
<div class="col-lg-6">Conteudo para dia (13 de Abril)</div>
<div class="col-lg-6">Conteudo para noite (13 de Abril)</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- career path section -->
<section id="career-path">
<div class="container">
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-sm-6 col-sm-offset-3 col-xs-10 col-xs-offset-1">
<h1>career Path</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-lg-2 ai">
<a href="cp-inteligencia-artificial.html" title="Carrer Path X" class="career-path-links">
<h2>Inteligência Artificial</h2>
<span class="separator"></span>
<span class="powered-by">Powered by:</span>
<img src="imgs/blip-sponsor.png" alt="Blip Image">
</a>
</div>
<div class="col-lg-2 web">
<a href="#" title="Carrer Path X" class="career-path-links">
<h2>Web Development</h2>
<span class="separator"></span>
<span class="powered-by">Powered by:</span>
<img src="imgs/blip-sponsor.png" alt="Blip Image">
</a>
</div>
<div class="col-lg-2 ai">
<a href="#" title="Carrer Path X" class="career-path-links">
<h2>Inteligência Artificial</h2>
<span class="separator"></span>
<span class="powered-by">Powered by:</span>
<img src="imgs/blip-sponsor.png" alt="Blip Image">
</a>
</div>
<div class="col-lg-2 web">
<a href="#" title="Carrer Path X" class="career-path-links">
<h2>Web Development</h2>
<span class="separator"></span>
<span class="powered-by">Powered by:</span>
<img src="imgs/blip-sponsor.png" alt="Blip Image">
</a>
</div>
<div class="col-lg-2 ai">
<a href="#" title="Carrer Path X" class="career-path-links">
<h2>Inteligência Artificial</h2>
<span class="separator"></span>
<span class="powered-by">Powered by:</span>
<img src="imgs/blip-sponsor.png" alt="Blip Image">
</a>
</div>
<div class="col-lg-2 web">
<a href="#" title="Carrer Path X" class="career-path-links">
<h2>Web Development</h2>
<span class="separator"></span>
<span class="powered-by">Powered by:</span>
<img src="imgs/blip-sponsor.png" alt="Blip Image">
</a>
</div>
</div>
</div>
</section>
<!-- programa geral -->
<section id="calendar" class="grey">
<div class="container">
<div class="row">
<div class="col-lg-6 col-lg-offset-3">
<h1>Programa Geral</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-lg-12">
<div id="calendar-container">
<div id="event-days-list">
<button class="selected" data-eventDay="12">12 <span>Abril</span> </button>
<button data-eventDay="13">13 <span>Abril</span></button>
<button data-eventDay="14">14 <span>Abril</span></button>
<button data-eventDay="15">15 <span>Abril</span></button>
</div>
<div class="day-night-filter">
<div class="row">
<div class="col-lg-12">
<div class="row">
<div class="col-lg-6">
<div class="half-day">Diurno</div>
</div>
<div class="col-lg-6">
<div class="half-day">Noturno</div>
</div>
</div>
</div>
</div>
</div>
<div id="content-container">
<section class="content visible" data-eventContent="12">
<div class="row">
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>8:00 - 10:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<a href="#" target="_blank" class="event-location"><span
class="icon-linkedin_speaker"></span>Linkedin</a>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div>
<button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>8:00 - 10:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<a href="#" target="_blank" class="event-location"><span
class="icon-linkedin_speaker"></span>Linkedin</a>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>18:00 - 19:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<a href="#" target="_blank" class="event-location"><span
class="icon-linkedin_speaker"></span>Linkedin</a>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
</div>
</section>
<section class="content" data-eventContent="13">
<div class="row">
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>8:00 - 10:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<a href="#" target="_blank" class="event-location"><span
class="icon-linkedin_speaker"></span>Linkedin</a>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div>
<button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>18:00 - 19:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
</div>
</section>
<section class="content" data-eventContent="14">
<div class="row">
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>9:00 - 10:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div>
<button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>19:00 - 19:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
</div>
</section>
<section class="content" data-eventContent="15">
<div class="row">
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>10:00 - 11:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div>
<button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="row event-data">
<div class="col-lg-4">
<div class="event-time"></span>20:00 - 19:00
</div>
</div>
<div class="col-lg-8 event-details">
<h2>Palestra sobre a fome em África</h2>
<h3>Pedro Duarte</h3>
<div class="event-location"><span class="icon-company"></span>Microsoft
Corporation</div>
<div class="event-location"><span class="icon-location"></span>Edíficio
Gerais (G1)</div> <button class="event-description"><span
class="arrow">&#10132;</span>Descrição</button>
</div>
</div>
</div>
</div>
</section>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- oradores section -->
<section id="speakers">
<div class="container">
<div class="row">
<div class="col-lg-6 col-lg-offset-3 col-sm-12 col-sm-offset-0 col-xs-10 col-xs-offset-1">
<h1>Speakers</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-lg-3">
<a href="https://www.linkedin.com/in/pedroazeredoduarte/" title="Pedro Duarte" target="_blank"
class="speaker-button">
<div class="speaker-image">
<img src="imgs/speakers-image/pedro-duarte.jpg" alt="Pedro Duarte">
<img src="imgs/speakers-company/microsoft.png" alt="Microsoft" class="company-image">
</div>
<h2 class="speaker-name">Pedro Duarte</h2>
<div class="speaker-company">Microsoft Corporation</div>
</a>
</div>
<div class="col-lg-3">
<a href="https://www.linkedin.com/in/pedroazeredoduarte/" title="Pedro Duarte" target="_blank"
class="speaker-button">
<div class="speaker-image">
<img src="imgs/speakers-image/pedro-duarte.jpg" alt="Pedro Duarte">
<img src="imgs/speakers-company/microsoft.png" alt="Microsoft" class="company-image">
</div>
<h2 class="speaker-name">Pedro Duarte</h2>
<div class="speaker-company">Microsoft Corporation</div>
</a>
</div>
<div class="col-lg-3">
<a href="https://www.linkedin.com/in/pedroazeredoduarte/" title="Pedro Duarte" target="_blank"
class="speaker-button">
<div class="speaker-image">
<img src="imgs/speakers-image/pedro-duarte.jpg" alt="Pedro Duarte">
<img src="imgs/speakers-company/microsoft.png" alt="Microsoft" class="company-image">
</div>
<h2 class="speaker-name">Pedro Duarte</h2>
<div class="speaker-company">Microsoft Corporation</div>
</a>
</div>
<div class="col-lg-3">
<a href="https://www.linkedin.com/in/pedroazeredoduarte/" title="Pedro Duarte" target="_blank"
class="speaker-button">
<div class="speaker-image">
<img src="imgs/speakers-image/pedro-duarte.jpg" alt="Pedro Duarte">
<img src="imgs/speakers-company/microsoft.png" alt="Microsoft" class="company-image">
</div>
<h2 class="speaker-name">Pedro Duarte</h2>
<div class="speaker-company">Microsoft Corporation</div>
</a>
</div>
<div class="col-lg-3">
<a href="https://www.linkedin.com/in/pedroazeredoduarte/" title="Pedro Duarte" target="_blank"
class="speaker-button">
<div class="speaker-image">
<img src="imgs/speakers-image/pedro-duarte.jpg" alt="Pedro Duarte">
<img src="imgs/speakers-company/microsoft.png" alt="Microsoft" class="company-image">
</div>
<h2 class="speaker-name">Pedro Duarte</h2>
<div class="speaker-company">Microsoft Corporation</div>
</a>
</div>
<div class="col-lg-3">
<a href="https://www.linkedin.com/in/pedroazeredoduarte/" title="Pedro Duarte" target="_blank"
class="speaker-button">
<div class="speaker-image">
<img src="imgs/speakers-image/pedro-duarte.jpg" alt="Pedro Duarte">
<img src="imgs/speakers-company/microsoft.png" alt="Microsoft" class="company-image">
</div>
<h2 class="speaker-name">Pedro Duarte</h2>
<div class="speaker-company">Microsoft Corporation</div>
</a>
</div>
</div>
</div>
</section>
<!-- social network section -->
<aside id="social-network">
<div class="container">
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<h2>Segue-nos</h2>
<ul>
<li><a href="https://www.facebook.com/ENEIConf/" title="Facebook" target="_blank"
class="icon-facebook"></a></li>
<li><a href="https://www.instagram.com/eneiconf/" title="Instagram" target="_blank"
class="icon-instagram"></a></li>
<li><a href="https://www.linkedin.com/company/enei/" title="Linkedin" target="_blank"
class="icon-linkedin"></a></li>
<li><a href="mailto:geral@enei.pt" title="Email" target="_blank" class="icon-email"></a></li>
</ul>
</div>
</div>
</div>
</aside>
<!-- footer -->
<footer>
<div class="container">
<div class="row">
<div class="col-lg-12">
<p>© 2019 ENEI . Todos os direitos reservados</p>
</div>
</div>
</div>
</footer>
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="js/scripts.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-130588243-1');
</script>
</body>
</html>

BIN
api/Views/Landing/css/.DS_Store vendored Normal file

Binary file not shown.

7
api/Views/Landing/css/bootstrap.min.css vendored Executable file

File diff suppressed because one or more lines are too long

12
api/Views/Landing/css/owl.carousel.min.css vendored Executable file
View File

@ -0,0 +1,12 @@
/**
* Owl Carousel v2.2.1
* Copyright 2013-2017 David Deutsch
* Licensed under ()
*/
.owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}
/**
* Owl Carousel v2.2.1
* Copyright 2013-2017 David Deutsch
* Licensed under ()
*/
.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,345 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="pt" xml:lang="pt">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta content="width=device-width, initial-scale=1, user-scalable=0" name="viewport">
<meta content="width" name="MobileOptimized">
<meta content="true" name="HandheldFriendly">
<!-- Place favicon.ico in the root directory -->
<link rel="apple-touch-icon" sizes="180x180" href="apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16x16.png">
<link rel="manifest" href="site.webmanifest">
<link rel="mask-icon" href="safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="theme-color" content="#ffffff">
<title>ENEI'19</title>
<meta name="description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial.">
<meta property="og:locale" content="pt_PT" />
<meta property="og:title" content="ENEI'19" />
<meta property="og:description"
content="Página do Encontro Nacional de Estudantes de Informática 2019, no Instituto Superior de Engenharia de Coimbra (ISEC) a realizar-se entre 12 e 15 de abril de 2019. O ENEI pretende oferecer aos estudantes de todo o país um evento que promove a aprendizagem, a troca de ideias e o convívio, enquanto tenta criar fortes ligações com o mundo empresarial." />
<meta property="og:site_name" content="ENEI'19" />
<meta property="og:url" content="http://www.enei.pt/" />
<meta property="og:image" content="http://www.enei.pt/imgs/share-image.jpg" />
<meta property="og:type" content="Website" />
<link rel="canonical" href="http://www.enei.pt/" />
<link href="bootstrap-grid.css" rel="stylesheet" type="text/css" />
<link href="main.css" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Bai+Jamjuree:400,600,700" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"
integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy"
crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css"
integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
</head>
<body>
<div id="overlay"></div>
<header id="main-menu">
<nav>
<a href="#" title="Abrir menu" rel="nofollow" id="open-menu-mobile">Menu</a>
<ul style="margin-bottom: 0;">
<li><a href="https://enei.pt/#enei" title="Enei">Enei</a></li>
<li><a href="https://enei.pt/#calendar">Programa</a></li>
<li><a href="https://enei.pt/#precos" title="Preços">Preços</a></li>
<li><a href="https://enei.pt/app" title="Preços">App</a></li>
<li><a href="https://enei.pt/ctf" title="CTF">CTF</li>
<li><a href="https://enei.pt/#sponsors" title="Sponsors">Sponsors</a></li>
<li><a href="https://enei.pt/#faqs" title="Faq's">Faq's</a></li>
</ul>
</nav>
</header>
<div class="ctf-header">
<div class="ctf-top10">
<h1 class="top-title">Melhores classificados CTF </h1>
<center><h3>Revelados em breve</h3></center>
</div>
<h3 class="about-top">Estas pontuações refletem o somatório das pontuações dos níveis cumpridos.</h3>
</div>
<div class="ctf-explain">
<div>
<h3>O que é o capture the flag?</h3>
<p>
O Capture The Flag é um concurso que vamos realizar diretamente relacionado com o jogo do ENEI, e com os
respetivos prémios espetaculares que temos a oferecer (Nintendo Switch, entre outros).
Este jogo é uma mistura de temas altamente relacionados com Informática, temas como WEB, CRYPTO,
REVERSE_ENGINEERING, e uma mistura de tantos outros. Todos os níveis têm o mesmo objetivo: Encontrar uma
frase (string) que por norma se encontra escondida.
Qualquer um pode participar no jogo (desde que já detenha um bilhete) apenas com um simples scan a este
QR code.
No fim de encontrares a string, deves gerar um QR code com ela e pronto, o nível está completo!
Basta então fazeres um scan a esse QR e obteres todos os pontos que mereces.
</p>
</div> <img src="imgs/flag.png" alt="app">
</div>
<div class="ctf-prizes">
<h3>O que posso ganhar ao realizar estes desafios?</h3>
<h5>O CTF vale cerca de 50% dos pontos do jogo do ENEI.</h5>
<div class="prizes-container">
<div class="prize">
<div class="prize-logo"><i class="fab fa-nintendo-switch"></i></div>
<h4>Nitendo Switch</h4>
</div>
<div class="prize">
<div class="prize-logo"><i class="fas fa-volume-up"></i></div>
<h4>Coluna Bluetooth Xiaomi</h4>
</div>
<div class="prize">
<div class="prize-logo"><i class="fas fa-headphones"></i></i></div>
<h4>Auscultadores AKG K518</h4>
</div>
<div class="prize">
<div class="prize-logo"><i class="fas fa-battery-full"></i></div>
<h4>Power Bank Xiaomi Mi 5000</h4>
</div>
</div>
</div>
<div class="ctf-levels">
<div class="level1-ctf level">
<h3>Web</h3>
<div class="sub-container">
<div class="sub-level">
<h4>1 - WHATSTHEPASSWORD<i>(31 pontos)</i></h4>
<p>Começa esta jornada, com um desafio fácil relacionado com WEB. Talvez desta forma fiques motivado
a continuar!</p>
<a href="https://enei.pt/1.html">
<div class="btn-dwn-ctf">
<h3>Visitar</h3> <i class="fas fa-link"></i>
</div>
</a>
</div>
<div class="sub-level">
<h4>2 - ROT13 <i>(37 pontos)</i></h4>
<p> De forma a provares melhor o significado deste concurso, deixamos-te um desafio WEB com alguma
análise.</p>
<a href="https://enei.pt/1.html">
<div class="btn-dwn-ctf">
<h3>Visitar</h3> <i class="fas fa-link"></i>
</div>
</a>
</div>
</div>
</div>
<div class="level2-ctf level">
<h3>Analyse</h3>
<div class="sub-container">
<div class="sub-level">
<h4>3 - BURRO <i>(41 pontos)</i></h4>
<p>Com este desafio pomos à prova a tua análise de ficheiros e até pode ser que te rias a completar
o 3º de muita diversão.</p>
<a href="https://enei.pt/ctf/Burro.zip">
<div class="btn-dwn-ctf">
<h3>Download</h3> <i class="fas fa-file-download"></i>
</div>
</a>
</div>
<div class="sub-level">
<h4>4 - WHOAMI <i>(43 pontos)</i></h4>
<p> Vamos lá continuar a desenvolver esse raciocínio, mas desta vez com um pouco de pacotes à
mistura. É uma confusão!! </p>
<a href="https://enei.pt/ctf/WHOAMI.zip">
<div class="btn-dwn-ctf">
<h3>Download</h3> <i class="fas fa-file-download"></i>
</div>
</a>
</div>
</div>
</div>
<div class="level3-ctf level">
<h3>Reverse Engineering </h3>
<div class="sub-container">
<div class="sub-level">
<h4>5 - REVERSEENGINEERING <i>(47 pontos)</i></h4>
<p> Daqui em diante a dificuldade começa a mudar de direção, vais acompanhar? Fica aqui um desafio
de reverse_engineering, nada de muito complicado (para ti).</p>
<a href="https://enei.pt/ctf/Try_Me.zip">
<div class="btn-dwn-ctf">
<h3>Download</h3> <i class="fas fa-file-download"></i>
</div>
</a>
</div>
<div class="sub-level">
<h4>6 -OLD <i>(59 pontos)</i></h4>
<p>Prova o cerne destes desafios, explorando, analisando e percebendo como descobrir a flag
escondida, o típico desafio crypto.</p>
<a href="https://enei.pt/ctf/OLD.zip">
<div class="btn-dwn-ctf">
<h3>Download</h3> <i class="fas fa-file-download"></i>
</div>
</a>
</div>
</div>
</div>
<div class="level4-ctf level">
<h3> Crypto</h3>
<div class="sub-container">
<div class="sub-level">
<h4>7 - ASM_IS_LIFE <i>(61 pontos)</i></h4>
<p> Deixamos aqui um desafio destruidor de sonhos, é verdade.. Estás pronto para um bocadinho de
assembly? </p>
<a href="https://enei.pt/ctf/ASM_IS_LIFE.zip">
<div class="btn-dwn-ctf">
<h3>Download</h3> <i class="fas fa-file-download"></i>
</div>
</a>
</div>
<div class="sub-level">
<h4>8 - OLD2 <i>(89 pontos)</i></h4>
<p>Aqui fica a continuação do desafio nº 6, se ainda não o completas-te, não faz sentido continuares
este. Se já o fizes-te, então estás pronto para experimentar esta aventura que teve início em
2002 (DosBox). </p>
<a href="https://enei.pt/ctf/OLD2.zip">
<div class="btn-dwn-ctf">
<h3>Download</h3> <i class="fas fa-file-download"></i>
</div>
</a>
</div>
</div>
</div>
<div class="level5-ctf level">
<h3>Engineering</h3>
<div class="sub-container">
<div class="sub-level">
<h4>9 - ZIPZIPZIPZIP <i>(101 pontos)</i></h4>
<p>(WARNING) Não aconselhado a pessoas sensíveis, este nível irá exigir de ti algum tempo,
raciocínio e conhecimento. Descobre a flag neste desafio propício a dares em louco. (SPOILER
ALERT) </p>
<a href="https://enei.pt/ctf/ZIPZIPZIPZIP.zip">
<div class="btn-dwn-ctf">
<h3>Download</h3> <i class="fas fa-file-download"></i>
</div>
</a>
</div>
<div class="sub-level">
<h4>10 - THE_END <i>(109 pontos)</i></h4>
<p> (WARNING) Nem preciso de comentar... Um nível como este não requer descrições. Boa Sorte! </p>
<a href="https://enei.pt/ctf/THEEND.zip">
<div class="btn-dwn-ctf">
<h3>Download</h3> <i class="fas fa-file-download"></i>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="explain-qr">
<img src="imgs/QRstart.png" alt="app">
<div class="explain">
<h3>Como registar progresso no CTF?</h3>
<p>Depois de obter a flag (string) do nível, deves gerar um QR code com a mesma.</p>
<p>Em seguida, deves usar a App para ler este QR code.</p>
<p>Caso seja válida, a flag irá dar-te acesso ao cromo que representa o nível.</p>
<p>Para testar podes usar este QR code (free points).</p>
<p>Boa sorte, a equipa do ENEI'19</p>
</div>
</div>
<!-- faqs section -->
<section id="faqs">
<div class="container">
<div class="row">
<div class="col-lg-5">
<div class="pre-h1">Perguntas Frequentes</div>
<h1>Faqs</h1>
<hr>
</div>
</div>
<div class="row">
<div class="col-lg-10">
<ul id="accordion">
<li>
<a href="#" title="Como posso participar?" rel="nofollow" class="toggle">Como posso
participar?</a>
<div class="content-accordion">
<p> Tal como o descrito acima, basta efetuares a compra do bilhete e fazeres scan do QR
code da página do CTF.
</p>
<p>Deves então prosseguir à descoberta das frases escondidas em cada desafio, e
procederes à geração de um QR code com essa string.</p>
</div>
</li>
<li>
<a href="#" title="Quando posso começar?" rel="nofollow" class="toggle">Quando posso
começar?
inscrever?</a>
<div class="content-accordion">
<p> O concurso irá iniciar no domingo (dia 7) às 14:30 horas e terminar no sábado (dia
13) às 00:00 horas.</p>
</div>
</li>
<li>
<a href="#" title="O que tenho eu a ganhar?" rel="nofollow" class="toggle">O que tenho eu a
ganhar?</a>
<div class="content-accordion">
<p>Com a realização do concurso não só irás evoluir as tuas competências gerais
relacionadas com Informática e Raciocínio Mental, como estás sujeito a ganhar
prémios fenomenais.</p>
</div>
</li>
</ul>
</div>
</div>
</div>
</section>
<footer>
<div class="container">
<div class="row">
<div class="col-lg-4 col-xs-6">
<p>© 2019 ENEI . Todos os direitos reservados</p>
</div>
<div class="col-lg-8 col-xs-6">
<ul id="social-network">
<li><a href="https://www.facebook.com/ENEIConf/" title="Facebook" target="_blank"
class="icon-facebook"></a></li>
<li><a href="https://www.instagram.com/eneiconf/" title="Instagram" target="_blank"
class="icon-instagram"></a></li>
<li><a href="https://www.linkedin.com/company/enei/" title="Linkedin" target="_blank"
class="icon-linkedin"></a></li>
<li><a href="mailto:geral@enei.pt" title="Email" target="_blank" class="icon-email"></a>
</li>
</ul>
</div>
</div>
</div>
</footer>
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="js/scripts.js"></script>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-130588243-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-130588243-1');
</script>
</body>
</html>

0
api/Views/Landing/ctf.html Executable file → Normal file
View File

0
api/Views/Landing/faqs.html Executable file → Normal file
View File

Binary file not shown.

View File

@ -14,4 +14,9 @@
<glyph unicode="&#xe904;" glyph-name="linkedin" horiz-adv-x="1027" d="M941.133 960h-855.306c-47.353 0-85.827-38.474-85.827-85.827v-855.306c0-47.353 38.474-85.827 85.827-85.827h855.306c47.353 0 85.827 38.474 85.827 85.827v855.306c0 47.353-38.474 85.827-85.827 85.827zM941.133 18.867h-855.306v855.306h855.306v-855.306zM248.601 548.624c-8.879 8.879-14.798 20.717-14.798 35.514s5.919 26.636 14.798 35.514c8.879 8.879 20.717 14.798 38.474 14.798s26.636-5.919 38.474-14.798c8.879-8.879 14.798-20.717 14.798-35.514s-5.919-26.636-14.798-38.474c-8.879-8.879-23.676-14.798-38.474-14.798-17.757 2.96-29.595 8.879-38.474 17.757zM242.682 474.636h82.867v-361.064h-82.867v361.064zM751.723 439.121c26.636-26.636 41.434-65.11 41.434-118.382v-207.168h-82.867v195.329c0 32.555-8.879 56.231-23.676 71.029s-35.514 23.676-65.11 23.676c-29.595 0-56.231-8.879-73.988-26.636s-26.636-44.393-26.636-79.908v-183.491h-82.867v361.064h79.908v-47.353c14.798 17.757 32.555 29.595 53.272 38.474s44.393 11.838 71.029 11.838c44.393 0 82.867-11.838 109.503-38.474z" />
<glyph unicode="&#xe905;" glyph-name="plus" d="M992 576h-352v352c0 17.664-14.304 32-32 32h-192c-17.696 0-32-14.336-32-32v-352h-352c-17.696 0-32-14.336-32-32v-192c0-17.696 14.304-32 32-32h352v-352c0-17.696 14.304-32 32-32h192c17.696 0 32 14.304 32 32v352h352c17.696 0 32 14.304 32 32v192c0 17.664-14.304 32-32 32z" />
<glyph unicode="&#xe906;" glyph-name="less" d="M32 576h960c17.696 0 32-14.336 32-32v-192c0-17.696-14.304-32-32-32h-960c-17.664 0-32 14.304-32 32v192c0 17.664 14.336 32 32 32z" />
<glyph unicode="&#xe907;" glyph-name="clock" d="M576 512v192h-128v-320h256v128zM512 960c-282.75 0-512-229.25-512-512s229.25-512 512-512 512 229.25 512 512-229.25 512-512 512zM512 64c-212.062 0-384 171.938-384 384s171.938 384 384 384 384-171.938 384-384-171.938-384-384-384z" />
<glyph unicode="&#xe908;" glyph-name="location" d="M512 960c-212.062 0-384-171.938-384-384s384-640 384-640 384 427.938 384 640-171.938 384-384 384zM512 320c-141.376 0-256 114.624-256 256s114.624 256 256 256 256-114.624 256-256-114.624-256-256-256zM512 704c-70.688 0-128-57.312-128-128s57.312-128 128-128 128 57.312 128 128-57.312 128-128 128z" />
<glyph unicode="&#xe909;" glyph-name="company" d="M716.8 704h102.4v-716.8h-614.4v716.8h102.4v51.2c0 56.554 45.846 102.4 102.4 102.4v0h204.8c56.554 0 102.4-45.846 102.4-102.4v0-51.2zM870.4 704h51.2c56.554 0 102.4-45.846 102.4-102.4v0-512c0-56.554-45.846-102.4-102.4-102.4v0h-51.2v716.8zM153.6 704v-716.8h-51.2c-56.554 0-102.4 45.846-102.4 102.4v0 512c0 56.32 46.080 102.4 102.4 102.4h51.2zM409.6 755.2v-51.2h204.8v51.2h-204.8z" />
<glyph unicode="&#xe90a;" glyph-name="linkedin_speaker" d="M928 960h-832c-52.8 0-96-43.2-96-96v-832c0-52.8 43.2-96 96-96h832c52.8 0 96 43.2 96 96v832c0 52.8-43.2 96-96 96zM384 128h-128v448h128v-448zM320 640c-35.4 0-64 28.6-64 64s28.6 64 64 64c35.4 0 64-28.6 64-64s-28.6-64-64-64zM832 128h-128v256c0 35.4-28.6 64-64 64s-64-28.6-64-64v-256h-128v448h128v-79.4c26.4 36.2 66.8 79.4 112 79.4 79.6 0 144-71.6 144-160v-288z" />
<glyph unicode="&#xeac9;" glyph-name="linkedin1" d="M928 960h-832c-52.8 0-96-43.2-96-96v-832c0-52.8 43.2-96 96-96h832c52.8 0 96 43.2 96 96v832c0 52.8-43.2 96-96 96zM384 128h-128v448h128v-448zM320 640c-35.4 0-64 28.6-64 64s28.6 64 64 64c35.4 0 64-28.6 64-64s-28.6-64-64-64zM832 128h-128v256c0 35.4-28.6 64-64 64s-64-28.6-64-64v-256h-128v448h128v-79.4c26.4 36.2 66.8 79.4 112 79.4 79.6 0 144-71.6 144-160v-288z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

0
api/Views/Landing/imgs/blip-sponsor.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
api/Views/Landing/imgs/client.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

0
api/Views/Landing/imgs/critical-sponsor.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

0
api/Views/Landing/imgs/email.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

0
api/Views/Landing/imgs/facebook.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

0
api/Views/Landing/imgs/image.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

0
api/Views/Landing/imgs/instagram.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

0
api/Views/Landing/imgs/linkedin.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

0
api/Views/Landing/imgs/logo-enei.ai Executable file → Normal file
View File

0
api/Views/Landing/imgs/logo-enei.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
api/Views/Landing/imgs/logo.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 957 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Some files were not shown because too many files have changed in this diff Show More